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 durumlarda sorunsuz bir şekilde işlem yapabilmesi için 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şmek için işlem yaptığında 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.
Projenizi oluşturun
- Projenizi 'da açın veya projeniz yoksa proje oluşturun.
- 'da tüm bilgilerin eksiksiz ve doğru olduğundan emin olun.
- Uygulamanıza doğru uygulama adı, uygulama logosu ve uygulama ana sayfası atadığınızdan emin olun. Bu değerler, kayıt sırasındaki Google ile oturum açma izin ekranında ve Üçüncü taraf uygulamaları ve hizmetleri ekranında kullanıcılara sunulur.
- Uygulamanızın gizlilik politikasının ve hizmet şartlarının 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.
- Henüz yapmadıysanız 'te yeni bir"Web uygulaması" istemci kimliği oluşturun. "Yetkilendirilmiş JavaScript Kaynakları" ve "Yetkilendirilmiş Yönlendirme URI'ları" alanlarını şimdilik yoksayabilirsiniz. Bu istemci kimliği, arka uç sunucunuz Google'ın kimlik doğrulama hizmetleriyle iletişim kurarken 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 son sürümünü kullanarak bağımlılıkları beyan edin.
dependencies {
// ... other dependencies
implementation "com.google.android.gms:play-services-auth:<latest version>"
}
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şmesi gereken 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);
}
}
Google API'lerine sunucu tarafında erişiyorsanız erişim ve yenileme jetonu almak için arka ucunuza göndereceğiniz bir yetkilendirme kodu almak üzere AuthorizationResult sınıfının getServerAuthCode() yöntemini çağırabilirsiniz.