HMS Account Kit

Cengizhan Özcan
Huawei Developers - Türkiye
7 min readJul 6, 2020

Günümüzde çoğu mobil uygulamada kullanıcıların karşısına ilk çıkan ekran kayıt ol ya da giriş yap butonlarını içeren giriş ekranıdır. Kullanıcı eğer uygulamayı ilk defa kullanıyor ve kayıt olmak istiyorsa karşısına bilgilerinin tek tek girilmesini istendiği bir form yapısı çıkar. Kullanıcıların karşılaştığı bu durum genellikle can sıkıcı olabilir ve yeni gelen kullanıcı daha uygulamanın ana ekranını dahi görmeden uygulamayı silebilir. Bu durumu ortadan kaldırmak ve kullanıcının tek bir buton ile kolay bir şekilde oturum açabileceği Huawei Mobil Servisinin sunduğu Account Kit karşımıza bir çözüm olarak çıkar.

  1. Huawei Account Kit Nedir?

Huawei Account Kit, kullanıcılara basit, güvenli ve hızlı bir şekilde e-mail ve şifre gerektirmeden kullanıcının sadece HUAWEI ID ile butonuna tıklayarak oturum açma ve yetkilendirme özelliği sağlayan bir mobil servistir.

2. Huawei Account Kit Özellikleri Nelerdir?

  • Uluslararası standartlara uygunluk (örn OAuth 2.0 ve Open ID Connect) ve iki kademeli yetkilendirme (şifreli yetkilendirme ve telefon numarası ile yetkilendirme)
  • HUAWEI ID ile Huawei ekosistemine farklı cihazlardan (örn. Mobil telefonlar, tabletler, akıllı giyilebilir cihazlar ve akıllı ekranlar) bağlanma özelliği
  • Dünya genelinde 190 ülkeden fazla 570 milyon Huawei cihazında 70 farklı dilde servis sağlaması

3. Huawei Account Kit Projeye Nasıl Entegre Edilir?

Huawei Account Kiti projeye entegre etmeden önce birkaç gereksinime sahip olunması gerekir. Bunlar;

3.1 AppGallery Connect’te Yeni Uygulama Oluşturma

Huawei Account Kiti uygulamada kullanabilmek için öncellikle AppGallery Connect Console’da oturum açıp My apps bölümüne tıklanması gerekir.

Açılan sayfada yeni bir uygulama oluşturalım.

Yeni uygulama oluşturma bölümünde zorunlu olan alanları dolduralım.

Başarılı bir şekilde uygulamamızı oluşturduktan sonra App Information bölümü otomatik olarak gösterilecektir. Bu bölümde AppGallery sistemi tarafından uygulamamıza atanan App ID ve App Secret değerlerini görebiliriz.

Develop bölümüne tıkladığımız zaman karşımıza uygulamamızda kullandığımız package name için iki seçenek çıkar. Manuel olarak package name’mizi girelim ve ‘Save’ butonuna tıklayalım.

Açılan sayfada agconnect-services.json dosyasını tıklayarak indirelim ve Android Studio üzerinden app kök dizinine kopyalayalım.

Uygulamamızda SHA256 parmak izini oluşturmak için Android Studio üzerinden bir imza dosyası oluşturalım. Android Studio üzerinden Build bölümünden Generate Signed Bundle / APK ya tıklayalım.

Açılan popup üzerinden APK’ yı seçelim ve Next butonuna tıklayalım.

Yeni bir imza dosyası oluşturmak için Create New butonuna tıklayalım.

JKS dosyasını oluşturmak için tüm alanları dolduralım.

Başarılı bir şekilde imza dosyasını oluşturduktan sonra Generate Signed Bundle or APK sayfası otomatik olarak karşımıza çıkar. Next butonuna tıklayalım.

Açılan ekranda V1 (Jar Signature) ve V2 (Full APK Signature) seçeneklerini seçelim. Finish butonuna tıklayalım.

Başarılı bir şekilde imzalı bir APK dosyası oluşturduk. Şimdi İmzalı Sertifika Parmak İzini oluşturalım.

Terminal açalım.

Oluşturduğumuz JKS dosyasının bulduğu dizine gidelim. Dizinin içinde

keytool -list -v -keystore accountkitexample.jks

terminal komutunu çalıştıralım ve istenilen şifreye JKS dosyasını oluştururken kullandığımız şifreyi girelim.

Oluşturulan SHA256 parmak izini kopyalayalım ve AppGallery üzerinden General information bölümünden SHA-256 certificate fingerprint alanına kopyalayalım ve kayıt edelim.

App dizininde build.gradle dosyasına oluşturduğumuz imza dosyasının bilgilerini ekleyelim.

