在Google 的弃用公告中,他们说开发人员需要从这些范围迁移:
https://www.googleapis.com/auth/userinfo.email
https://www.googleapis.com/auth/userinfo.profile
而是使用这些范围:
email
profile
但是,在我的 App-Engine 后端这样做之后,我的 iOS 应用程序出现了问题。第一次运行时,它要求我登录,屏幕正确显示两个范围,之后应用程序运行正常。在第二次运行时,它应该从受保护的存储中检索授权凭据,但它不起作用,因为 App-Engine 服务器正在接收端点null
中的User
参数。
App-Engine 端点同时需要范围email
和profile
范围。用于检索以前凭据的 iOS 代码是:
GTMOAuth2Authentication* auth =
[GTMOAuth2ViewControllerTouch authForGoogleFromKeychainForName:AUTH_KEYCHAIN_NAME
clientID:Constants.IOS_CLIENT_ID
clientSecret:Constants.IOS_CLIENT_SECRET];
如果没有以前的凭据,则用于身份验证的 iOS 代码是:
viewController = [[GTMOAuth2ViewControllerTouch alloc]
initWithScope:Constants.EMAIL_SCOPE
clientID:Constants.IOS_CLIENT_ID
clientSecret:Constants.IOS_CLIENT_SECRET
keychainItemName:AUTH_KEYCHAIN_NAME
delegate:self
finishedSelector:@selector(viewController:finishedWithAuth:error:)];
这曾经工作得很好!现在 App-Engine 服务器将 email 范围从.../userinfo.email
toemail
和 profile 范围从.../userinfo.profile
to profile
。Constants.EMAIL_SCOPE
iPad 应用程序对设置为任一值的新后端表现出相同的行为。
该google-api-objectivec-client
库是最新的 v0510。
我的应用程序的 Android 版本在后端更改后无需任何代码更改即可继续正常工作。
2015-02-26 更新:现在使用 google-api-objectivec-client 的 r424 (2014-12-30)。没变。如果 AppEngine 后端使用新的“配置文件”和“电子邮件”范围,则 iOS 应用程序无法在第二次(或以后)运行时进行身份验证,它从商店加载凭据而不是通过登录流程。
第一个(登录凭据)的 AppEngine 日志显示:
com.google.api.server.spi.auth.GoogleIdTokenUtils getCurrentUser: getCurrentUser: IdToken; email=testuser@gmail.com
第二个(加载的凭据)的 AppEngine 日志显示:
com.google.api.server.spi.auth.AppEngineAuthUtils getCurrentUser: getCurrentUser: AccessToken; Tried and failed to get client id for scope 'com.google.api.server.spi.config.scope.DisjunctAuthScopeExpression@a015b54e'
com.google.appengine.api.oauth.InvalidOAuthParametersException:
at com.google.appengine.api.oauth.OAuthServiceImpl.makeSyncCall(OAuthServiceImpl.java:139)
at com.google.appengine.api.oauth.OAuthServiceImpl.getGetOAuthUserResponse(OAuthServiceImpl.java:118)
at com.google.appengine.api.oauth.OAuthServiceImpl.getAuthorizedScopes(OAuthServiceImpl.java:90)
at com.google.api.server.spi.auth.AppEngineAuthUtils.getOAuth2AuthorizedScopes(AppEngineAuthUtils.java:140)
at com.google.api.server.spi.auth.AppEngineAuthUtils.getCurrentUser(AppEngineAuthUtils.java:89)
...
此异常不会向上传播;null
为用户返回。
是否需要做其他事情才能GTMOAuth2ViewControllerTouch
使新范围正常工作?或者 AppEngine 方面可能有问题?