要求其他範圍

為了提供最佳使用者體驗,建議您在初次登入時盡量減少要求的範圍。如果應用程式的核心功能並未與 Google 服務建立關聯,那麼 GoogleSignInOptions.DEFAULT_SIGN_IN 設定通常在登入時會用到。

如果應用程式的功能可以使用 Google API 資料,但並非應用程式核心功能的一部分,則您必須設計應用程式,以便在無法存取 API 資料時妥善處理情況。舉例來說,當使用者未授予雲端硬碟存取權時,您可以隱藏最近儲存的檔案清單。

建議您只在使用者執行需要特定 API 的動作時,才要求存取 Google 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 傳遞至 hasPermissionsrequestPermissions,以更輕鬆的方式檢查及取得一組權限。