我正在iOS中实施Google+登录,我使用此代码并且工作正常
signIn = [GPPSignIn sharedInstance];
signIn.delegate = self;
//signIn.shouldFetchGoogleUserEmail = YES;
signIn.shouldFetchGooglePlusUser = YES;
signIn.clientID = kClientId;
signIn.scopes = [NSArray arrayWithObjects:kGTLAuthScopePlusLogin,nil];
signIn.actions = [NSArray arrayWithObjects:@"http://schemas.google.com/ListenActivity",nil];
[signIn authenticate];
Run Code Online (Sandbox Code Playgroud)
我想使用[signIn trySilentAuthentication]方法,每次用户登录时都不会离开,但如果不使用google +按钮GPPSignInButton则无法使用
那么,使用此代码而不是上面的代码有什么问题
signIn = [GPPSignIn sharedInstance];
signIn.delegate = self;
//signIn.shouldFetchGoogleUserEmail = YES;
signIn.shouldFetchGooglePlusUser = YES;
signIn.clientID = kClientId;
signIn.scopes = [NSArray arrayWithObjects:kGTLAuthScopePlusLogin,nil];
signIn.actions = [NSArray arrayWithObjects:@"http://schemas.google.com/ListenActivity",nil];
[signIn trySilentAuthentication];
Run Code Online (Sandbox Code Playgroud)
是否可以在didSelectRowAtIndexPath中使用trySilentAuthentication?提前致谢
是的,当然.确保调用[[GPPSignIn sharedInstance] trySilentAuthentication]并且不创建新的GPPSignIn实例,并确保在设置GPPSignIn实例后仅调用它.
因此,您需要将片段拆分为两个:在某些早期方法(viewWillAppear或甚至在app委托中)中设置sharedInstance上的参数,并调用trySilentAuthentication.当您从didSelectRowAtIndexPath接收调用时,请调用[[GPPSignIn] sharedInstance] authenticate].
编辑:澄清trySilentAuthentication的用途.
当您致电身份验证时,系统会将用户带到Google+应用,Chrome或Safari进行登录.当他们回来时,会在用户的钥匙串中存储一个长期存在的令牌,以及用于制作API的短期令牌调用.调用trySilentAuthentication检查长期令牌是否在密钥链中,并生成新的短期令牌.如果成功,则意味着用户之前已在该设备上登录该应用程序,因此您通常希望对此进行适当的响应.如果它失败(没有令牌),它将只返回false,或者如果它不能生成一个短期令牌,它将调用finishedWithAuth:error并设置错误.它永远不会将用户带到另一个应用程序进行身份验证(因此是无声部分).
您通常希望在流程中尽早调用trySilentAuthentication以了解用户的状态.这并不意味着您无法向其提供其他登录选项.
在你的情况下,似乎如果应用程序重新启动,你想要向他们显示登录屏幕.如果用户有点不愉快,那很好.您可以做的是尽早运行trySilentAuthentication,但是在finishedWithAuth:错误中,而不是立即切换到下一个屏幕,只需存储auth对象.然后,当用户按下表格中的Google+条目时,请转到该点的下一个视图.
| 归档时间: |
|
| 查看次数: |
1841 次 |
| 最近记录: |