Android | AppGallery Connect Auth Service (Huawei ID ve Anonim Kullanıcı)
Bu yazımda AppGallery Connect Authentication Service’ten bahsedeceğim.
AppGallery Connect Authentication Service, uygulamalarımızın kullanıcı kimliğini doğrulaması için hızlı ve güvenli bir kullanıcı kimlik doğrulama sistemi oluşturmanıza yardımcı olur. Ve birden çok üçüncü taraf kimlik doğrulama yöntemini desteklemektedir. Desteklediği yöntemleri aşağıda görebilirsiniz.
- HUAWEI ID
- HUAWEI Game Service account
- WeChat account
- QQ account
- Weibo account
- Email account
- Google account*
- Google Play Game account*
- Facebook account*
- Twitter account*
Yıldız (*) ile işaretlenmiş hesaplar yalnızca Çin dışındaki uygulamalarda desteklenmektedir. Bu kimlik doğrulama modlarını, seçtiğiniz veri depolama konumu Almanya, Singapur veya Rusya’da olduğunda kullanabilirsiniz.
Öncelikle bir android projeyi oluşturup, HMS Core’u projemize entegre ediyoruz. Eğer HMS CORE entegrasyonu hakkında yeterli bilgiye sahip değilseniz, bu yazıyı okumanızı tavsiye ederim. HMS Core integration
HMS Core entegrasyonunu tamamladıktan sonra, örnek projemize başlayabiliriz. Bu yazıda HUAWEI ID ve Anonymous Account ile giriş sağlayıp AppGallery Connect Auth Service’i kullanacağız.
HUAWEI ID
Huawei ID ile giriş(login) yapmak için HMS Account kitini kullanmamız gerekiyor.
Account kit için,
- JDK 1.8 ya da sonrası,
- SDK Platform 26 ya da sonrası,
- Gradle 4.6 ya da yeni versiyonu olması gerekmektedir.
Projemizde Huawei ID ile giriş yapabilmek için, account kiti projemizde aktif hale getirmemiz gerekiyor.
Aktivasyon işlemi için Huawei Developer AppGallery Connect sitesine girip, projemizi seçelim. (Develop > Project Setting > Manage APIs) Ve Account kiti aktif hale getirelim.
Ve daha sonrasında Android Studiodan Account Kitin metodlarına erişebilmek için app dizinindeki build.gradle’a account kit sdk ini ekleyelim.
dependencies {
implementation 'com.huawei.hms:hwid:4.0.0.300'
}
“Sync Now” diyerek gradle işlemlerini tamamlayalım.
Projemizde iki adet layout olması gerekiyor. İlk layout giriş sayfası, ikinci layout uygulamamızın anasayfası olacak şekildedir. Giriş sayfasına 1 adet Huawei ID ile giriş yapmak için buton ekleyelim. Ve bu butonun onClickListener ını yazalım.
findViewById(R.id.btn_huawei).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
HuaweiIdAuthParams mHuaweiIdAuthParams = new HuaweiIdAuthParamsHelper(HuaweiIdAuthParams.DEFAULT_AUTH_REQUEST_PARAM).setAccessToken().createParams();
HuaweiIdAuthService mHuaweiIdAuthService = HuaweiIdAuthManager.getService(MainActivity.this, mHuaweiIdAuthParams);
startActivityForResult(mHuaweiIdAuthService.getSignInIntent(), 1001);
}
});
Burada HuaweiIdAuthParams kullanarak HuaweiIdAuthService yaratıyoruz. Ve HuaweiIdAuthService objesinden de getSingInIntent() metodunu çalıştırarak, giriş sayfası için intent çağırıyoruz. Ve bu intenti startActivityForResult metodu ile başlatıyoruz. Açılan sayfa şu şekildedir.
Bu sayfanın sonucunu yakalamak için onActivityResult metodunu oluşturuyoruz. Ve gelen sonucu ayrıştırıp, işlemin durumuna bakıyoruz. Böylece Huawei ID ile kimlik doğrulama işlemi bitmiş oluyor. Burada kullanıcı hakkındaki bazı bilgilere (kullanıcı ismi, avatar url vs.) ve accessToken a ulaşıyoruz.
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1001) {
Task<AuthHuaweiId> authHuaweiIdTask = HuaweiIdAuthManager.parseAuthResultFromIntent(data);
if (authHuaweiIdTask.isSuccessful()) {
AuthHuaweiId huaweiAccount = authHuaweiIdTask.getResult();
Log.i(TAG, "signIn success Access Token = " + huaweiAccount.getAccessToken());
Log.i(TAG, "signIn success User Name = " + huaweiAccount.getDisplayName());
} else {
Log.i(TAG, "signIn failed: " + ((ApiException) authHuaweiIdTask.getException()).getStatusCode());
}
}
}
Eğer accessTokena ulaşabiliyorsanız, bu örnek uygulama için account kit kısmını bitirmiş oluyoruz. Bu işlemden sonra accessTokenı AppGallery Connecte bildirmemiz gerekiyor.
Auth Service
Huawei Developer AppGallery Connect sitesine girip, projemizi seçelim.(Develop > Build > Auth Service ) Ve Auth Service i aktif hale getirelim.
Auth Service i aktif hale getirdikten sonra, auth service in desteklediği modları görüyoruz. Buradan HUAWEI Account ve Anonymous Account u Aktif hale getirelim.
Huawei Account u enable ederken bir pop-up açılıyor. Buraya appnizin APP ID ve APP Secret keyini girmeniz gerekmektedir. Bu bilgilere Develop > Project Setting > Convention kısmına giderek bulabilirsiniz.
Ve daha sonrasında Android Studiodan Auth Service in metodlarına erişebilmek için app dizinindeki build.gradle’a Auth Service sdk ini ekleyelim.
dependencies {
implementation 'com.huawei.agconnect:agconnect-auth:1.3.1.300'
}
Auth Service in entegrasyonu bitirdikten sonra, artık Account Kit ile ulaştığımız accessTokenı AppGallery Connect e bildirebiliriz.
private void transmitTokenIntoAppGalleryConnect(String accessToken) {
AGConnectAuthCredential credential = HwIdAuthProvider.credentialWithToken(accessToken);
AGConnectAuth.getInstance().signIn(credential).addOnSuccessListener(new OnSuccessListener<SignInResult>() {
@Override
public void onSuccess(SignInResult signInResult) {
startActivity(new Intent(MainActivity.this, HomePageActivity.class));
finish();
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(Exception e) {
Log.d(TAG, "Error " + e);
}
});
}
Yukarıdaki metod ile accessTokenı AppGallery Connecte bildiriyoruz. Eğer işlem başarılı olursa kullanıcıyı HomePage layoutuna yönlediriyoruz. AppGallery Connecte tokenı gönderme işlemini AGConnectAuth classı ile yapıyoruz.
Huawei Developer sitesinden Auth Service kısmına gelerek giriş yapmış kullanıcıları görebilir ve değişiklikler yapabilirsiniz.
Uygulamanın oturum açma ekranında AppGallery Connect ile kullanıcının bilgilerini alıp, oturup açıp açmadığını kontrol etmeliyiz. Kullanıcı oturum açtıysa direkt HomePage e yönlendirelim. Kullanıcının bilgilerini almak için getCurrentUser metodu kullanılır.
AGConnectAuth.getInstance().getCurrentUser()
protected void onStart() {
super.onStart();
if (AGConnectAuth.getInstance().getCurrentUser() != null) {
startActivity(new Intent(MainActivity.this, HomePageActivity.class));
finish();
}
}
HomePage sayfasında kullanıcı ile ilgili bilgiler göstermek için AGConnectAuth classı üzerinden getCurrentUser() metodu ile verilere ulaşabilirsiniz.
AGConnectAuth.getInstance().getDisplayName();
AGConnectAuth.getInstance().getPhotoUrl();
AGConnectAuth.getInstance().getUid();
Oturumu kapatmak ve önbelleğe alınmış bilgileri silmek için AGConnectAuth classı ile signOut() metodunu kullanmalıyız.
findViewById(R.id.btn_logout).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
AGConnectAuth.getInstance().signOut();
startActivity(new Intent(HomePageActivity.this, MainActivity.class));
finish();
}
});
Geçerli kullanıcı bilgilerini ve önbelleğe alınmış bilgileri AppGallery Connect sunucusundan silmek için AGConnectAuth classı ile deleteUser() metodunu kullanmalıyız.
findViewById(R.id.btn_delete).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
auth.deleteUser();
startActivity(new Intent(HomePageActivity.this, MainActivity.class));
finish();
}
});
Anonymous Account
Kimlik doğrulama işlemleri için AGConnectAuth classı kullanıyoruz. getInstance() metodu sayesinde bu classın referans olduğu nesneleri kullanıyoruz. Anonymous şekilde giriş yapmak için, burada singInAnonymously() methodunu kullanıyoruz ve sonuçları dinlemek için successListener ve FailureListener ekliyoruz. Eğer kimlik doğrulama işlemi başarılı bir şekilde sonuçlanmış ise HomePage e yönlendiyoruz.
findViewById(R.id.btn_Anonymously).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
AGConnectAuth.getInstance().signInAnonymously().addOnSuccessListener(new OnSuccessListener<SignInResult>() {
@Override
public void onSuccess(SignInResult signInResult) {
startActivity(new Intent(MainActivity.this, HomePageActivity.class));
finish();
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(Exception e) {
Log.d(TAG, "Error " + e);
}
});
}
});
Umarım faydalı olmuştur.
Örnek projeye buradan erişebilirsiniz.
Son olarak, Huawei Developer forum sayfasından karşılaştığınız sorunları sorabilir ve daha önceden cevaplanmış soruları görebilirsiz.