Giyilebilir cihazlarda kimlik doğrulama

Wear OS uygulamaları, tamamlayıcı uygulama olmadan bağımsız olarak çalışabilir. Bu nedenle, Wear OS uygulamalarının internetten verilere erişirken kimlik doğrulamasını kendi başına yönetmesi gerekir. Ancak saatin küçük ekran boyutu ve daha düşük giriş yetenekleri, Wear OS uygulamalarının kullanabileceği kimlik doğrulama seçeneklerini sınırlandırır.

Bu kılavuzda, Wear OS uygulamaları için önerilen kimlik doğrulama yöntemleri ve bu yöntemlerin bir uygulamanın kullanım alanına uygun olmadığı durumlarda kullanabileceğiniz alternatifler ele alınmaktadır.

İyi bir oturum açma deneyimi tasarlama hakkında daha fazla bilgi edinmek için Oturum açma kullanıcı deneyimi rehberini görüntüleyin.

Misafir modu

Tüm işlevler için kimlik doğrulaması gerekmez. Bunun yerine, oturum açmaya gerek kalmadan kullanıcılara mümkün olduğunca çok sayıda özellik sağlayın.

Kullanıcılar, mobil uygulamayı kullanmadan Wear uygulamanızı keşfedip yükleyebilir. Bu nedenle, hesapları olmayabilir ve hangi özellikleri sunduğunu bilemeyebilirler. Misafir modu işlevinin, uygulamanızın özelliklerini doğru bir şekilde yansıttığından emin olun.

Önerilen kimlik doğrulama yöntemleri

Bağımsız Wear OS uygulamalarının kullanıcı kimlik doğrulama bilgileri almasını sağlamak için aşağıdaki kimlik doğrulama yöntemlerini kullanın.

Jetonları veri katmanını kullanarak iletme

Telefon tamamlayıcı uygulaması, Giyilebilir Cihaz Veri Katmanı'nı kullanarak kimlik doğrulama verilerini Wear OS uygulamasına güvenli bir şekilde aktarabilir. Kimlik bilgilerini ileti veya veri öğeleri 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. Hesabı mobil cihazdan aktarılmakta olduğunu gösteren basit, kapatılabilir bir ekran kullanarak kullanıcıyı bilgilendirebilirsiniz.

Önemli: Wear uygulamanız en az bir kimlik doğrulama yöntemi daha sunmalıdır, çünkü bu seçenek Android ile eşlenmiş kol saatlerinde yalnızca ilgili mobil uygulama yüklü olduğunda çalışır. İlgili mobil uygulamaya sahip olmayan veya Wear OS cihazları 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, jetonları mobil uygulamadaki veri katmanını kullanarak iletin:

val token = "..." // Auth token to transmit to the wearable 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, saat 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 interstitial screen to notify the user they are 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 konusuna bakın.

OAuth 2.0'ı kullan

Wear OS iki OAuth 2.0 tabanlı akışı destekler. Bunlar, aşağıdaki bölümlerde açıklanmıştır:

  • RFC 7636'da tanımlandığı şekilde Kod Değişimi İçin Kanıt Anahtarı (PKCE) ile Yetkilendirme Kodu Verme
  • RFC 8628'de tanımlandığı şekliyle Cihaz Yetkisi Verme

Not: Saat ambiyans moduna geçtiğinde uygulamanızın kapanmadığından emin olmak için etkinlik kimlik doğrulamasında AmbientModeSupport.attach kullanarak her zaman açık seçeneğini etkinleştirin. Ambiyans Modu'ndaki en iyi uygulamalar hakkında daha fazla bilgi için Uygulamanızı Wear'da görünür tutma konusuna bakın.

Kod Değişimi için Kanıt Anahtarı (PKCE)

PKCE'yi etkili bir şekilde kullanmak için RemoteAuthClient kullanın.

Wear OS uygulamanızdan bir OAuth sağlayıcısına kimlik doğrulama isteği gerçekleştirmek için OAuthRequest nesnesi oluşturun. Bu nesne, jeton almak için kullanılan OAuth uç noktanızın URL'sinden ve bir CodeChallenge nesnesinden oluşur. Aşağıdaki kod, kimlik doğrulama isteği oluşturmaya ilişkin bir örneği gösterir:

val request = OAuthRequest.Builder(this.applicationContext)
    .setAuthProviderUrl(Uri.parse("https://...."))
    .setClientId(clientId)
    .setCodeChallenge(codeChallenge)
    .build()

Yetkilendirme 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 error
        }
    }
)

Bu istek, tamamlayıcı uygulamaya yapılan bir çağrıyı tetikler ve bu çağrı da kullanıcının cep telefonundaki bir web tarayıcısında bir yetkilendirme kullanıcı arayüzü sunar. 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önlendirme yapar. 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 üçüncü taraf saat uygulamasına iletir.

