Google 登录不适用于 iOS 10
Google SignIn not working for iOS 10
我已经在我的项目中集成了 GoogleSinIn API
和 Swift 4.0
。它在 iOS 11.0
上工作,但当我在 iOS 10.0
上测试相同时,它会在 Safari
浏览器或设备上打开 Google
登录页面,并在成功签名后正在打开 Google
搜索页面。
当我单击下面显示的 GoogleSignIn
按钮时,它会打开下图所示的浏览器。
然后我填写凭证
登录成功后,跳转到Google
页面而不是申请页面
我在 AppDelegate
中使用了错误的处理程序。
之前我用的是:
private func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject?) -> Bool
但应该是:
func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool
检查你的GIDSignInUIDelegate
,别忘了
func sign(_ signIn: GIDSignIn!, present viewController: UIViewController!) {
self.present(viewController, animated: true, completion: nil)
}
func sign(_ signIn: GIDSignIn!, dismiss viewController: UIViewController!) {
self.dismiss(animated: true, completion: nil)
}
您必须在 AppDelegate
中实现此委托功能。
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
return GIDSignIn.sharedInstance().handle(url as URL!, sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as? String, annotation: options[UIApplicationOpenURLOptionsKey.annotation])
}
Google 文档糟透了!我正在使用 iOS 10 并且文档说只有在使用 iOS 8.0 或更早版本时才添加我编写的第二种方法。不知道为什么。我成功添加了这两种方法:
// [START openurl]
func application(_ application: UIApplication,
open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
return GIDSignIn.sharedInstance().handle(url, sourceApplication: sourceApplication, annotation: annotation)
}
// [END openurl]
@available(iOS 9.0, *)
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any]) -> Bool {
return GIDSignIn.sharedInstance().handle(url,
sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as? String,
annotation: options[UIApplicationOpenURLOptionsKey.annotation])
}
- (BOOL)application:(UIApplication *)application
openURL:(NSURL *)url
options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
BOOL handleGoogleSignIn = [[GIDSignIn sharedInstance] handleURL:url
sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey]
annotation:options[UIApplicationOpenURLOptionsAnnotationKey]];
if (handleGoogleSignIn) {
return handleGoogleSignIn;
}
}
- (BOOL)application:(UIApplication *)application
openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication
annotation:(id)annotation {
BOOL handleGoogleSignIn = [[GIDSignIn sharedInstance] handleURL:url
sourceApplication:sourceApplication
annotation:annotation];
if (handleGoogleSignIn) {
return handleGoogleSignIn;
}
}
如果您使用 sourceApplication ,则需要同时编写 GoogleSignIn return。
我已经在我的项目中集成了 GoogleSinIn API
和 Swift 4.0
。它在 iOS 11.0
上工作,但当我在 iOS 10.0
上测试相同时,它会在 Safari
浏览器或设备上打开 Google
登录页面,并在成功签名后正在打开 Google
搜索页面。
当我单击下面显示的
GoogleSignIn
按钮时,它会打开下图所示的浏览器。然后我填写凭证
登录成功后,跳转到
Google
页面而不是申请页面
我在 AppDelegate
中使用了错误的处理程序。
之前我用的是:
private func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject?) -> Bool
但应该是:
func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool
检查你的GIDSignInUIDelegate
,别忘了
func sign(_ signIn: GIDSignIn!, present viewController: UIViewController!) {
self.present(viewController, animated: true, completion: nil)
}
func sign(_ signIn: GIDSignIn!, dismiss viewController: UIViewController!) {
self.dismiss(animated: true, completion: nil)
}
您必须在 AppDelegate
中实现此委托功能。
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
return GIDSignIn.sharedInstance().handle(url as URL!, sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as? String, annotation: options[UIApplicationOpenURLOptionsKey.annotation])
}
Google 文档糟透了!我正在使用 iOS 10 并且文档说只有在使用 iOS 8.0 或更早版本时才添加我编写的第二种方法。不知道为什么。我成功添加了这两种方法:
// [START openurl]
func application(_ application: UIApplication,
open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
return GIDSignIn.sharedInstance().handle(url, sourceApplication: sourceApplication, annotation: annotation)
}
// [END openurl]
@available(iOS 9.0, *)
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any]) -> Bool {
return GIDSignIn.sharedInstance().handle(url,
sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as? String,
annotation: options[UIApplicationOpenURLOptionsKey.annotation])
}
- (BOOL)application:(UIApplication *)application
openURL:(NSURL *)url
options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
BOOL handleGoogleSignIn = [[GIDSignIn sharedInstance] handleURL:url
sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey]
annotation:options[UIApplicationOpenURLOptionsAnnotationKey]];
if (handleGoogleSignIn) {
return handleGoogleSignIn;
}
}
- (BOOL)application:(UIApplication *)application
openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication
annotation:(id)annotation {
BOOL handleGoogleSignIn = [[GIDSignIn sharedInstance] handleURL:url
sourceApplication:sourceApplication
annotation:annotation];
if (handleGoogleSignIn) {
return handleGoogleSignIn;
}
}
如果您使用 sourceApplication ,则需要同时编写 GoogleSignIn return。