Google Plus SDK不刷新令牌(iOS)

时间:2013-11-21 14:17:45

标签: ios oauth google-plus google-oauth google-cloud-endpoints

使用Google Plus SDK登录。一开始一切都很好,但似乎oauth令牌在大约1小时后到期。我正在关注recommendations on Google's site并使用

[signIn trySilentAuthentication] 

在viewDidAppear函数中。

我知道令牌已过期,因为我在服务器上使用Oauth并获得401响应。

另外值得注意的是,如果在屏幕上打开iPhone / iPad,这不是问题。在这种情况下,应用程序无限期地工作,没有任何问题。

我的Cloud Endpoint上的身份验证失败。我正在初始化服务如下:

static GTLService *service = nil;

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

此外,如果应用程序有过期令牌,我现在的工作就是通过使用iOS应用程序切换器关闭应用程序并再次启动应用程序。然后,应用程序将在令牌过期前再次使用约一小时。

有没有人遇到过这个问题?任何帮助都会非常感激!

2 个答案:

答案 0 :(得分:1)

我的问题是我在为服务设置授权程序。这个代码块只在第一次调用我的方法时运行。来自Java背景我对方法中的静态变量并不了解。现在我知道了!!刚刚将setAuthorizer移到了块之外,一切正常。

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

答案 1 :(得分:0)

通常,1小时后的401响应表示刷新访问令牌失败。我遇到的一个原因是,当您使用已经提供刷新令牌的帐户测试应用时会发生这种情况。刷新令牌仅发出一次,因此您的后续令牌授权可能在3600秒令牌到期后没有使用刷新令牌,因为它已在您第一次连接时使用。尝试https://accounts.google.com/IssuedAuthSubTokens并从此应用手动撤消对google +的访问权限并重新连接。