Böylece saat uygulaması, yetkilendirme kodunu bir erişim jetonuyla değiştirebilir.

Not: OAuthRequest oluşturulduktan sonra yönlendirme URL'nizi redirectUrl adresine giderek bulabilirsiniz.

Cihaz Yetki Verme

Cihaz Yetkilendirmesi İzni kullanırken kullanıcı, doğrulama URI'sını başka bir cihazda açar. Ardından, yetkilendirme sunucusu isteği onaylamasını veya reddetmesini ister.

Bu işlemi kolaylaştırmak için, aşağıdaki örnekte gösterildiği gibi, bir RemoteActivityHelper kullanarak kullanıcının eşlenen mobil cihazında bir web sayfası açı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 yetkilendirmesi için tarayıcıya güvenmek yerine, uygulamanızda bu amaca müdahale etmek için evrensel bağlantılar kullanın.

Diğer kimlik doğrulama yöntemleri

Wear OS, aşağıdaki bölümlerde açıklanan ek oturum açma yöntemlerini destekler.

Google ile Oturum Açma

Google ile Oturum Açma, kullanıcının mevcut Google Hesabı ile oturum açmasına olanak tanır. En iyi kullanıcı deneyimini sunar ve özellikle avuç içi uygulamalarınızda zaten uyguluyorsanız kolayca desteklenebilir.

Daha önce açıklanan önerilen kimlik doğrulama yöntemlerinden sonra, iOS'te de iyi çalıştığı için tercih edilen ikinci çözüm Google ile Oturum Açma'dır. Aşağıdaki bölümde, temel bir Google ile Oturum Açma entegrasyonunun nasıl tamamlanacağı açıklanmaktadır.

Ön koşullar

Google ile Oturum Açma özelliğini Wear OS uygulamanıza entegre etmeye başlamadan önce bir Google API Konsolu projesi yapılandırmanız ve Android Studio projenizi oluşturmanız gerekir. Daha fazla bilgi için Google ile Oturum Açma'yı Android Uygulamanıza Entegre Etmeye Başlayın bölümüne göz atın.

Google ile Oturum Açma özelliğini arka uç sunucusuyla iletişim kuran bir uygulama veya siteyle kullanırsanız iki ek ön koşul daha gerekir:
  • Arka uç sunucunuz için bir OAuth 2.0 web uygulaması istemci kimliği oluşturun. Bu istemci kimliği, uygulamanızın istemci kimliğinden farklıdır. Daha fazla bilgi için Sunucu Tarafı Erişimi Etkinleştirme sayfasına bakın.
  • Oturum açmış olan kullanıcıyı sunucuda güvenli bir şekilde tanımlamak için kullanıcının kimlik jetonunu HTTPS ile gönderin. Arka uç sunucuda kullanıcı kimliğinizi nasıl doğrulayacağınızı öğrenmek için Arka uç sunucusuyla kimlik doğrulama bölümüne bakın.

Google ile Oturum Açma özelliğini uygulamanıza entegre edin

Google ile Oturum Açma özelliğini Wear OS uygulamanıza entegre etmek için aşağıdaki bölümlerde ayrıntılı olarak açıklanan aşağıdaki adımları gözden geçirin ve uygulayın:

  1. Google ile Oturum Açma'yı yapılandırın.
  2. Google ile Oturum Açma düğmesi ekleyin.
  3. Oturum açma düğmesine dokunduğunuzda oturum açma akışını başlatın.

Google ile Oturum Açma özelliğini yapılandırma ve GoogleApiClient nesnesini derleme

Oturum açma etkinliğinizin onCreate() yönteminde, Google ile Oturum Açma özelliğini, uygulamanızın gerektirdiği kullanıcı verilerini isteyecek şekilde yapılandırın. Ardından, Google Sign-In API'ye ve belirttiğiniz seçeneklere erişimi olan bir GoogleApiClient nesnesi oluşturun. Bu adımlar aşağıdaki örnekte gösterilmiştir:

  public class MyNewActivity extends AppCompatActivity {

    private static final int RC_SIGN_IN = 9001;

    private GoogleSignInClient mSignInClient;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        GoogleSignInOptions options =
               new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                        .build();

        mSignInClient = GoogleSignIn.getClient(this, options);
    }
  }

Uygulamanıza Google ile Oturum Açma düğmesi ekleyin

