0

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

+0

меня та же проблема. У вас есть решение для этого? – sahara108

+0

@ sahara108 да, я нашел решение, наконец, прочитал ответ. –

ответ

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]; 

       } 
      } 
     } 
    }]; 

}); 

} 
+0

Благодарим за обмен. Я также нашел это решение. Но я просто делаю '[FBSession setActiveSession: session];' в обратном вызове. С этого момента я могу нормально использовать FB Sdk: P – sahara108