AccountManager::getAuthTokenByFeaturesを使用すると、ユーザーがアカウントへのアクセスを許可または拒否するためのアクセス要求画面が表示されます。ユーザーがアクセスを許可した後、後続の呼び出し (同じ引数を使用) は、ユーザーにプロンプトを表示せずに認証トークンを返します。
アクセス要求プロンプトが表示されるように状態をクリアするにはどうすればよいですか? (これは、少なくとも開発、テスト、およびデモの目的には役立ちます。)
AccountManager::getAuthTokenByFeaturesを使用すると、ユーザーがアカウントへのアクセスを許可または拒否するためのアクセス要求画面が表示されます。ユーザーがアクセスを許可した後、後続の呼び出し (同じ引数を使用) は、ユーザーにプロンプトを表示せずに認証トークンを返します。
アクセス要求プロンプトが表示されるように状態をクリアするにはどうすればよいですか? (これは、少なくとも開発、テスト、およびデモの目的には役立ちます。)
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 へのアクセスを取り消すと、アプリケーションはデバイスで再度許可のためのウィンドウを表示します。
テスト用に新しいアカウントを作成しました。新しいアカウントでは、常にアクセス リクエストが要求されます。アクセスを許可しないことを忘れないでください。
ログイン画面をテストするには、別のデバイス/PC からアカウントのパスワードを変更します。
私の場合、ベン・サンドヴァルの言うことはうまくいきません。
プログラムでアクセス許可を取り消してから、再度接続する必要がありました。
if (googleApiClient != null && !googleApiClient.isConnecting() && googleApiClient.isConnected()){
googleApiClient.clearDefaultAccountAndReconnect();
Plus.AccountApi.revokeAccessAndDisconnect(googleApiClient).setResultCallback(new ResultCallback<Status>() {
@Override
public void onResult(Status status) {
Log.i("google+", "Google+ user access revoked");
googleApiClient.connect();
}
});
}
これを行うと、Google+ にアクセス許可を付与するように再度求められました