Google ile Oturum Açma düğmesi eklemek için aşağıdaki adımları uygulayın:
  1. Uygulamanızın düzenine SignInButton öğesini ekleyin:
  2.  <com.google.android.gms.common.SignInButton
     android:id="@+id/sign_in_button"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content" />
    
  3. Dokunulduğunda kullanıcının oturum açmasını sağlamak için uygulamanızın onCreate() yönteminde düğmenizin OnClickListener özelliğini kaydedin:
  4. Kotlin

    findViewById<View>(R.id.sign_in_button).setOnClickListener(this)
    

    Java

    findViewById(R.id.sign_in_button).setOnClickListener(this);
    

Oturum açma amacı oluşturma ve oturum açma akışını başlatma

getSignInIntent() yöntemiyle bir oturum açma amacı oluşturarak onCLick() yönteminizde oturum açma düğmesi dokunma işlemlerini işleyin. Ardından, niyeti startActivityForResult() yöntemiyle başlatın.

  Intent intent = mSignInClient.getSignInIntent();
  startActivityForResult(intent, RC_SIGN_IN);

The user is prompted to select a Google account to sign in with. If you requested scopes beyond profile, email, and open ID, the user is also prompted to grant access to those resources.

Finally, in the activity's onActivityResult method, retrieve the sign-in result with getSignInResultFromIntent. After you retrieve the sign-in result, you can check whether the sign-in succeeded using the isSuccess method. If sign-in succeeds, you can call the getSignInAccount method to get a GoogleSignInAccount object that contains information about the signed-in user, such as the user's name. These steps are shown in the following example:

Kotlin

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {
    super.onActivityResult(requestCode, resultCode, data)

    // Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...).
    if (requestCode == RC_SIGN_IN) {
        Auth.GoogleSignInApi.getSignInResultFromIntent(data)?.apply {
            if (isSuccess) {
                // Get account information.
                fullName = signInAccount?.displayName
                mGivenName = signInAccount?.givenName
                mFamilyName = signInAccount?.familyName
                mEmail = signInAccount?.email
            }
        }
    }
}

Java

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    // Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...).
    if (requestCode == RC_SIGN_IN) {
        GoogleSignInResult signInResult = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
        if (signInResult.isSuccess()) {
            GoogleSignInAccount acct = signInResult.getSignInAccount();

            // Get account information.
            fullName = acct.getDisplayName();
            givenName = acct.getGivenName();
            familyName = acct.getFamilyName();
            email = acct.getEmail();
        }
    }
}

Google ile Oturum Açma özelliğini kullanan örnek bir uygulamayı görmek için GitHub'daki Horologist Google ile Oturum Açma Örneği'ne göz atın.

Özel kod kimlik doğrulaması

Önceden açıklanan kimlik doğrulama yöntemlerine alternatif olarak, kullanıcının cep telefonu veya tablet gibi başka bir cihazdan kimlik doğrulaması yapmasını isteyebilir ve kısa ömürlü bir sayısal kod elde edebilirsiniz. Kullanıcı, daha sonra kimliğini doğrulamak için kodu Wear OS cihazına girer ve bir yetkilendirme jetonu alır.

Bu kimlik doğrulama akışı, uygulamanızın giriş modülünü kullanır veya üçüncü taraf kimlik doğrulama sağlayıcısı oturum açma yöntemini manuel olarak uygulamanızın koduna entegre eder. Bu kimlik doğrulama yöntemi, manuel işlem ve daha güvenli hale getirmek için ek çalışmalar gerektirse de bağımsız Wear OS uygulamalarınızda kimlik doğrulama işlemini daha erken yapmanız gerekiyorsa bu yöntemi kullanabilirsiniz.

Bu kurulumun kimlik doğrulama akışı şu şekilde çalışır:

  1. Kullanıcı, Wear OS uygulamasında yetkilendirme gerektiren bir işlem yapıyor.
  2. Wear OS uygulaması, kullanıcıya bir kimlik doğrulama ekranı sunar ve kullanıcıya belirtilen URL'den bir kod girmesi talimatını verir.
  3. Kullanıcı bir mobil cihaza, tablete veya PC'ye geçer, ardından bir tarayıcı başlatır, Wear OS uygulamasında belirtilen URL'ye gider ve giriş yapar.
  4. Kullanıcı, Wear OS'te yerleşik klavyeyi kullanarak Wear OS uygulama kimlik doğrulama ekranına girilebilen kısa ömürlü bir sayısal kod alır:

  5. Bu aşamadan sonra, girilen kodu bu kişinin doğru kullanıcı olduğunu kanıt olarak kullanabilir ve bundan sonraki kimliği doğrulanmış çağrılar için kodu Wear OS cihazda saklanıp güvenliği sağlanmış bir kimlik doğrulama jetonuyla değiştirebilirsiniz.

Not: Kullanıcının oluşturduğu kod tamamen sayısal olmalı ve alfabetik karakterler içermemelidir.

Bu yetkilendirme akışı aşağıdaki grafikte gösterilmektedir: