Wear OS uygulamaları, tamamlayıcı uygulama olmadan bağımsız olarak çalışabilir. Bu, Wear OS uygulamasının internetten verilere erişirken kimlik doğrulamayı kendi başına yönetmesi gerektiği anlamına gelir. Ancak saatin küçük ekran boyutu ve sınırlı giriş özellikleri, Wear OS uygulamasının kullanabileceği kimlik doğrulama seçeneklerini kısıtlar.
Bu kılavuzda, 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ılavuzunu inceleyin.
Ön değerlendirmeler
Uygulamaya başlamadan önce aşağıdaki noktaları göz önünde bulundurun.
Misafir modu
Tüm işlevler için kimlik doğrulama zorunlu olmamalıdır. Bunun yerine, kullanıcıya oturum açmasını gerektirmeden 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 sunduğu özellikleri bilmeyebilirler. Misafir modu işlevinin, uygulamanızın özelliklerini doğru bir şekilde gösterdiğinden emin olun.
Bazı cihazların kilidi daha uzun süre açık kalabilir
Wear OS 5 veya sonraki sürümleri çalıştıran desteklenen cihazlarda sistem, kullanıcının cihazı bileğine takıp takmadığını algılar. Kullanıcı bilek algılamayı kapatıp cihazı bileğinden çıkarırsa sistem, cihazın kilidini normalden daha uzun süre açık tutar.
Uygulamanız daha yüksek düzeyde güvenlik gerektiriyorsa (ör. hassas veya özel olabilecek veriler gösterilirken) önce bilek algılamanın etkin olup olmadığını kontrol edin:
fun isWristDetectionAutoLockingEnabled(context: Context): Boolean { // Use the keyguard manager to check for the presence of a lock mechanism val keyguardManager = context.getSystemService<KeyguardManager>() val isSecured = keyguardManager?.isDeviceSecure == true // Use OEM-specific system settings to verify that on-body autolock is enabled. val isWristDetectionOn = android.provider.Settings.Global.getInt( context.contentResolver, PIXEL_WRIST_AUTOLOCK_SETTING_STATE, 0 ) == 1 return isSecured && isWristDetectionOn }
Bu yöntemin döndürdüğü değer 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
Kimlik Bilgisi Yöneticisi, Wear OS'te kimlik doğrulama için önerilen API'dir. Kullanıcıların, bağlı bir eşlenmiş telefona ve şifrelerini hatırlamaya gerek kalmadan Wear OS uygulamalarında bağımsız bir ortamda oturum açmaları için daha güvenli bir ortam sağlar.
Bu belgede, geliştiricilerin barındırdığı standart kimlik doğrulama mekanizmalarıyla bir Kimlik Bilgisi Yöneticisi çözümü uygulamak için ihtiyaç duyduğu bilgiler özetlenmektedir:
- Geçiş anahtarları
- Şifreler
- Birleşik kimlikler (ör. Google ile oturum açma)
Bu kılavuzda ayrıca, diğer kabul edilebilir Wear OS kimlik doğrulama yöntemlerinin (Veri Katmanı Jeton Paylaşımı ve OAuth) Kimlik Bilgisi Yöneticisi için yedek olarak nasıl taşınacağıyla ilgili talimatlar ve artık kullanımdan kaldırılan bağımsız Google ile Oturum Açma düğmesinden yerleşik Kimlik Bilgisi Yöneticisi sürümüne geçişin nasıl yapılacağıyla ilgili özel talimatlar da yer almaktadır.
Wear OS sınırlamaları ve farklılıkları
Geliştiriciler, Wear OS'teki aşağıdaki sınırlamaları ve farklılıkları göz önünde bulundurmalıdır:
- Kimlik Bilgisi Yöneticisi, Wear OS 3 ve sonraki sürümlerde kullanılabilir.
- Wear OS'te kimlik bilgileri oluşturulamaz.
- Kimlik bilgilerini geri yükleme ve karma oturum açma akışları desteklenmez.
- Yalnızca Wear OS entegrasyonu olan kimlik bilgisi sağlayıcılar mobil cihazlardan yeniden kullanılabilir.
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 birçok önemli avantaj 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 kimlik doğrulaması yapabilir.
- Geçiş anahtarı oluşturulup kaydedildikten sonra kullanıcı, yeni bir cihaza otomatik geçiş yapabilir ve yeniden kaydolmaya gerek kalmadan hemen kullanabilir.
Geçiş anahtarları daha güvenlidir
- Geliştiriciler, şifre yerine sunucuya yalnızca ortak anahtar kaydeder. Bu sayede, kötü niyetli kişilerin sunucuları hack'lemesi çok daha az değer taşır ve ihlal durumunda yapılması gereken temizlik çok daha az olur.
- Geçiş anahtarları, kimlik avına karşı koruma sağlar. Geçiş anahtarları yalnızca kayıtlı web sitelerinde ve uygulamalarda çalışır. Doğrulama işlemi tarayıcı veya işletim sistemi tarafından gerçekleştirildiğinden kullanıcılar kandırılarak yanıltıcı bir sitede kimlik doğrulaması yapmaya ikna edilemez.
- Geçiş anahtarları, SMS gönderme ihtiyacını azaltarak kimlik doğrulamayı 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 { targetSdk(35) } }androidx.credentialssürümleri referansındaki en son kararlı sürümü kullanarak uygulamanızın veya modülünüzün build.gradle dosyasına aşağıdaki satırları ekleyin.androidx.credentials:credentials:1.6.0 androidx.credentials:credentials-play-services-auth:1.6.0
Yerleşik kimlik doğrulama yöntemleri
Kimlik Bilgisi Yöneticisi birleşik bir API olduğundan Wear OS için uygulama adımları diğer cihaz türleriyle aynıdır.
Geçiş anahtarları ve şifre desteğini uygulamaya başlamak için mobil talimatları kullanın.
Kimlik Bilgisi Yöneticisi'ne Google ile oturum açma desteği ekleme adımları mobil geliştirme için tasarlanmıştır ancak Wear OS'te de aynıdır.
Wear OS'te kimlik bilgileri oluşturulamadığından, mobil talimatlarda belirtilen kimlik bilgisi oluşturma yöntemlerini uygulamanız gerekmez.
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) ve Mobil Kimlik Doğrulama Jetonu Veri Katmanı Paylaşımı. Bu yöntemlerin Credential Manager API'de entegrasyon noktaları olmasa da kullanıcıların Credential Manager ekranını kapatması durumunda yedek olarak Credential Manager'ın kullanıcı deneyimi akışına dahil edilebilirler.
Kullanıcının Kimlik Bilgisi Yöneticisi ekranını kapatma işlemini yönetmek için GetCredential mantığınızın bir parçası olarak GetCredentialCancellationException yakalayın ve kendi özel kimlik doğrulama kullanıcı arayüzünüze gidin.
try { val getCredentialResponse: GetCredentialResponse = credentialManager.getCredential(activity, createGetCredentialRequest()) return authenticate(getCredentialResponse.credential) } catch (_: GetCredentialCancellationException) { navigateToSecondaryAuthentication() }
Özel kimlik doğrulama kullanıcı arayüzünüz, 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ı
Telefonun tamamlayıcı uygulaması, Giyilebilir Veri Katmanı API'sini 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 için genellikle kullanıcının herhangi bir işlem yapması gerekmez. Ancak kullanıcıya oturum açtığını bildirmeden kimlik doğrulama işlemi yapmaktan kaçının. Kullanıcıya, hesabının mobil cihazdan aktarıldığını gösteren ve kapatılabilen bir ekran aracılığıyla bilgi verebilirsiniz.
Önemli: Bu seçenek yalnızca ilgili mobil uygulama yüklüyken Android ile eşlenen saatlerde çalıştığından Wear OS uygulamanız en az bir kimlik doğrulama yöntemi daha sunmalıdır. İlgili mobil uygulamaya sahip olmayan veya Wear OS cihazı bir 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 putDataReq: PutDataRequest = PutDataMapRequest.create("/auth").run { dataMap.putString("token", token) asPutDataRequest() } val putDataTask: Task<DataItem> = Wearable.getDataClient(this).putDataItem(putDataReq)
Aşağıdaki örnekte gösterildiği gibi Wear OS uygulamasındaki veri değişikliği etkinliklerini dinleyin:
class AuthDataListenerService : WearableListenerService() { override fun onDataChanged(dataEvents: DataEventBuffer) { 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. handleSignInSequence(token) } } } } /** placeholder sign in handler. */ fun handleSignInSequence(token: String?) {} }
Giyilebilir 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 Kod Değişimi İçin Doğrulama Anahtarı (PKCE) ile Yetkilendirme Kodu Onayı
- RFC 8628'de tanımlandığı şekilde Cihaz Yetkilendirme İzni (DAG)
Kod Değişimi İçin Doğrulama Anahtarı (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 bir OAuthRequest nesnesi oluşturun. Bu nesne, jeton almak için OAuth uç noktanızın URL'sinden ve bir CodeChallenge nesnesinden oluşur.
Aşağıdaki kodda, kimlik doğrulama isteği oluşturma örneği gösterilmektedir:
val oauthRequest = OAuthRequest.Builder(context) .setAuthProviderUrl(uri) .setCodeChallenge(codeChallenge) .setClientId(CLIENT_ID) .build()
Kimlik doğrulama isteğini oluşturduktan sonra sendAuthorizationRequest() yöntemini kullanarak tamamlayıcı uygulamaya gönderin:
RemoteAuthClient.create(context).sendAuthorizationRequest( request = oauthRequest, executor = { command -> command?.run() }, clientCallback = object : RemoteAuthClient.Callback() { override fun onAuthorizationResponse( request: OAuthRequest, response: OAuthResponse ) { // Extract the token from the response, store it, and use it in requests. continuation.resume(parseCodeFromResponse(response)) } override fun onAuthorizationError(request: OAuthRequest, errorCode: Int) { // Handle Errors continuation.resume(Result.failure(IOException("Authorization failed"))) } } )
Bu istek, tamamlayıcı 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 rızasını 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ıtta bir yetkilendirme kodu bulunur. Kullanıcı isteği onaylamazsa yanıt bir hata mesajı içerir.
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, yanıt URL'sini doğrular ve yanıtı onAuthorizationResponse API'yi kullanarak Wear OS uygulamanıza iletir.
Saat uygulaması daha sonra yetkilendirme kodunu bir 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ıdan isteği onaylamasını veya reddetmesini ister.
Bu işlemi kolaylaştırmak için aşağıdaki örnekte gösterildiği gibi kullanıcının eşlenen mobil cihazında bir web sayfası açmak üzere RemoteActivityHelper kullanın:
// Request access from the authorization server and receive Device Authorization Response. private fun verifyDeviceAuthGrant(verificationUri: String) { RemoteActivityHelper(context).startRemoteActivity( Intent(Intent.ACTION_VIEW).apply { addCategory(Intent.CATEGORY_BROWSABLE) data = Uri.parse(verificationUri) }, null ) }
iOS uygulamanız varsa jetonu yetkilendirmek için tarayıcıyı kullanmak yerine uygulamanızda bu intent'i yakalamak için geçiş bağlantılarını kullanın.