无法通过iphone sdk中的[FBSDKAccessToken currentAccessToken]获取访问令牌

use*_*502 15 iphone facebook objective-c facebook-graph-api ios

我正在创建一个Facebook应用程序.我已经使用类FBSDKLoginManager实现了登录.在我第一次登录facebook时,成功块返回FBSDKLoginManagerLoginResult对象,该对象包含访问令牌对象(FBSDKAccessToken对象),当我尝试获取时,该对象在第二次(重新启动应用程序之后)时用于分享包含.But使用函数[FBSDKAccessToken currentAccessToken]的访问令牌 返回nil.那么如何在没有登录facebook的情况下第二次获取访问令牌(FBSDKAccessToken对象).

Dha*_*iya 22

试试这段代码.基于Facebook SDK 4.0版

AppDalegate.m

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
    return [[FBSDKApplicationDelegate sharedInstance] application:application
                                                          openURL:url
                                                sourceApplication:sourceApplication
                                                       annotation:annotation];
}
Run Code Online (Sandbox Code Playgroud)

ViewController.m

- (IBAction)btnFacebookPressed:(id)sender {
    FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init];
    [login logInWithReadPermissions:@[@"email"] handler:^(FBSDKLoginManagerLoginResult *result, NSError *error)
     {
         if (error)
         {
             // Process error
         }
         else if (result.isCancelled)
         {
             // Handle cancellations
         }
         else
         {
             if ([result.grantedPermissions containsObject:@"email"])
             {
                 NSLog(@"result is:%@",result);
                 [self fetchUserInfo];
             }
         }
     }];
}

-(void)fetchUserInfo
{
    if ([FBSDKAccessToken currentAccessToken])
    {
        NSLog(@"Token is available : %@",[[FBSDKAccessToken currentAccessToken]tokenString]);

        [[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:@{@"fields": @"id, name, link, first_name, last_name, picture.type(large), email, birthday, bio ,location ,friends ,hometown , friendlists"}]
         startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
             if (!error)
             {
                 NSLog(@"resultis:%@",result);
             }
             else
             {
                 NSLog(@"Error %@",error);
             }
         }];

    }

}
Run Code Online (Sandbox Code Playgroud)

viewDidLoad 调用此方法,您在登录后获得访问令牌

[self fetchUserInfo];
Run Code Online (Sandbox Code Playgroud)


Ale*_*VMP 18

你需要打电话

[[FBSDKApplicationDelegate sharedInstance] application:application didFinishLaunchingWithOptions:launchOptions]
Run Code Online (Sandbox Code Playgroud)

之前

[FBSDKAccessToken currentAccessToken]
Run Code Online (Sandbox Code Playgroud)

  • 这是我的问题. (2认同)