簡體   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