授權在 Android 裝置上存取使用者資料

驗證機制可用來判斷某人的身分 (通常稱為使用者) 註冊或登入。「授權」是授予或拒絕存取權的過程 劃分資料或資源舉例來說,您的應用程式要求使用者同意 存取使用者的 Google 雲端硬碟。

驗證和授權呼叫應彼此獨立且互不相同 根據網站或應用程式需求調整流程

如果您的應用程式有可以使用 Google API 資料的功能,但這些功能並非 做為應用程式核心功能要求時,您必須將應用程式設計為 即便沒有 API 資料,也能妥善處理。例如: 如果使用者尚未授予雲端硬碟權限,您可以隱藏最近儲存的檔案清單 資源存取權

請只要求存取 Google API 所需的範圍存取權 當使用者執行需要存取特定 API 的動作時。適用對象 例如,您應該在使用者每次 使用者輕觸「儲存至雲端硬碟」按鈕。

將授權與驗證功能區隔開來可避免 或清楚說明他們為何要求提供某些資訊 授予其要求的權限。

在 Google 身分識別服務中,是透過 SignInClient. 為了授權動作需要存取 Google 儲存的使用者資料, 建議您使用 AuthorizationClient

要求使用者動作所需的權限

每當使用者執行需要額外範圍的動作時, AuthorizationClient.authorize()

舉例來說,如果使用者執行的動作需要存取雲端硬碟 應用程式儲存空間,請執行下列步驟:

List<Scopes> requestedScopes = Arrays.asList(DriveScopes.DRIVE_APPDATA);
AuthorizationRequest authorizationRequest = AuthorizationRequest.builder().setRequestedScopes(requestedScopes).build();
Identity.getAuthorizationClient(this)
        .authorize(authorizationRequest)
        .addOnSuccessListener(
            authorizationResult -> {
              if (authorizationResult.hasResolution()) {
                    // Access needs to be granted by the user
                PendingIntent pendingIntent = authorizationResult.getPendingIntent();
                try {
startIntentSenderForResult(pendingIntent.getIntentSender(),
REQUEST_AUTHORIZE, null, 0, 0, 0, null);
                } catch (IntentSender.SendIntentException e) {
                Log.e(TAG, "Couldn't start Authorization UI: " + e.getLocalizedMessage());
                }
              } else {
            // Access already granted, continue with user action
                saveToDriveAppFolder(authorizationResult);
              }
            })
        .addOnFailureListener(e -> Log.e(TAG, "Failed to authorize", e));

在活動的 onActivityResult 回呼中,您可以查看必要性 並成功取得權限,接著執行使用者動作。

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
  super.onActivityResult(requestCode, resultCode, data);
  if (requestCode == MainActivity.REQUEST_AUTHORIZE) {
    AuthorizationResult authorizationResult = Identity.getAuthorizationClient(this).getAuthorizationResultFromIntent(data);
    saveToDriveAppFolder(authorizationResult);
  }
}