Kimlik doğrulama, kullanıcının kim olduğunu belirler ve genellikle kullanıcı kaydı veya oturum açma olarak adlandırılır. Yetkilendirme, verilere veya kaynaklara erişim verme ya da erişim vermemeyi belirleme 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ı, uygulamanın ihtiyaçlarına göre iki ayrı ve farklı akış olmalıdır.
Uygulamanızda Google API verilerinden yararlanabilen ancak uygulamanızın temel özellikleri kapsamında gerekli olmayan özellikler varsa uygulamanızı, API verilerine erişilemediği durumları sorunsuz bir şekilde ele alabilecek şekilde tasarlamanız gerekir. Örneğin, kullanıcı Drive erişimi vermediğinde son kaydedilen dosyaların listesini gizleyebilirsiniz.
Google API'lerine erişmek için ihtiyaç duyduğunuz 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şmek için izin istemeniz gerekir.
Yetkilendirmeyi kimlik doğrulamadan ayırarak yeni kullanıcıların bunalmasını veya belirli izinlerin neden istendiği konusunda kafalarının karışmasını önleyebilirsiniz.
Kimlik doğrulaması için Credential Manager API'yi kullanmanızı öneririz. Google tarafından depolanan kullanıcı verilerine erişmesi gereken işlemleri yetkilendirmek için AuthorizationClient'ı kullanmanızı öneririz.
Kullanıcı işlemlerinin gerektirdiği izinleri isteme
Kullanıcı ek kapsam gerektiren bir işlem yaptığında AuthorizationClient.authorize()
işlevini çağırı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ğırma işlevinde, gerekli izinlerin başarıyla alınıp alınmadığını kontrol edebilir ve izinler alındıysa 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);
}
}