2013-11-21 104 views
1

使用Google Plus SDK進行登錄。一開始一切都很好,但似乎oauth令牌在大約1小時後即將過期。我正在關注recommendations on Google's site並使用Google Plus SDK不刷新令牌(iOS)

[signIn trySilentAuthentication] 

in viewDidAppear函數。

我知道令牌已過期,因爲我在服務器上使用Oauth並獲得401響應。

同樣值得注意的是,如果iPhone/iPad插在屏幕上,這並不是問題。在這種情況下,應用程序無限期地工作,沒有任何問題。

身份驗證在我的雲端點上失敗。我初始化服務如下:

static GTLService *service = nil; 

if (!service) { 
    service = [[GTLServiceMyModel alloc] init]; 
    service.retryEnabled = YES; 
    [service setAuthorizer: [GPPSignIn sharedInstance].authentication]; 
} 

此外,如果應用程序有一個過期的令牌工作都是圍繞我現在所擁有的是再次使用iOS應用切換器和啓動應用程序,關閉應用程序。在令牌到期之前,該應用會再運行約一個小時。

有沒有人遇到過這個問題?任何幫助將不勝感激!

回答

1

我的問題是我爲服務設置授權人的地方。這個代碼塊只在我的方法第一次被調用時才運行。來自Java背景的我並不瞭解方法中的靜態變量。現在我明白了!!只是將setAuthorizer移動到塊之外,一切正常。

static GTLService *service = nil; 
if (!service) { 
    service = [[GTLServiceMyModel alloc] init]; 
    service.retryEnabled = YES; 
    [service setAuthorizer: [GPPSignIn sharedInstance].authentication]; 
} 
+2

此代碼段與您的問題中的代碼段完全相同嗎? –

+0

@Patrick你可以添加更多細節你是如何解決這個問題的?我有同樣的問題,並且無法理解,你在iOS端還是在後端端修復了這個問題? –

0

1小時後的401響應通常表示刷新訪問令牌失敗。我遇到的一個原因是,當您使用已經提供刷新令牌的帳戶測試應用程序時會發生這種情況。刷新令牌只發出一次,因此您的後續令牌授權有可能沒有在3600秒令牌過期後使用的刷新令牌,因爲它已在第一次連接時給出。嘗試https://accounts.google.com/IssuedAuthSubTokens並手動撤銷對此應用的訪問權限並重新連接。

+0

令人困惑的是,如果我重新啓動應用程序,它可以正常工作一個小時,有時會更長。另外,如果應用程序保持開啓狀態並且iPad正在充電,則永遠不會有問題 – Patrick