Kimlik doğrulama, bir kişinin kim olduğunu belirler ve genellikle kullanıcı kaydı veya oturum açma olarak adlandırılır. Yetkilendirme, verilere 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ının iznini 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 yararlanabilecek ancak uygulamanızın temel özellikleri kapsamında zorunlu olmayan özellikler varsa uygulamanızı, API verilerine erişilemediği durumları sorunsuz bir şekilde işleyebilecek şekilde tasarlamanız gerekir. Örneğin, kullanıcı Drive'a erişim izni vermediğinde yakın zamanda kaydedilen dosyaların listesini gizleyebilirsiniz.
Google API'lerine erişmek için yalnızca kullanıcının belirli bir API'ye erişim gerektiren bir işlem gerçekleştirdiği durumlarda ihtiyacınız olan kapsamlar için erişim isteğinde bulunmalısınız. Ö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 kafasını karıştırmayı veya kullanıcılardan neden belirli izinler istendiği konusunda kafa karışıklığı yaşanmasını önleyebilirsiniz.
Kimlik doğrulama için Credential Manager API'yi kullanmanızı öneririz. Google tarafından depolanan kullanıcı verilerine erişim gerektiren işlemleri yetkilendirmek için AuthorizationClient'ı kullanmanızı öneririz.
Projenizi oluşturma
- Projenizi 'da açın veya henüz projeniz yoksa proje oluşturun.
- bölümünde tüm bilgilerin eksiksiz ve doğru olduğundan emin olun.
- Uygulamanızın doğru bir uygulama adı, uygulama logosu ve uygulama ana sayfası atandığından emin olun. Bu değerler, kayıt sırasında Google ile oturum açma izni ekranında ve Üçüncü taraf uygulamaları ve hizmetleri ekranında kullanıcılara gösterilir.
- Uygulamanızın gizlilik politikası ve hizmet şartları URL'lerini belirttiğinizden emin olun.
- 'da henüz yoksa uygulamanız için bir Android istemci kimliği oluşturun. Uygulamanızın paket adını ve SHA-1 imzasını belirtmeniz gerekir.
- bölümünde, henüz yapmadıysanız yeni bir "Web uygulaması" istemci kimliği oluşturun. Şimdilik "Yetkilendirilmiş JavaScript Kaynakları" ve "Yetkilendirilmiş yönlendirme URI'leri" alanlarını yok sayabilirsiniz. Bu istemci kimliği, arka uç sunucunuz Google'ın kimlik doğrulama hizmetleriyle iletişim kurduğunda sunucunuzu tanımlamak için kullanılır.
Bağımlılıkları bildirme
Modülünüzün build.gradle dosyasında, Google Identity Services kitaplığının en yeni sürümünü kullanarak bağımlılıkları bildirin.
dependencies {
// ... other dependencies
implementation "com.google.android.gms:play-services-auth:<latest version>"
}
Kullanıcı işlemleri için gerekli izinleri isteme
Kullanıcı, ek kapsam gerektiren bir işlem gerçekleştirdiğinde AuthorizationClient.authorize()
işlevini çağırın.
Örneğin, bir kullanıcı Drive uygulama depolama alanına erişim gerektiren bir işlem yaparsa şunları 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 alınmışsa 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);
}
}
Google API'lerine sunucu tarafında erişiyorsanız yetkilendirme kodu almak için AuthorizationResult'ın getServerAuthCode() yöntemini çağırabilirsiniz. Bu kodu, erişim ve yenileme jetonuyla değiştirmek üzere arka ucunuza gönderirsiniz.