Son olarak AppGallery de Manage APIs bölümünde Account Kit imizi aktive edelim.

Şimdi projemizi açalım ve root dizinindeki build.gradle dosyasını açalım ve buildscript ->repositories bölümüne HMS Core SDK için Maven repository adresini ekleyelim.

App dizinindeki build.gradle dosyasına agconnect plugin ve implementation bağımlılıklarını ekleyelim.

Projemizi senkronize edelim. Bir hata oluşursa ağ bağlantılarımızı veya build.gradle dosyalarını tekrar gözden geçirelim. Bu adımları tamamladıktan sonra başarılı bir şekilde HMS Account Kit servisini uygulamamıza eklemiş oluyoruz. Şimdi eklediğimiz Account Kit’i uygulamamıza entegre edelim.

Account Kit iki farklı yöntem ile kullanabiliriz. Bunlardan birincisi ID Token yöntemi ile oturum açma, ikincisi ise Yetkilendirme Kodu (Authorization Code) ile oturum açmadır. İlk olarak ID Token ile oturum açma yöntemini ele alalım.

ID Token Yöntemi

Account Kit OpenID Connect protokolünü kullanarak kullanıcının kimlik bilgilerine ID Token üzerinden erişim sağlayabilir. ID Token Base64 kodlu bir imza dizisidir.

ID Token Süreci

  • Kullanıcı Huawei ID ile Giriş Yap butonuna tıklar ve oturum açmak için Huawei ID ile istekte bulunur.
  • HMS Core SDK kullanıcıya oturum açma ve yetkilendirme sayfasını gösterir ve kullanıcıya yetkilendirme kapsamına bağlı olarak kullanıcıya yetkilendirilecek içeriğin bilgisini açıkça belirtir.
  • Kullanıcı uygulamaya söz konusu içeriğin erişilmesi için yetkilendirdikten sonra HMS Core SDK ID Token bilgisini uygulamaya geri döndürür.
  • Uygulama Huawei ID sunucusundan gelen ID Token bilgisini doğrular.

ID Token Yönteminin Uygulanması

  1. Kullanıcıya Huawei ID ile giriş yapabilecekleri buton gösterilir. Bu buton Huawei İcon Özelliklerine uygun olması gerekir.

2. HuaweiIDAuthParamsHelper class’ının setIdToken methodu çağırılır.

3. HuaweiIdAuthService objesini initialize etmek için HuaweiIdAuthManager’ ın getService methodu çağrılır.

4. HuaweiIdAuthService’ in getSignIntent method çağrılır ve kullanıcıya Huawei ID oturum açma ve yetkilendirme ekranı gösterilir.

5. Kullanıcı açılan sayfada başarılı bir şekilde oturum açıp yetkilendirildikten sonra onActivityResult’da kullanıcının bilgilerine başarılı bir şekilde erişim sağlayabiliriz.

Yetkilendirme Kod (Authorization Code) Yöntemi

Huawei ID kullanıcının Authroization Code ile giriş yapmasını destekler fakat yalnızca geliştiricilerin çalışan kendi serverına ihtiyacı vardır.

Authorization Code Süreci

  • Kullanıcı Huawei ID ile Giriş Yap butonuna tıklar ve oturum açmak için Huawei ID ile istekte bulunur.
  • HMS Core SDK kullanıcıya oturum açma ve yetkilendirme sayfasını gösterir ve kullanıcıya yetkilendirme kapsamına bağlı olarak kullanıcıya yetkilendirilecek içeriğin bilgisini açıkça belirtir.
  • Kullanıcı uygulamaya söz konusu içeriğin erişilmesi için yetkilendirdikten sonra HMS Core SDK Authorization Code bilgisini uygulamaya geri döndürür.
  • Huawei ID server tarafından gönderilen Authorization Code’ a göre uygulama Access Token, Refresh Token ve ID Token bilgilerini elde eder.
  • Eğer ID Token kullanım süresi doldu ise, Refresh Token ile Access Token veya ID Token tekrardan ele edilebilir.

Authorization Code Yönteminin Uygulanması

  1. Kullanıcıya Huawei ID ile giriş yapabilecekleri buton gösterilir. Bu buton Huawei İcon Özelliklerine uygun olması gerekir.
  2. Yetkilendirme isteği atabilmek için HuaweiIdAuthParamsHelper classının setAuthorizationCode methodu çağrılır.

3. HuaweiIdAuthService objesini initialize edebilmek için HuaweiIdAuthManager’ın getService methodu çağırılır.

4. HuaweiIdAuthService’ in getSignIntent method çağrılır ve kullanıcıya Huawei ID oturum açma ve yetkilendirme ekranı gösterilir.

