追加のスコープをリクエストする



  • この記事は、Google Sign-In for Android に関する記事を和訳したものです。
  • 原文: Requesting Additional Scopes
  • 元記事のライセンスは CC-BYで、この和訳記事のライセンスは CC-BYです。
  • 自己責任でご利用ください。
  • 和訳した時期は 2019年6月ころです。

最高のユーザエクスペリエンスのために、最初にユーザにサインインするとき、可能な限り小さなスコープでリクエストする必要があります。 もしあなたのアプリのコア機能が Googleサービスに結び付けられていなければ、GoogleSignInOptions.DEFAULT_SIGN_IN構成がサインインする必要があるときに必要となるすべてです。

もしあなたのアプリが Google APIデータを使用することができる機能を持っており、あなたのアプリのコア機能の一部として必要とされていなければ、あなたのアプリが APIデータにアクセス可能でないケースを優雅に処理することができるよう、デザインする必要があります。 例えば、ユーザが Driveアクセスを付与されていないとき、最近保存されたファイルのリストを非表示にするかもしれません。

ユーザが特定の APIへのアクセスを必要とするアクションを実行するときのみ、Google APIへのアクセスするために必要となる追加のスコープをリクエストすべきです。 例えば、ユーザが初めて "Save to Drive" ボタンをタップしたとのみ、ユーザの Driveにアクセスするためのパーミッションをリクエストするかもしれません。

この手法を使用することによって、新しいユーザを圧倒させる、あるいは、特定のアクセスが求められている理由についてユーザを混乱させることを回避することができます。

ユーザのアクションによって必要とされるパーミッションをリクエストする

ユーザが、サインインのときにリクエストされていないスコープを必要とするアクションを実行するたびに、ユーザが既に必要なパーミッションを付与されているかどうかをチェックするために GoogleSignIn.hasPermissions が呼び出されます。 もしそうでなければ、ユーザから追加の必要とされるスコープをリクエストするアクティビティを起動するために、GoogleSignIn.requestPermissionsを呼び出します。

例えば、ユーザが彼らの Driceアプリストレージへのアクセスを必要とするアクションを実行した場合、次の手順を実行します:

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();
        }
    }
}

また、一連のパーミッションをより簡単にチェックし、受け容れるために、GoogleSignInOptionsExtensionhasPermissions および requestPermissionsを渡すことができます。