【问题标题】:Fetch cached access token through FBSession using Facebook SDK使用 Facebook SDK 通过 FBSession 获取缓存的访问令牌
【发布时间】:2013-02-05 05:51:10
【问题描述】:

如果用户登录本机 Facebook,是否有办法通过 FBSession 使用 Facebook SDK 获取缓存的访问令牌。

我正在尝试在应用程序中通过 Facebook 实现自动登录,即当用户登录本机 Facebook 时,应用程序不应要求登录,用户应自动登录。

我使用了 FBSession 和 FBTokenCacheStrategy 并且用户正在自动登录,但我无法获取我需要调用某些 API 的访问令牌。我用来完成此操作的以下代码:

CacheToken = [[FBTokenCache alloc]init];
NSArray *permissions = [[NSArray alloc]initWithObjects:@"email,user_photos,user_videos,publish_stream,offline_access,user_checkins,friends_checkins", nil];


self.fbsession = [[FBSession alloc] initWithAppID:@"484473011575776"
                                              permissions:permissions
                                          urlSchemeSuffix:nil
                                       tokenCacheStrategy:CacheToken];

(fbsession is the object of Facebook SDK class FBSession)
[FBSession setActiveSession:self.fbsession];


[FBSession openActiveSessionWithReadPermissions:permissions
                                                   allowLoginUI:YES
                                              completionHandler:^(FBSession *session, FBSessionState state, NSError *error) {
                                                  [self sessionStateChanged:session state:state error:error];

提前致谢。

【问题讨论】:

    标签: facebook ios4


    【解决方案1】:

    要获取访问令牌,您应该使用以下命令: [FBSession activeSession] accessToken]

    但是,您似乎想检查是否已经存在(缓存的)访问令牌。为此,您可以这样做:

    // See if we have a valid token for the current state.
    if (FBSession.activeSession.state == FBSessionStateCreatedTokenLoaded) {
        NSLog(@"The value access token is: %@", [[FBSession activeSession] accessToken]);
    } else { 
        // No, display the login page.
    }
    

    确保在您的应用委托中也这样做,否则访问令牌将为零:

    - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
    {
        return [FBSession.activeSession handleOpenURL:url];
    }
    
    - (void)applicationDidBecomeActive:(UIApplication *)application
    {
    // We need to properly handle activation of the application with regards to Facebook Login
        // (e.g., returning from iOS 6.0 Login Dialog or from fast app switching).
        [FBSession.activeSession handleDidBecomeActive];
    }
    

    希望对你有帮助

    【讨论】:

    • 嗨,有没有更新的获取访问令牌的方法?似乎这个已被弃用。仍然有效,但只是为了避免将来出现意外。
    • 只要使用[session accessTokenData].accessToken
    【解决方案2】:

    试试下面的代码..

    if (FBSession.activeSession.isOpen)
    {
          NSString *token =  [[[FBSession activeSession] accessTokenData] accessToken];
    }
    

    希望这对你有用..

    【讨论】:

      猜你喜欢
      • 2017-04-21
      • 1970-01-01
      • 1970-01-01
      • 2014-06-10
      • 2014-12-04
      • 2012-05-17
      • 1970-01-01
      • 2013-02-22
      • 2014-07-31
      相关资源
      最近更新 更多