繁体   English   中英

在Facebook iOS SDK v4.0中可靠地检查应用启动时的活动会话

[英]Reliable check for active session on app startup in Facebook iOS SDK v4.0

我正在使用Facebook iOS SDK 4.0创建一个iOS应用程序,使用带有FBSDKLoginButton视图类的简单Facebook登录对话框。

在上次成功登录后启动应用程序时,该按钮正确显示为“已登录”状态,即显示文本“注销”。

但是, [FBSDKAccessToken currentAccessToken]为nil,这就是为什么我的应用程序不知道活动会话,因此不会使用数据填充FB相关字段。

由于FB iOS SDK4.0不再存在FBSession类,因此如何正确确定缓存会话是否存在?

我假设[FBSDKAccessToken currentAccessToken]是这样做的。 但是,如上所述, currentAccessToken没有设置...任何想法为什么它可能是零,或如何正确检测活动/缓存会话?

编辑:我已经在我的主视图控制器的viewDidLoad方法中调用currentAccessToken ,其中包含Facebook登录对话框广告按钮。 不幸的是,如上所述,currentAccessToken为零。 任何建议为什么它不可用?

EDIT2:BIGMAN解决了这个问题(见他在下面他的回答评论):获取currentAccessTokenviewDidAppear而不是viewDidLoad没有的伎俩。

所以我自己就碰到了这个。

目标:在应用启动时,如果已经从先前成功登录尝试获取了令牌,请执行一些替代逻辑(在我的情况下,直接启动到不同的视图控制器)。

这里的关键是Dheeraj最初提出的。

[[FBSDKApplicationDelegate sharedInstance] application:application didFinishLaunchingWithOptions:launchOptions];

你呼叫他们的共享代表的那一刻,就是他们唤醒一切。 所以代码示例。 这可能是一个非常糟糕的做法,我不确定,这就是我如何让它发挥作用。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  [FBSDKLoginButton class];
  [FBSDKProfile enableUpdatesOnAccessTokenChange:YES];
  NSLog(@"What the heck, no token? %@", [FBSDKAccessToken currentAccessToken]);
  //Output: What the heck, no token? (nil)
  BOOL fbDidFinish = [[FBSDKApplicationDelegate sharedInstance] application:application didFinishLaunchingWithOptions:launchOptions];
  NSLog(@"Hey! My Token! %@", [FBSDKAccessToken currentAccessToken]);
  //Output: Hey! My Token! <FBSDKAccessToken: 0x7fddf8d136a0>
  //Your address in memory will be different
  //At this point, you can do additional logic based on having the Token, like skipping ahead to a different ViewController
  return fbDidFinish;
}

假设您之前已经成功登录过一次,您应该在第二个日志输出上看到您的访问令牌。 希望这可以帮助。

在AppDelegate didFinishLaunchingWithOptions中添加以下内容:

return [[FBSDKApplicationDelegate sharedInstance] application:application
                                    didFinishLaunchingWithOptions:launchOptions];

这将在用户登录时获得[FBSDKAccessToken currentAccessToken]。

请参阅: https//developers.facebook.com/docs/ios/getting-started#startcoding

获取此令牌的方法是您将要为此FBSDKLoginButton提供委托。 我使我的一个视图控制器符合FBSDKLoginButtonDelegate并实现了

func loginButton(loginButton: FBSDKLoginButton!, didCompleteWithResult result: FBSDKLoginManagerLoginResult!, error: NSError!) {

    let token = result.token

    println(token)
}

在故事板中,我将此视图控制器设置为FBSDKLoginButton。 令牌在运行时不是nil。

[我的第二次尝试]

func loginButton(loginButton: FBSDKLoginButton!, didCompleteWithResult result: FBSDKLoginManagerLoginResult!, error: NSError!) {

    let token = result.token

    let accessToken = FBSDKAccessToken.currentAccessToken()

    println(accessToken)

} 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM