升级到SDK 4.1后,Facebook登录失败(总是被取消)

时间:2015-05-27 10:18:20

标签: ios facebook swift facebook-sdk-4.0

我已经在iOS应用程序(已经上线)中将Facebook SDK从3.21.1升级到4.1。

我仔细阅读了升级指南,并实施了新的登录方法。我使用的代码是Facebook文档中提供的代码。

但是自升级以来,每次我尝试登录(设备或模拟器,webview或Facebook应用程序),我都可以成功完成登录流程,但是当我回到我的应用程序时,登录不返回任何错误但返回FBSDKLoginManagerLoginResult“isCancelled”。

作为一种解决方法,我尝试实现不需要登录的应用邀请,但是我在控制台中遇到了“尝试在FB中进行身份验证”......在这里也没有运气。

所以我猜它与info.plist中的身份验证回退和URL方案有关,但我在那里进行了双重检查,数据(在升级之前工作正常)与指示的相同在Facebook文档中。

任何人都有任何线索? 谢谢!

我已经检查过:

  • 我没有更改已经设置为使用Facebook SDK的info.plist,并且在升级之前工作正常。
  • 我用于登录的用户帐户在升级之前也运行良好。
  • 我在登录过程之前或之后没有任何currentAccessToken。

4 个答案:

答案 0 :(得分:8)

感谢Dheeraj及其answer to a similar question,我在通话中发现错误。我刚刚在Swift中犯了最愚蠢的错误。在不太可能的事件中,有人像我读到的那样愚蠢,这里是你应该在AppDelegate.swift中添加的Swift中的3个调用。他们经过测试和工作:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

    // Do what you have to do but at the end, instead of 'return true', put :

    return FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)
}

func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject?) -> Bool {
    return FBSDKApplicationDelegate.sharedInstance().application(application, openURL: url, sourceApplication: sourceApplication, annotation: annotation)
}

func applicationDidBecomeActive(application: UIApplication) {
    FBSDKAppEvents.activateApp()
}

答案 1 :(得分:0)

竖起大拇指帮助你过冬。并感谢Dheeraj bhai。 在这里,我只是更新了Swift 3.1的答案。

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.
    return FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)
}

func application(_ application: UIApplication, open url: URL,      sourceApplication: String?, annotation: Any) -> Bool {
    return   FBSDKApplicationDelegate.sharedInstance().application(application, open: url as URL!, sourceApplication: sourceApplication, annotation: annotation)
}

func applicationDidBecomeActive(application: UIApplication) {
    FBSDKAppEvents.activateApp()
}

是的,不要忘了放:

import FBSDKCoreKit
在App Delegate中

答案 2 :(得分:0)

调用FBSDKLoginManagerLoginResult始终返回isCancelled的另一个原因:如果应用程序(正在开发中)要求某些权限,则该用户不是此应用程序的列出开发人员,并且FaceBook具有尚未批准这些权限的应用,它将始终返回isCancelled

答案 3 :(得分:0)

我找到了解决方案,问题是您没有完成Facebook登录过程。

当您发出Facebook登录请求,然后用户通过facebook应用使用登录时,Facebook应用会再次打开您的应用并调用

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

在应用程序委托上,要完成该过程,您需要通过以下方式将来自Facebook的URL传递给facebook SDK:

  func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey: Any] = [:]) -> Bool {
        return FBSDKApplicationDelegate.sharedInstance().application(app, open: url, options: options) == true {
    }

然后您将看到登录请求将返回访问令牌,并且不会被取消。