使用Facebook SDK通过FBSession获取缓存的访问令牌



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

我正试图在应用程序中通过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];

提前谢谢。

要获得访问令牌,您应该使用以下方法:[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];
}

希望这能帮助

尝试以下代码。。

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

希望这对你有用。。

最新更新