我已经在iOS应用程序(已经上线)中将Facebook SDK从3.21.1升级到4.1。
我仔细阅读了升级指南,并实施了新的登录方法。我使用的代码是Facebook文档中提供的代码。
但是自升级以来,每次我尝试登录(设备或模拟器,webview或Facebook应用程序),我都可以成功完成登录流程,但是当我回到我的应用程序时,登录不返回任何错误但返回FBSDKLoginManagerLoginResult“isCancelled”。
作为一种解决方法,我尝试实现不需要登录的应用邀请,但是我在控制台中遇到了“尝试在FB中进行身份验证”......在这里也没有运气。
所以我猜它与info.plist中的身份验证回退和URL方案有关,但我在那里进行了双重检查,数据(在升级之前工作正常)与指示的相同在Facebook文档中。
任何人都有任何线索? 谢谢!
我已经检查过:
答案 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 {
}
然后您将看到登录请求将返回访问令牌,并且不会被取消。