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 bağlı olarak iki ayrı ve farklı akış olmalıdır.

Uygulamanızda Google API verilerinden yararlanabilecek ancak uygulamanızın temel özelliklerinin parçası olarak gerekli olmayan özellikler varsa uygulamanızı, API verilerine erişilemediğinde sorunsuz şekilde işleyebilecek ş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 için ihtiyacınız olan kapsamlara, yalnızca kullanıcı belirli bir API'ye erişim gerektiren bir işlem gerçekleştirdiğinde erişim isteğinde bulunmanız gerekir. Ö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ğrulamadan ayırarak yeni kullanıcıları bunaltmaktan veya kullanıcılardan neden belirli izinleri istendiği konusunda kafalarının karışmasını önleyebilirsiniz.

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

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

Bir kullanıcı ek kapsam gerektiren bir işlem gerçekleştirdiğinde AuthorizationClient.authorize() çağrısı yapı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(builder.build())
        .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);
  }
}