1

我在我的应用程序中使用 Google Play 服务,但最近我发现了一些奇怪的东西,我不知道如何处理它。

如果您使用的是 Google Play 服务,那么您第一次知道,在生成令牌之前,您需要授予您的应用权限(授予访问权限)以使用选定的 API。

谷歌正在请求许可并显示此窗口(抱歉非英文截图)

之后,您的应用将在此处显示:https ://accounts.google.com/IssuedAuthSubTokens

您的应用现在应该在列表中

我的应用程序就在那里。一切正常。我想从头开始测试它,我撤销了对我的应用程序的访问权限,然后......它停止工作。在撤销对我的应用程序的访问权限后,我无法强制 Google Play 服务显示此窗口。我没有 Google API 的权限,但 Google 应该向我显示重新添加它的权限窗口。

有没有办法再次显示这个窗口?

我正在使用 GoogleAccountCredential.usingOAuth2 函数来获取用户令牌和数据(所有例外情况,如 UserRecoverableAuthIOException、startActivityForResult(e.getIntent()、REQUEST_AUTHORIZATION) ...)。

据我了解,GoogleAccountCredential 使用 Google Play 服务来管理 OAuth2 流程,您只需要提供用户名即可。撤销访问权限后,它不起作用。

4

1 回答 1

3

使用 Google Play 服务:

http://developer.android.com/reference/com/google/android/gms/auth/GoogleAuthUtil.html

https://www.googleapis.com/auth/userinfo.profile添加到您的范围。

例子:

String scope="oauth2:https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile"

final String token = GoogleAuthUtil.getToken(context, "xxxx@gmail.com", scope);

或“蛮力”

Intent res = new Intent();
res.addCategory("account:xxxx@gmail.com");
res.addCategory("scope:oauth2:https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile");
res.putExtra("service", "oauth2:https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile");
Bundle extra= new Bundle();
extra.putString("androidPackageName","com.your.package");
res.putExtra("callerExtras",extra);
res.putExtra("androidPackageName","com.your.package");
res.putExtra("authAccount","xxxx@gmail.com");

String mPackage = "com.google.android.gms";
String mClass = "com.google.android.gms.auth.TokenActivity";
res.setComponent(new ComponentName(mPackage,mClass));
startActivityForResult(res,100);

现在,当您在此处撤销访问https://accounts.google.com/IssuedAuthSubTokens时,应用程序会再次在设备中向您显示权限窗口。

于 2013-08-14T16:03:23.180 回答