一些文档1 2说我必须使用application:openURL:options:
。我的问题是-由于我已经在使用该方法,因此有关如何完全实现劫持的示例代码:
func application(_ application: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any])
-> Bool {
return GIDSignIn.sharedInstance().handle(url,
sourceApplication:options[UIApplicationOpenURLOptionsKey.sourceApplication] as? String,
annotation: [:])
}
如何确定openURL调用用于登录?
我更希望实现与FirebaseUI 3中的方法相同的方法:
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any]) -> Bool {
let sourceApplication = options[UIApplicationOpenURLOptionsKey.sourceApplication] as! String?
if FUIAuth.defaultAuthUI()?.handleOpen(url, sourceApplication: sourceApplication) ?? false {
return true
}
// other URL handling goes here.
return false
}
答案 0 :(得分:3)
您可能已经注意到GIDSignIn.sharedInstance().handle
方法返回一个bool
,所以您可以这样调用它:
func application(_ application: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any])
-> Bool {
if GIDSignIn.sharedInstance().handle(url, sourceApplication:options[.sourceApplication] as? String, annotation: [:]) {
return true
}
return false
}
如果您的应用支持其他不同类型的登录名(facebook,twitter等),此方法将更有用。
在这种情况下,您要做的就是为每种网址添加更多if
条件。
希望这会有所帮助
答案 1 :(得分:3)
实际上您不必这样做,您可以像这样用||
链接它们
public 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)
|| GIDSignIn.sharedInstance().handle(url, sourceApplication: sourceApplication,annotation: annotation)
|| FUIAuth.defaultAuthUI()?.handleOpen(url, sourceApplication: sourceApplication) ?? false
}
任何人都会命中return true
,否则,如果所有false
,那么结果将是false
答案 2 :(得分:2)
According to the docs如果GIDSignIn处理了此URL,则此方法返回YES。
因此,您似乎可以完全按照FUIAuth示例中的方法进行操作,即在返回值上添加'if'检查:
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any]) -> Bool {
let isSignInHandled = GIDSignIn.sharedInstance().handle(url,
sourceApplication:options[UIApplicationOpenURLOptionsKey.sourceApplication] as? String,
annotation: [:])
if isSignInHandled {
return true
}
// ... other code
}