Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 升级到SDK 4.1后,Facebook登录失败(始终取消)_Ios_Facebook_Swift_Facebook Sdk 4.0 - Fatal编程技术网

Ios 升级到SDK 4.1后,Facebook登录失败(始终取消)

Ios 升级到SDK 4.1后,Facebook登录失败(始终取消),ios,facebook,swift,facebook-sdk-4.0,Ios,Facebook,Swift,Facebook Sdk 4.0,我已经在iOS应用程序中将Facebook SDK从3.21.1升级到4.1(已经上线) 我仔细地遵循了升级指南,并实现了新的登录方法。我使用的代码是Facebook文档中提供的代码 但升级后,每次尝试登录(设备或模拟器、webview或Facebook应用程序)时,我都可以成功完成登录流程,但当我返回应用程序时,登录不会返回任何错误,而是返回FBSDKLoginManager登录结果“isCancelled” 作为一种解决方法,我尝试实现应用程序邀请,它不需要登录,但我被控制台中的“尝试在FB

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

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

但升级后,每次尝试登录(设备或模拟器、webview或Facebook应用程序)时,我都可以成功完成登录流程,但当我返回应用程序时,登录不会返回任何错误,而是返回FBSDKLoginManager登录结果“isCancelled”

作为一种解决方法,我尝试实现应用程序邀请,它不需要登录,但我被控制台中的“尝试在FB中进行身份验证”卡住了。。。这里也不走运

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

有人有任何线索吗?? 谢谢

我已经检查过的内容:

  • 我没有更改info.plist,它已经设置为使用Facebook SDK,并且在升级之前运行良好
  • 在此升级之前,我用于登录的用户帐户也运行良好
  • 在登录过程之前或之后,我没有任何currentAccessToken
    • 多亏了及其,我在通话中发现了错误。我刚刚犯了Swift中最愚蠢的错误。在不太可能的情况下,像我这样愚蠢的人读到了这篇文章,下面是Swift中的3个调用,您应该将它们添加到AppDelegate.Swift中。它们经过测试并工作:

      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()
      }
      

      感谢你的帮助。谢谢你。 这里我只是更新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
      

      应用内委托。

      调用
      FBSDKLoginManagerLoginResult
      以始终返回
      的另一个原因已被取消
      :如果应用(正在开发)请求某些权限,则用户不是此应用的列表开发人员,并且FaceBook尚未批准该应用的这些权限,它将始终返回
      isCancelled

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

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

      func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey: Any] = [:]) -> Bool
      
      在app delegate上,要完成此过程,您需要通过以下方式向facebook SDK传递来自facebook的URL:

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

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

      试试这个,我发现这个问题只适用于iOS-8,iOS-9工作正常。你知道吗?@我想:请注意,iOS 8在
      AppDelegate
      中使用了另一个函数。它是
      func应用程序(application:UIApplication,open url:url,sourceApplication:String?,annotation:Any)->Bool