5. Kullanıcı açılan sayfada başarılı bir şekilde oturum açıp yetkilendirildikten sonra onActivityResult’da kullanıcının bilgilerine başarılı bir şekilde erişim sağlayabiliriz.

6. Uygulama elde edilen Authorization Code’ u sunucusuna bildirir ve bu kod ile geliştiricinin sunucusunda /oauth/v3/token API’ya istek atılarak Huawei ID sunucusundan ID Token, Access Token ve Refresh Token bilgileri elde edilir.

İstek Örneği:

POST /oauth2/v3/token HTTP/1.1Host: oauth-login.cloud.huawei.comContent-Type: application/x-www-form-urlencodedgrant_type=authorization_code&code=ANXxSNjwQDugOnqeikRMu2bKaXCdlLxn&client_id=12345&code_verifier=123444444dfd4sadfsdwew321454567587658776t896fdfgdscvvbfxdgfdgfdsfasdfsdgd233&redirect_uri=hms%3A%2F%2Fredirect_uri&need_open_uid=true

İstek Sonucu Gelen Cevap Örneği:

HTTP/1.1 200 OKContent-Type: application/json;charset=UTF-8Cache-Control: no-storePragma: no-cache{"access_token": "CFyJ21sNODl16eV9y2vu3CwQk9DBr32BkOcxxgAd7MZUR5th1giyTk5\/kA+QDAyxou+\/5U2zzBRcf3qgLkkFdtbbC+mM3zFV7xj7CCEMHc5Tw92al0Y=","refresh_token": "CF13G0sRaGybtYt7SIyeUILNORtTFwMgz4ao5C7j7vtgLPt6ogmXKjdI8RS\/YlyS71z4DyP6kEMnOrRlmNK0KhdOUNWd+qVLLRsEEHkqRIKpuAkPvL8=","expires_in": 3600,"id_token": "eyJhbGciOiJSUzI1NiIsImtpZCI6IjExOGRmMjU0YjgzNzE4OWQxYmMyYmU5NjUwYTgyMTEyYzAwZGY1YTQiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL2FjY291bnRzLmdvb2dsZS5jb20iLCJhenAiOiI3ODI0NTY2Njc4OTgtc2M0MzE3Y2l0NGEwMjB0NzdrbGdsbWo1ZjA4YWtnMWIuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJhdWQiOiI3ODI0NTY2Njc4OTgtN2NkNGJpYWRkaGVwNGc4cnZic2VlOGtwcDA5Zm1hNzIuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJzdWIiOiIxMDE3MTIxMzkwMzgwNDE2MDc0MTQiLCJlbWFpbCI6Inh1ZXpoZW5odWF0anVAc2luYS5jb20iLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwicGljdHVyZSI6Imh0dHBzOi8vbGg1Lmdvb2dsZXVzZXJjb250ZW50LmNvbS8tMm9lTTllT09zNTAvQUFBQUFBQUFBQUkvQUFBQUFBQUFBQkkvMVpOSC0xdmxxc3cvczk2LWMvcGhvdG8uanBnIiwiaWF0IjoxNTYxNDUxMTUyLCJleHAiOjE1NjE0NTQ3NTJ9.Eo9IHMkid596jvt1YYzNsRtDq9c9K9dbougkU41Noh7TXNiko86_RuWwHID6k1kDg398AwC3wwH-t2hLcUjgrXPNd9XYU96Jp4-UxdDszP6ywEJgvvBCyTHzsi2auvKt_MnfSrs3qOKfh7noJvXq8AY-Hi3vqSUks5kGqbZKVzCHhBDO3RD9Fs9YHsB6w0XVKZojPOBDaAT_TiijoChn-Q-e8NbSGUx52OgeH-Nw5lOj6JVb_7fb6ucWRzlhiQuzFjklevLVw2pjw1MxKbl1vfRp0X699uZBVjgl9hj1L7LSDObuPzLiXF7ojji5JKYC6zIwAtZQUZ_VUmSk01GDLQ","scope": "openid profile email","token_type": "Bearer","open_id": "MDFAMzAwMDUxODgzQDNiaODc3NTkzNGRlNmNiaMzBlNmQ2YjAzNTgzNTJhMDNjQDkwMGQwYTY1NmE1NmNlNTU1M2EzMWY3Y2VmZWQwOGJlYTRkZTU4ZjM5YWFmOWNhNTk0ODEyZA",}

Elde edilen Access Token’ın kısa bir kullanım süresi vardır. (Şuanda 60 dakika) Access Token kullanım süresi dolduğunda ya da dolmak üzereyken, yeni Access Token elde edebilmek için Huawei ID sunucusunun /oauth2/v3/token API’sine Refresh Token ile birlikte istek atılabilir.

