Wear OS uygulamaları, tamamlayıcı uygulama olmadan bağımsız olarak çalışabilir. Bu nedenle, internetten veri erişirken Wear OS uygulamalarının kimlik doğrulama işlemini kendi başına yönetmesi gerekir. Ancak kol saatinin küçük ekran boyutu ve azaltılmış giriş özellikleri, Wear OS uygulamasının kullanabileceği kimlik doğrulama seçeneklerini sınırlar.
Bu rehberde, Wear OS uygulamaları için önerilen kimlik doğrulama yöntemi olan Kimlik Bilgisi Yöneticisi ile ilgili talimatlar verilmektedir.
İyi bir oturum açma deneyimi tasarlama hakkında daha fazla bilgi edinmek için Oturum açma kullanıcı deneyimi kılavuzu'nu inceleyin.
Ön değerlendirme
Uygulamaya başlamadan önce aşağıdaki noktaları göz önünde bulundurun.
Misafir modu
Tüm işlevler için kimlik doğrulama gerektirmez. Bunun yerine, kullanıcıdan oturum açmasını istemeden mümkün olduğunca çok özellik sunun.
Kullanıcılar, mobil uygulamayı kullanmadan Wear uygulamanızı keşfedip yükleyebilir. Bu nedenle, hesapları olmayabilir ve uygulamanın hangi özellikleri sunduğunu bilmeyebilirler. Misafir modu işlevinin, uygulamanızın özelliklerini doğru şekilde gösterdiğinden emin olun.
Bazı cihazlar daha uzun süre kilidi açık kalabilir
Wear OS 5 veya sonraki sürümlerin yüklü olduğu desteklenen cihazlarda sistem, kullanıcının cihazı bileğinde takıp takmadığını algılar. Kullanıcı bilek algılamayı devre dışı bırakırsa ve cihazı bileğinden çıkarırsa sistem, cihazın kilidini normalde olduğundan daha uzun süre açık tutar.
Uygulamanız, hassas veya özel verilerin gösterilmesi gibi durumlarda daha yüksek bir güvenlik düzeyi gerektiriyorsa önce bilek algılamanın etkin olup olmadığını kontrol edin:
val wristDetectionEnabled =
isWristDetectionAutoLockingEnabled(applicationContext)
Bu yöntemin dönüş değeri false
ise kullanıcıya özel içerik göstermeden önce kullanıcıdan uygulamanızdaki bir hesapta oturum açmasını isteyin.
Kimlik Bilgisi Yöneticisi
Wear OS'te kimlik doğrulama için Kimlik Bilgisi Yöneticisi API'si önerilir. Bu özellik, kullanıcıların Wear OS uygulamalarında tek başına bir ayarda oturum açmaları için daha güvenli bir ortam sağlar. Bunun için bağlı bir eşlenmiş telefon ve şifrelerini hatırlamaları gerekmez.
Bu belgede, geliştiricilerin aşağıdaki standart kimlik doğrulama mekanizmalarını barındıran bir Credential Manager çözümünü uygulamak için ihtiyaç duyduğu bilgiler özetlenmektedir:
- Geçiş anahtarları
- Şifreler
- Birleştirilmiş kimlikler (ör. Google ile oturum açma)
Bu kılavuzda, kabul edilebilir diğer Wear OS kimlik doğrulama yöntemlerinin (veri katmanı jetonu paylaşımı ve OAuth) Kimlik Bilgisi Yöneticisi'nin yedekleri olarak nasıl taşınacağı ve artık kullanımdan kaldırılan bağımsız Google ile oturum açma düğmesinden yerleştirilmiş Kimlik Bilgisi Yöneticisi sürümüne geçişin nasıl yapılacağıyla ilgili özel talimatlar da verilmektedir.
Wear OS'te geçiş anahtarları
Geliştiricilerin, Wear OS Kimlik Bilgisi Yöneticisi uygulamalarında geçiş anahtarlarını kullanmaları önemle tavsiye edilir. Geçiş anahtarları, son kullanıcı kimlik doğrulaması için yeni endüstri standardıdır ve kullanıcılar için önemli avantajlar sunar.
Geçiş anahtarları daha kolaydır
- Kullanıcılar, oturum açmak için bir hesap seçebilir. Kullanıcı adı yazmaları gerekmez.
- Kullanıcılar, cihazın ekran kilidini kullanarak kimliklerini doğrulayabilir.
- Geçiş anahtarı oluşturulup kaydedildikten sonra kullanıcı, yeni bir cihaza sorunsuz bir şekilde geçiş yapabilir ve yeniden kaydolmasına gerek kalmadan cihazı hemen kullanabilir.
Geçiş anahtarları daha güvenlidir
- Geliştiriciler, sunucuya şifre kaydetmek yerine yalnızca ortak anahtar kaydeder. Bu da kötü niyetli kişilerin sunuculara sızması durumunda çok daha az değer elde edeceği ve ihlal durumunda çok daha az temizlik yapılması gerektiği anlamına gelir.
- Geçiş anahtarları, kimlik avına karşı koruma sağlar. Geçiş anahtarları yalnızca kayıtlı web sitelerinde ve uygulamalarda çalışır. Tarayıcı veya işletim sistemi doğrulama işlemini yaptığından kullanıcılar, yanıltıcı bir sitede kimlik doğrulamaya yönlendirilemez.
- Geçiş anahtarları, SMS gönderme ihtiyacını azaltarak kimlik doğrulama işlemini daha uygun maliyetli hale getirir.
Geçiş anahtarlarını uygulama
Tüm uygulama türleri için kurulum ve rehberlik içerir.
Kurulum
Uygulama modülünüzün build.gradle dosyasında hedef API düzeyini 35 olarak ayarlayın:
android { defaultConfig { targetSdkVersion(35) } }
Uygulamanız veya modülünüz için build.gradle dosyasına aşağıdaki satırları ekleyin.
androidx.credentials
Sürümler referansındaki en son kararlı sürümü kullanın.androidx.credentials:credentials:1.5.0 androidx.credentials:credentials-play-services-auth:1.5.0
Yerleşik kimlik doğrulama yöntemleri
Kimlik Bilgisi Yöneticisi birleşik bir API olduğundan Wear OS'teki uygulama adımları diğer tüm cihaz türleriyle aynıdır.
Başlamak ve şifre anahtarı ile şifre desteğini uygulamak için mobil yol tariflerini kullanın.
Kimlik Bilgisi Yöneticisi'ne Google ile oturum açma desteği ekleme adımları mobil geliştirme için hazırlanmıştır ancak Wear OS'te de aynı adımlar uygulanır. Bu durumla ilgili özel dikkat edilmesi gereken noktalar için Eski Google ile oturum açma özelliğinden geçiş bölümüne bakın.
Wear OS'te kimlik bilgileri oluşturulamadığından mobil talimatlarda belirtilen kimlik bilgisi oluşturma yöntemlerini uygulamanız gerekmediğini unutmayın.
Yedek kimlik doğrulama yöntemleri
Wear OS uygulamaları için kabul edilebilir iki kimlik doğrulama yöntemi daha vardır: OAuth 2.0 (her iki varyant da) ve mobil kimlik doğrulama jetonu veri katmanı paylaşımı. Bu yöntemlerin Kimlik Bilgisi Yöneticisi API'sinde entegrasyon noktaları olmasa da kullanıcılar Kimlik Bilgisi Yöneticisi ekranını kapattığında yedek olarak Kimlik Bilgisi Yöneticisi'nin kullanıcı deneyimi akışınıza dahil edilebilirler.
Kimlik bilgisi yöneticisi ekranını kapatma kullanıcı işlemini işlemek için NoCredentialException
öğesini GetCredential
mantığınızın bir parçası olarak yakalayın ve kendi özel kimlik doğrulama kullanıcı arayüzünüze gidin.
yourCoroutineScope.launch {
try {
val response = credentialManager.getCredential(activity, request)
signInWithCredential(response.credential)
} catch (e: GetCredentialCancellationException) {
navigateToFallbackAuthMethods()
}
}
Özel kimlik doğrulama kullanıcı arayüzünüz daha sonra Oturum açma kullanıcı deneyimi kılavuzunda açıklanan diğer kabul edilebilir kimlik doğrulama yöntemlerinden herhangi birini sağlayabilir.
Veri katmanı jeton paylaşımı
Telefon tamamlayıcı uygulaması, Wearable Data Layer API'yi kullanarak kimlik doğrulama verilerini Wear OS uygulamasına güvenli bir şekilde aktarabilir. Kimlik bilgilerini mesaj veya veri öğesi olarak aktarın.
Bu tür kimlik doğrulama genellikle kullanıcıdan herhangi bir işlem yapmasını gerektirmez. Ancak, kullanıcıya oturum açtığı bildirilmeden kimlik doğrulama yapmaktan kaçının. Kullanıcıya, hesabının mobil cihazdan aktarıldığını gösteren ve kapatılabilen bir ekranla bilgi verebilirsiniz.
Önemli: Bu seçenek yalnızca ilgili mobil uygulama yüklendiğinde Android ile eşlenmiş kol saatlerinde çalıştığı için Wear OS uygulamanız en az bir kimlik doğrulama yöntemi daha sunmalıdır. İlgili mobil uygulaması olmayan veya Wear OS cihazı iOS cihazla eşlenmiş kullanıcılar için alternatif bir kimlik doğrulama yöntemi sağlayın.
Aşağıdaki örnekte gösterildiği gibi, mobil uygulamadaki veri katmanını kullanarak jetonları iletin:
val token = "..." // Auth token to transmit to the Wear OS device.
val dataClient: DataClient = Wearable.getDataClient(context)
val putDataReq: PutDataRequest = PutDataMapRequest.create("/auth").run {
dataMap.putString("token", token)
asPutDataRequest()
}
val putDataTask: Task<DataItem> = dataClient.putDataItem(putDataReq)
Aşağıdaki örnekte gösterildiği gibi, Wear OS uygulamasındaki veri değişikliği etkinliklerini dinleyin:
val dataClient: DataClient = Wearable.getDataClient(context)
dataClient.addListener{ dataEvents ->
dataEvents.forEach { event ->
if (event.type == DataEvent.TYPE_CHANGED) {
val dataItemPath = event.dataItem.uri.path ?: ""
if (dataItemPath.startsWith("/auth")) {
val token = DataMapItem.fromDataItem(event.dataItem).dataMap.getString("token")
// Display an interstitial screen to notify the user that
// they're being signed in.
// Then, store the token and use it in network requests.
}
}
}
}
Giyilebilir cihaz veri katmanını kullanma hakkında daha fazla bilgi için Wear OS'te veri gönderme ve senkronize etme başlıklı makaleyi inceleyin.
OAuth 2.0'ı kullanma
Wear OS, aşağıdaki bölümlerde açıklanan iki OAuth 2.0 tabanlı akışı destekler:
- RFC 7636'da tanımlandığı şekilde, Proof Key for Code Exchange (PKCE) ile yetkilendirme kodu verme
- RFC 8628'de tanımlandığı şekliyle Cihaz Yetkilendirme İzni (DAG)
Proof Key for Code Exchange (PKCE)
PKCE'yi etkili bir şekilde kullanmak için RemoteAuthClient
kullanın.
Ardından, Wear OS uygulamanızdan bir OAuth sağlayıcısına kimlik doğrulama isteği göndermek için OAuthRequest
nesnesi oluşturun. Bu nesne, jeton almak için OAuth uç noktanızın URL'si ve bir CodeChallenge
nesnesinden oluşur.
Aşağıdaki kodda, kimlik doğrulama isteği oluşturma örneği gösterilmektedir:
val request = OAuthRequest.Builder(this.applicationContext)
.setAuthProviderUrl(Uri.parse("https://...."))
.setClientId(clientId)
.setCodeChallenge(codeChallenge)
.build()
Kimlik doğrulama isteğini oluşturduktan sonra sendAuthorizationRequest()
yöntemini kullanarak tamamlayıcı uygulamaya gönderin:
val client = RemoteAuthClient.create(this)
client.sendAuthorizationRequest(request,
{ command -> command?.run() },
object : RemoteAuthClient.Callback() {
override fun onAuthorizationResponse(
request: OAuthRequest,
response: OAuthResponse
) {
// Extract the token from the response, store it, and use it in
// network requests.
}
override fun onAuthorizationError(errorCode: Int) {
// Handle any errors.
}
}
)
Bu istek, yardımcı uygulamaya bir çağrı tetikler. Bu uygulama da kullanıcının cep telefonundaki bir web tarayıcısında yetkilendirme kullanıcı arayüzü gösterir. OAuth 2.0 sağlayıcısı, kullanıcının kimliğini doğrular ve istenen izinler için kullanıcının iznini alır. Yanıt, otomatik olarak oluşturulan yönlendirme URL'sine gönderilir.
Başarılı veya başarısız bir yetkilendirmeden sonra OAuth 2.0 sunucusu, istekte belirtilen URL'ye yönlendirir. Kullanıcı erişim isteğini onaylarsa yanıt bir yetkilendirme kodu içerir. Kullanıcı isteği onaylamazsa yanıtta hata mesajı yer alır.
Yanıt, sorgu dizesi biçimindedir ve aşağıdaki örneklerden birine benzer:
https://wear.googleapis.com/3p_auth/com.your.package.name?code=xyz
https://wear.googleapis-cn.com/3p_auth/com.your.package.name?code=xyz
Bu işlem, kullanıcıyı tamamlayıcı uygulamaya yönlendiren bir sayfa yükler. Tamamlayıcı uygulama, onAuthorizationResponse
API'sini kullanarak yanıt URL'sini doğrular ve yanıtı Wear OS uygulamanıza iletir.
Ardından, kol saati uygulaması yetkilendirme kodunu erişim jetonuyla değiştirebilir.
Cihaz Yetkilendirme İzni
Cihaz yetkilendirme izni kullanılırken kullanıcı, doğrulama URI'sini başka bir cihazda açar. Ardından yetkilendirme sunucusu, kullanıcılardan isteği onaylamalarını veya reddetmelerini ister.
Bu süreci kolaylaştırmak için aşağıdaki örnekte gösterildiği gibi, kullanıcının eşlenmiş mobil cihazında bir web sayfasını açmak üzere RemoteActivityHelper
kullanın:
// Request access from the authorization server and receive Device Authorization
// Response.
val verificationUri = "..." // Extracted from the Device Authorization Response.
RemoteActivityHelper.startRemoteActivity(
this,
Intent(Intent.ACTION_VIEW)
.addCategory(Intent.CATEGORY_BROWSABLE)
.setData(Uri.parse(verificationUri)),
null
)
// Poll the authorization server to find out if the user completed the user
// authorization step on their mobile device.
iOS uygulamanız varsa jetonu yetkilendirmek için tarayıcıya güvenmek yerine bu amacı uygulamanızda yakalamak için geçiş bağlantılarını kullanın.
Eski Google ile oturum açma özelliğinden geçiş
Kimlik Bilgisi Yöneticisi, Google ile oturum açma düğmesi için özel bir entegrasyon noktasına sahiptir. Bu düğme daha önce bir uygulamanın kimlik doğrulama kullanıcı deneyiminde herhangi bir yere eklenebiliyordu ancak Kimlik Bilgisi Yöneticisi'ne dahil edilmesiyle birlikte eski seçenek artık kullanımdan kaldırıldı.
// Define a basic SDK check.
fun isCredentialManagerAvailable(): Boolean {
return android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.VANILLA_ICE_CREAM
}
// Elsewhere in the code, use it to selectively disable the legacy option.
Button(
onClick = {
if (isCredentialManagerAvailable()) {
Log.w(TAG, "Devices on API level 35 or higher should use
Credential Manager for Sign in with Google")
} else {
navigateToSignInWithGoogle()
}},
enabled = !isCredentialManagerAvailable(),
label = { Text(text = stringResource(R.string.sign_in_with_google)) },
secondaryLabel = { Text(text = "Disabled on API level 35+")
}
)