我正在使用应用程序中具有谷歌登录功能的项目。 该应用程序适用于iOS9及以上版本的所有iOS。
下面是我用于google登录的代码: -
-(void)methodcallwhenclick_ongoogleSigninbutton{
GIDSignIn *signInInstance = [GIDSignIn sharedInstance];
signInInstance.delegate = self;
GIDSignIn *signIn = [GIDSignIn sharedInstance];
[signIn signOut];
signIn.shouldFetchBasicProfile = YES;
signIn.delegate = self;
signIn.uiDelegate = self;
[signIn setClientID:@"<Clientkey>.apps.googleusercontent.com"];
[signIn setScopes:[NSArray arrayWithObject:@"https://www.googleapis.com/auth/plus.login"]];
[signIn setDelegate: self];
[signIn signIn];
}
此方法在我成功登录应用程序时调用,但在ios9中此方法未被调用。在webview中打开google登录视图,点击“允许”后,webview将被解除。 我无法在ios9中获取google的authcode。是否有任何方法可以在ios9及以上版本中调用此方法
- (void)signIn:(GIDSignIn *)signIn
didSignInForUser:(GIDGoogleUser *)user
withError:(NSError *)error
{
}
答案 0 :(得分:6)
我遇到了同样的问题:通过GIDSignIn登录谷歌非常适合
但是对于iOS9,只要按下允许就会打开Google.com页面。如果我按此页面上的完成按钮,控制将进入上述方法,错误=错误域= com.google.GIDSignIn代码= -5“用户取消了登录流程。” UserInfo = {NSLocalizedDescription =用户取消了登录流程。}
我研究了一下。找到了两种可能的解决方案:
白名单登录相关网址 - Google Sign-In crashes on iOS 9 attempting to call canOpenURL
使用handleurl调用 - GIDSignIn iOS 9
没有时间去测试最合适的选项。一旦最终解决方案在这里,将立即更新。
更新:做到了!!
iOS9已更新handleUrl()调用。简化了以下两种方法:
(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options NS_AVAILABLE_IOS(9_0)
{
return [self application:app
processOpenURLAction:url
sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey]
annotation:options[UIApplicationOpenURLOptionsAnnotationKey]
iosVersion:9];
}
(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
return [self application:application
processOpenURLAction:url
sourceApplication:sourceApplication
annotation:annotation
iosVersion:8];
}
(BOOL)application:(UIApplication *)application processOpenURLAction:(NSURL*)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation iosVersion:(int)version
{
return [[GIDSignIn sharedInstance] handleURL:url
sourceApplication:sourceApplication
annotation:annotation];
}
答案 1 :(得分:1)
这对我有用。我遇到了GIDGoogleUser的对象正在变为零。错误是“用户取消了登录流程”。正确的类型转换为此用作!。这个 点击“完成”后删除了悬挂的野生动物园。
在AppDelegate上:
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
let result = GIDSignIn.sharedInstance().handle(url,
//added exclamation mark
sourceApplication: String(describing: options[UIApplicationOpenURLOptionsKey.sourceApplication]!),
annotation: options[UIApplicationOpenURLOptionsKey.annotation])
return result
}