約 2 週間前にかなり成功したアプリを公開しました。しかし、昨日から、ドライブにアクセスできなくなったというメールがユーザーから届き続けています。簡単なデバッグの後、Drive API へのリクエストが "403 Forbidden" -> "Access Not Configured" を返すようになったことがわかりました。
これは、更新トークンが適切に処理されていないことに問題がある可能性があると思います。
次のコードを使用しています (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 アカウントを再度選択すると、すべて正常に動作します。そういうわけで、リフレッシュトークンと関係があると思います。
ゴッチェン