2013-12-23 27 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的目標是什麼。 –