最適なユーザー エクスペリエンスを実現するには、リクエストするスコープをできるだけ少なくする必要があります。
ユーザー ログインを最初に促します。アプリのコア機能が
Google サービスの場合、GoogleSignInOptions.DEFAULT_SIGN_IN
の構成は通常、
すべてログインするだけで使用できます。
Google API データを使用できる機能がアプリにあるが、 アプリのコア機能の一部として必要な場合は、 API データにアクセスできないケースを適切に処理できます。たとえば ユーザーがドライブにファイルへのアクセスを許可していない場合、最近保存したファイルのリストを非表示にできます。 できます。
Google API へのアクセスのみに必要な追加のスコープをリクエストする必要があります。 ユーザーが特定の API へのアクセスを必要とするアクションを実行したとき。対象 たとえば、ユーザーのドライブへのアクセス許可を ユーザーが [ドライブに保存] をタップクリックします。
このテクニックを使うと、新規ユーザーを圧倒したり混乱させたりするのを避けることができます。 特定の権限が必要な理由をユーザーに説明できます。
ユーザーの操作に必要な権限をリクエストする
ユーザーが、リクエストされていないスコープを必要とするアクションを実行するたびに、
ログイン。GoogleSignIn.hasPermissions
を呼び出して、ユーザーがすでにログインしているかどうかを確認します。
ユーザーに付与します。そうでない場合は、GoogleSignIn.requestPermissions
を呼び出します。
必要な追加のスコープを
できます。
たとえば、ユーザーが自分のドライブへのアクセスを必要とする操作を実行した場合です。 次の操作を行います。
if (!GoogleSignIn.hasPermissions(
GoogleSignIn.getLastSignedInAccount(getActivity()),
Drive.SCOPE_APPFOLDER)) {
GoogleSignIn.requestPermissions(
MyExampleActivity.this,
RC_REQUEST_PERMISSION_SUCCESS_CONTINUE_FILE_CREATION,
GoogleSignIn.getLastSignedInAccount(getActivity()),
Drive.SCOPE_APPFOLDER);
} else {
saveToDriveAppFolder();
}
アクティビティの onActivityResult
コールバックで、
権限が正常に取得されたら、ユーザー操作を実行します。
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_OK) {
if (RC_REQUEST_PERMISSION_SUCCESS_CONTINUE_FILE_CREATION == requestCode) {
saveToDriveAppFolder();
}
}
}
また、GoogleSignInOptionsExtension
を hasPermissions
に渡して、
requestPermissions
を使用して、権限セットの確認と取得をさらに
できます。