為提供最佳使用者體驗,請在使用者首次登入時,盡可能要求最少的範圍。如果應用程式的核心功能與 Google 服務無關,通常只要在登入時進行 GoogleSignInOptions.DEFAULT_SIGN_IN 設定即可。
如果應用程式有可使用 Google 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 至 hasPermissions 和 requestPermissions,更方便地檢查及取得一組權限。