2013-12-23 26 views
2

我实现登入Google+ iOS中,我用这个代码,它工作正常trySilentAuthentication没有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]; 

我想用[签到trySilentAuthentication]方法不留起来,每次用户登录在但是它并没有使用谷歌+按钮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]; 

的一个是它POSS能使用didSelectRowAtIndexPath使用trySilentAuthentication吗? 在此先感谢

回答

5

是的,当然。确保您正在调用[[GPPSignIn sharedInstance] trySilentAuthentication]并且不创建新的GPPSignIn实例,并确保您在设置GPPSignIn实例后只调用

所以你需要将你的代码片段分成两部分:在一些早期的方法(viewWillAppear或甚至在应用程序委托)中设置sharedInstance上的参数,并调用trySilentAuthentication。当您从didSelectRowAtIndexPath获得呼叫时,请调用[[GPPSignIn] sharedInstance]进行身份验证]。

编辑:澄清trySilentAuthentication的用途。

当您打电话进行身份验证时,会将用户带到Google+应用,Chrome或Safari登录。当他们回来时,长寿命令牌会存储在用户的钥匙串中,以及短暂的用于进行API调用的令牌。调用trySilentAuthentication检查长寿命令牌是否在关键链中,并生成一个新的短寿命令牌。如果成功,则意味着用户之前已登录该设备上的该应用程序,因此您通常会想要适当回复该应用程序。如果它失败(没有标记),它将返回false,或者如果它不能生成一个短暂的标记,它将调用finishedWithAuth:错误并设置错误。它永远不会将用户带到另一个应用程序进行身份验证(因此无声部分)。

您一般都想在流程的早期拨打trySilentAuthentication以便了解用户的状态。这并不意味着您无法向他们展示其他登录选项。

在你的情况下,似乎如果应用程序重新启动,你想显示登录屏幕给他们。这很好,如果对用户有点不愉快。你可以做的是在早期运行trySilentAuthentication,但是在completedWithAuth:错误中,不要立即切换到下一个屏幕,而是存储auth对象。然后,当用户按下表格中的Google+条目时,转到此时的下一个视图。

+0

通过拆分代码,这将使用户始终登录,而我有其他选项,我希望他选择。我编辑我的代码与我尝试的,这两个代码在didSelectRow尝试.. – Twinkle

+0

为什么你想要让用户选择,如果他们已经登录?如果您希望它们能够连接多个帐户,或者如果您希望它们能够切换帐户,您仍然可以向他们显示选项列表,您应该使用signOut方法,这也会阻止trySilentAuthentication触发。 –

+0

已更新的答案,以澄清trySilentAuthentication的目标是什么。 –