我使用Google Sign-in和Facebook Login在我的应用中提供Google和Facebook登录信息。
问题是,当我同时使用它们时 - Facebook登录屏幕(基于Safari视图控制器)在用户登录后不会被解雇。
经过数小时的痛苦调试后,我发现只有在我显示Facebook登录提示之前初始化Google登录才会出现问题。
基本上,它是一行。
GGLContext.sharedInstance().configureWithError(&configureError)
如果我评论该行 - Facebook登录正常。
编辑:这就是我在AppDelegate.swift中所拥有的:
func application(application: UIApplication, openURL url: NSURL, options: [String: AnyObject]) -> Bool {
return FBSDKApplicationDelegate.sharedInstance().application(application,
openURL: url,
sourceApplication: options[UIApplicationOpenURLOptionsSourceApplicationKey] as! String,
annotation: options [UIApplicationOpenURLOptionsAnnotationKey])
令人遗憾的是,这种方法根本没有被调用。 但是如果我禁用谷歌登录 - 它可以正常工作。
其他细节: 我使用的是Facebook SDK v4.12.0和Google Sign-In SDK v4.0.0
Xcode版本7.3.1(7D1014),在iOS 9.3上测试
欢迎任何想法。
答案 0 :(得分:7)
我也使用谷歌和Facebook登录,它工作正常。你必须使用以下方法
func application(application: UIApplication, openURL url: NSURL, sourceApplication: String, annotation: AnyObject) -> Bool
为
func application(application: UIApplication, openURL url: NSURL, sourceApplication: String, annotation: AnyObject) -> Bool {
if url.absoluteString().containsString("FACEBOOK_ID") {
return FBSDKApplicationDelegate.sharedInstance().application(application, openURL: url, sourceApplication: sourceApplication, annotation: annotation)
}
else {
return GIDSignIn.sharedInstance().handleURL(url, sourceApplication: sourceApplication, annotation: annotation)
}
}
答案 1 :(得分:5)
好的伙计们,最终我已经弄明白了。 对我有用的诀窍是在Facebook SDK之前初始化Google登录SDK 。
现在我的AppDelegate看起来像这样:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Initialize google sign-in
var configureError: NSError?
GGLContext.sharedInstance().configureWithError(&configureError)
assert(configureError == nil, "Error configuring Google services: \(configureError)")
// init FB SDK
FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)
return true
}
答案 2 :(得分:0)
如果您使用Google文档整合其身份验证系统,请不要使用此方法:
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
var returnVal = false
if #available(iOS 9.0, *) {
returnVal = GIDSignIn.sharedInstance().handle(url,sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as? String,annotation: options[UIApplicationOpenURLOptionsKey.annotation])
} else {
returnVal = false
}
return returnVal
}
这应该可以避免与iOS 9冲突,但是一旦我删除它,fb登录工作和谷歌登录也在iOS 9设备上工作。
希望这有助于任何人。
答案 3 :(得分:0)
在Swift 3(iOs 10)中,只需这样做:(它对我来说很好)
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
// FACEBOOK
let handled = FBSDKApplicationDelegate.sharedInstance().application(app, open: url, options: options)
// GOOGLE
GIDSignIn.sharedInstance().handle(url,
sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as? String,
annotation: options[UIApplicationOpenURLOptionsKey.annotation])
return handled
}
答案 4 :(得分:0)
这适用于Swift 3:我在同一页面上有Facebook和Google登录。
@available(iOS 9.0, *)
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
print( " open URL : \(url.absoluteURL.absoluteString)")
if url.absoluteURL.absoluteString.contains("fb728991920603705") //Facebook ID from Plist
{
print("contain FB ID")
return FBSDKApplicationDelegate.sharedInstance().application(app, open: url, options: options)
}
else {
let result = GIDSignIn.sharedInstance().handle(url,
//added exclamation mark
sourceApplication: String(describing: options[UIApplicationOpenURLOptionsKey.sourceApplication]!),
annotation: options[UIApplicationOpenURLOptionsKey.annotation])
return result
}
}
答案 5 :(得分:0)
我刚刚使用最新版本的Facebook和Google pod以及 Swift 3.1 实现了此代码,效果很好!
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
if url.absoluteString.contains("facebook") {
return FBSDKApplicationDelegate.sharedInstance().application(app, open: url, sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as? String, annotation: [:])
} else {
return GIDSignIn.sharedInstance().handle(url,
sourceApplication:options[UIApplicationOpenURLOptionsKey.sourceApplication] as? String,
annotation: [:])
}
}