Android'de kullanıcı verilerine erişim yetkisi verme

Kimlik doğrulama, bir kullanıcının kim olduğunu belirler ve genellikle kullanıcı kaydı veya oturum açma olarak adlandırılır. Yetkilendirme, veri veya kaynaklara erişim izni verme ya da erişimi reddetme işlemidir. Örneğin, uygulamanız kullanıcının Google Drive'ına erişmek için kullanıcıdan izin ister.

Kimlik doğrulama ve yetkilendirme çağrıları, sitenin veya uygulamanın ihtiyaçlarına göre iki ayrı ve farklı akış olmalıdır.

Uygulamanızın, Google API verilerinden yararlanabilecek ancak temel özelliklerinin parçası olarak gerekli olmayan özellikleri varsa uygulamanızı, API verilerine erişilemediğinde sorunsuz şekilde ele alabileceği şekilde tasarlamanız gerekir. Örneğin, kullanıcı Drive'a erişim izni vermediğinde, son kaydedilen dosyaların listesini gizleyebilirsiniz.

Google API'lerine erişmek istediğiniz kapsamlara, yalnızca kullanıcı belirli bir API'ye erişim gerektiren bir işlem yaptığında erişim istemelisiniz. Örneğin, kullanıcı "Drive'a Kaydet" düğmesine her dokunduğunda, kullanıcının Drive'ına erişim izni istemelisiniz.

Yetkilendirmeyi kimlik doğrulama işleminden ayırarak, yeni kullanıcıları bunaltmaktan veya kullanıcıların neden belirli izinleri istemeleri gerektiği konusunda kafalarının karışmasını önleyebilirsiniz.

Google kimlik Hizmetleri'nde kimlik doğrulama SignInClient kullanılarak yapılır. Google tarafından depolanan kullanıcı verilerine erişmesi gereken işlemleri yetkilendirmek için AuthorizationClient değerini kullanmanızı öneririz.

Kullanıcı işlemlerinin gerektirdiği izinleri isteme

Bir kullanıcı ek kapsam gerektiren bir işlem yaptığında AuthorizationClient.authorize() numaralı telefonu arayın.

Örneğin, bir kullanıcı Drive uygulama depolama alanına erişim gerektiren bir işlem gerçekleştirirse aşağıdakileri yapın:

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

Etkinliğinizin onActivityResult geri çağırmasında, gerekli izinlerin başarıyla alınıp alınmadığını kontrol edebilir ve varsa kullanıcı işlemini gerçekleştirebilirsiniz.

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