我在两周前发布了一个非常成功的应用程序。但是从昨天开始,用户不断向我发送有关Drive无法访问的电子邮件。经过快速调试后,我发现对Drive API的请求现在返回“403 Forbidden” - > “未配置访问”。
我认为这可能是刷新令牌无法正确处理的问题。
我正在使用以下代码(来自Android Drive SDK示例):
mCredentials = GoogleAccountCredential.usingOAuth2(this, DriveScopes.DRIVE);
String accountName = PreferenceManager.getDefaultSharedPreferences(this).getString(PREF_DRIVE_NAME, null);
if (accountName != null) {
setupDrive(accountName);
} else {
startActivityForResult(mCredentials.newChooseAccountIntent(), 0);
}
setupDrive(...)
看起来像这样:
mCredentials.setSelectedAccountName(accountName);
try {
mCredentials.getToken();
} catch (Exception e) {
Log.w(AbstractDriveActivity.class.getSimpleName(), "Error getting auth token", e);
if (e instanceof UserRecoverableAuthException) {
Intent intent = ((UserRecoverableAuthException) e).getIntent();
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK).addFlags(Intent.FLAG_FROM_BACKGROUND);
startActivity(intent);
} else {
Toast.makeText(AbstractDriveActivity.this, getString(R.string.toast_drive_setup_error),
Toast.LENGTH_SHORT).show();
finish();
}
}
drive = new Drive.Builder(AndroidHttp.newCompatibleTransport(), new GsonFactory(),
mCredentials).build();
知道这里可能有什么问题吗?
据我了解,GoogleAccountCredential
使用Google Play服务来管理OAuth2流程,您需要提供的只是用户名。我错了吗?我错过了什么吗?
顺便说一下:清除应用数据后,再次选择Google帐户,一切正常。这就是我认为它与刷新令牌有关的原因。
Goddchen
答案 0 :(得分:1)
没有保证,但问题可能来自这里:
mCredentials = GoogleAccountCredential.usingOAuth2(this, DriveScopes.DRIVE);
此方法对我来说似乎已弃用。您应该升级SDK和环境并将其更改为:
mCredentials = GoogleAccountCredential.usingOAuth2(this, Arrays.asList(DriveScopes.DRIVE));