2016-11-22 19 views
6

Tôi đã sử dụng hàm FBSDKAccessToken.currentAccessToken() để lấy Mã thông báo FB, hoạt động chính xác, cho đến khi tôi di chuyển ứng dụng của mình nhanh chóng 3 và 4.17 SDK. Bây giờ, hàm đã được đổi tên thành FBSDKAccessToken.current() và không phải là khi đại biểu ứng dụng đang tải lại. Tôi đã thực hiện một vài thử nghiệm và tôi đã quản lý để nhận mã thông báo sau khi tôi đã khởi động lại ứng dụng của mình và tôi đã đăng nhập vào FB trước đó, nhưng đó không phải là hành vi tôi mong đợi.Không thể truy xuất mã thông báo hiện tại FBSDKAccessToken nhanh chóng 3/FBSDK 4.17

CHỈNH SỬA: Tôi đã hoàn nguyên về phiên bản 4.15 và lại thực hiện lại.

Đây là mã trong appdelegate tôi:

func applicationDidBecomeActive(_ application: UIApplication) 
{ 

    FBSDKAppEvents.activateApp(); 

} 

func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> (Bool) 
{ 

    let wasHandled: Bool = FBSDKApplicationDelegate.sharedInstance().application(application 
     ,open:url 
     ,sourceApplication:sourceApplication 
     ,annotation:annotation) 

    if (wasHandled) { 
     if let fbtoken = FBSDKAccessToken.current() { 
      loginWithFacebook(fbtoken.tokenString); 
     }else{ 
      print("no current token") 
     } 
    } 

    return wasHandled 
} 

func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool { 


    let wasHandled: Bool = FBSDKApplicationDelegate.sharedInstance().application(
     app, 
     open: url as URL!, 
     sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as! String, 
     annotation: options[UIApplicationOpenURLOptionsKey.annotation] 
    ) 

    if (wasHandled) { 
     if let fbtoken = FBSDKAccessToken.current() { 
      loginWithFacebook(fbtoken.tokenString); 
     }else{ 
      print("no current token") 
     } 
    } 

    return wasHandled; 
} 

Nhờ sự giúp đỡ của bạn :) Denis

+0

Tôi cũng cuộn lại với pod 'FBSDKCoreKit', '4.15.0' pod 'FBSDKLoginKit', '4.15.0' pod 'FBSDKShareKit', '4.15.0' và sau http: // stackoverflow. com/a/41119777/1220633 Hiện hoạt động cả trên thiết bị thực và trình mô phỏng. – RikiRiocma

Trả lời

2

Đối với một số lý do, điều này không hoạt động nữa.

Nếu bạn đang sử dụng FBSDKLoginButton, bạn phải sử dụng FBSDKLoginButtonDelegate để đợi cuộc gọi lại.

class LoginView: UIViewController, FBSDKLoginButtonDelegate { 
    @IBOutlet weak var facebookButton: FBSDKLoginButton! 

    override func viewDidLoad() { 
     facebookButton.delegate = self 
    } 

    //Called at the end of the user connection 
    func loginButton(_ loginButton: FBSDKLoginButton!, didCompleteWith result: FBSDKLoginManagerLoginResult!, error: Error!) { 
     if ((error) != nil) { 
      //Process error 
     } else if result.isCancelled { 
      // Handle cancellations 
      print("result is canceled") 
     } else { 
      if let fbToken = result.token.tokenString { 
       print(fbToken) 
      } 
     } 
    } 

    func loginButtonDidLogOut(_ loginButton: FBSDKLoginButton!) { 
     print("logout from FB") 
    } 
} 

Cách khác, bạn cũng có thể sử dụng trình quản lý FBSDKLoginManager. Kiểm tra các documation đây:

https://developers.facebook.com/docs/reference/ios/current/class/FBSDKLoginManager/

Hope trợ giúp này!

Các vấn đề liên quan