Сеанс Facebook с использованием SLRequest в iOS

Мне нужно отправить запрос приложения с помощью facebook sdk, так как это было невозможно через вызов графика. Я уже получил свой токен facebook, а также объект SLRequest с предоставленным разрешением на доступ (да). Я просто хочу создать сеанс fb, используя два вышеуказанных параметра, чтобы пользователю не нужно было вводить свои учетные данные во всплывающем окне, и учетные данные будут автоматически взяты из объекта SLrequest или Accounts или из токена доступа.


person Rahul Mathur    schedule 11.02.2014    source источник
comment
У меня та же проблема. У вас есть какое-нибудь решение для этого?   -  person sahara108    schedule 24.04.2014
comment
@ sahara108 да, наконец, я нашел решение, пожалуйста, прочитайте ответ.   -  person Rahul Mathur    schedule 24.04.2014


Ответы (1)


Наконец-то получили решение, вызовите requestGrantedForFb сразу после того, как вы получите свой запрос из хранилища учетных записей:

-(void)requestGrantedForFb
{
 if (gblAppDelegate.session.isOpen)
    {
        [self SendReqClk];
 } else
{
    if (gblAppDelegate.session.state != FBSessionStateCreated)
    {
        gblAppDelegate.session = [[FBSession alloc] init];
    }


    NSArray *permissionArray = [NSArray arrayWithObjects:@"read_friendlists",@"basic_info",nil];

    dispatch_async(dispatch_get_main_queue(), ^{
        [FBSession openActiveSessionWithReadPermissions:permissionArray
                                           allowLoginUI:YES
                                      completionHandler:^(FBSession *session, FBSessionState status, NSError *error) {

                                          if (session.isOpen)
                                          {
                                              gblAppDelegate.session = session;
                                              [self SendReqClk];

                                          } else
                                          {
                                              gblAppDelegate.session = session;

                                          }


                                      }];
    });
}
}

После этого

-(void)SendReqClk
{



NSError *error;
NSData *jsonData = [NSJSONSerialization
                    dataWithJSONObject:@{
                                         @"social_karma": @"5",
                                         @"badge_of_awesomeness": @"1"}
                    options:0
                    error:&error];
if (!jsonData) {
    NSLog(@"JSON error: %@", error);
    return;
}

NSString *giftStr = [[NSString alloc]
                     initWithData:jsonData
                     encoding:NSUTF8StringEncoding];

NSMutableDictionary* params = [@{@"data" : giftStr} mutableCopy];

// Display the requests dialog
dispatch_async(dispatch_get_main_queue(), ^{
    [FBWebDialogs
     presentRequestsDialogModallyWithSession:gblAppDelegate.session
     message:@"Welcome to !!! "
     title:@"Join now !!!"
     parameters:params
     handler:^(FBWebDialogResult result, NSURL *resultURL, NSError *error) {
         if (error) {
             // Error launching the dialog or sending the request.
             NSLog(@"Error sending request.");
         } else {
             if (result == FBWebDialogResultDialogNotCompleted) {
                 // User clicked the "x" icon
                 NSLog(@"User canceled request.");
                 [self.navigationController popViewControllerAnimated:YES];

             } else {
                 // Handle the send request callback
                 NSDictionary *urlParams = [self parseURLParams:[resultURL query]];
                 if (![urlParams valueForKey:@"request"]) {
                     // User clicked the Cancel button
                     NSLog(@"User canceled request.");
                     [self.navigationController popViewControllerAnimated:YES];

                 } else if(result== FBWebDialogResultDialogCompleted){
                     // User clicked the Send button
                     NSString *requestID = [urlParams valueForKey:@"request"];
                     UIAlertView *aAlertSuccess=[[UIAlertView alloc]initWithTitle:@"" message:@"Friend request sent successfully!!!" delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil];
                     [aAlertSuccess show];
                     NSLog(@"Request ID: %@", requestID);
                     //                     [NSThread detachNewThreadSelector:@selector(stopActivity) toTarget:self withObject:nil];
                     //                     UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"my alert" message:@"message" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];//
                     //                     [alert setTag:125];
                     //                     [alert show];

                 }
             }
         }
     }];

});

}
person Rahul Mathur    schedule 24.04.2014
comment
Спасибо, что поделились. Я также нахожу это решение. Но я просто делаю [FBSession setActiveSession:session]; в обратном вызове. С этого момента я могу нормально использовать FB Sdk :P - person sahara108; 24.04.2014