İstek Örneği:

POST /oauth2/v3/token HTTP/1.1Host: oauth-login.cloud.huawei.comContent-Type: application/x-www-form-urlencodedgrant_type=refresh_token&client_id=12345&client_secret=bKaZ0VE3EYrXaXCdCe3d2k9few&refresh_toekn=CF2Mm03n0aos9iZZ8nIhfyDtoXy74CXeBi50gVVhMpB0IUzlv9ZwizEvTBhVoF820ZPim0JwNR9j2p1qgEQWnIVYZRlp4T6ezMgekUnsHBkvNev5rd2MdfQMLP

İstek Sonucu Gelen Cevap Örneği:

HTTP/1.1 200 OKContent-Type: application/json;charset=UTF-8Cache-Control: no-storePragma: no-cache{"access_token": "CFyJ4J\/l6wuwcFqYOJG4maq2ca8RAV+g0i+mel6qCV5lvqH0PYtW0+BNwfHWg0AqMnW6ZdBvUgs7ijkxMFh1xVP\/B+vQXz3PWsivkKCuL78XtbLt7vs=","id_token": "eyJhbGciOiJSUzI1NiIsImtpZCI6IjExOGRmMjU0YjgzNzE4OWQxYmMyYmU5NjUwYTgyMTEyYzAwZGY1YTQiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL2FjY291bnRzLmdvb2dsZS5jb20iLCJhenAiOiI3ODI0NTY2Njc4OTgtc2M0MzE3Y2l0NGEwMjB0NzdrbGdsbWo1ZjA4YWtnMWIuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJhdWQiOiI3ODI0NTY2Njc4OTgtN2NkNGJpYWRkaGVwNGc4cnZic2VlOGtwcDA5Zm1hNzIuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJzdWIiOiIxMDE3MTIxMzkwMzgwNDE2MDc0MTQiLCJlbWFpbCI6Inh1ZXpoZW5odWF0anVAc2luYS5jb20iLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwicGljdHVyZSI6Imh0dHBzOi8vbGg1Lmdvb2dsZXVzZXJjb250ZW50LmNvbS8tMm9lTTllT09zNTAvQUFBQUFBQUFBQUkvQUFBQUFBQUFBQkkvMVpOSC0xdmxxc3cvczk2LWMvcGhvdG8uanBnIiwiaWF0IjoxNTYxNDUxMTUyLCJleHAiOjE1NjE0NTQ3NTJ9.Eo9IHMkid596jvt1YYzNsRtDq9c9K9dbougkU41Noh7TXNiko86_RuWwHID6k1kDg398AwC3wwH-t2hLcUjgrXPNd9XYU96Jp4-UxdDszP6ywEJgvvBCyTHzsi2auvKt_MnfSrs3qOKfh7noJvXq8AY-Hi3vqSUks5kGqbZKVzCHhBDO3RD9Fs9YHsB6w0XVKZojPOBDaAT_TiijoChn-Q-e8NbSGUx52OgeH-Nw5lOj6JVb_7fb6ucWRzlhiQuzFjklevLVw2pjw1MxKbl1vfRp0X699uZBVjgl9hj1L7LSDObuPzLiXF7ojji5JKYC6zIwAtZQUZ_VUmSk01GDLQ","expires_in": 3600,"scope": "openid profile email","token_type": "Bearer"}

Başarılı bir şekilde Account Kit’ i kullanarak iki farklı yöntemle kullanıcılarımıza oturum açtırıp, yetkilendirebildik. Şimdi kullanıcının oturum kapatması için izlenen yönteme bakalım.

Huawei ID ile Oturum Kapatma Süreci

1. Kullanıcı başarılı bir şekilde oturum açtığı uygulamada oturum kapatma butonuna tıklar

2. Uygulama HuaweiIdAuthService.signOut methodunu çağırarak Huawei Account SDK’ den kullanıcının oturum kapatmasını ister.

3. Huawei Account SDK kullanıcının Huawei ID oturum açma bilgisini siler ve oturum kapatma sonucunu uygulamaya bildirir.

Huawei ID ile Oturum Kapatmanın Uygulanması

  1. Huawei ID ile oturum açılırken kullanılan HuaweiAuthService instance’sının signOut methodu çağrılır.

2. Oturum kapatma işlemini tamamladıktan sonra gelen sonuç üzerinden işlem devam edilir.

Huawei Account Kit’in nasıl entegre edip, kullanılacağını anlatmaya çalıştım. Umarım faydalı olur.

Teşekkürler

Referanslar

--

--