基于華為AGC認(rèn)證服務(wù)快速構(gòu)建社交應(yīng)用登錄系統(tǒng)

來源: 華為開發(fā)者論壇
作者:Mayism
時(shí)間:2021-04-08
17089
眾所周知,一般想要開發(fā)一個(gè)社交應(yīng)用需要客戶端服務(wù)器等很多模塊配合才能夠?qū)崿F(xiàn)。尤其是登錄系統(tǒng),想要構(gòu)建一個(gè)安全高效的登錄需要大量的開發(fā)維護(hù)工作。今天就教大家如何不需要搭建任何服務(wù)器就可以完成一個(gè)簡單的社交應(yīng)用登錄系統(tǒng)開發(fā)。

 眾所周知,一般想要開發(fā)一個(gè)社交應(yīng)用需要客戶端服務(wù)器等很多模塊配合才能夠?qū)崿F(xiàn)。尤其是登錄系統(tǒng),想要構(gòu)建一個(gè)安全高效的登錄需要大量的開發(fā)維護(hù)工作。今天就教大家如何不需要搭建任何服務(wù)器就可以完成一個(gè)簡單的社交應(yīng)用登錄系統(tǒng)開發(fā)。

我們的登錄認(rèn)證系統(tǒng)使用的是華為AppGallery Connect認(rèn)證服務(wù),首先簡單介紹一下AppGallery Connect,AppGallery Connect(簡稱AGC),致力于為開發(fā)者提供應(yīng)用創(chuàng)意、開發(fā)、分發(fā)、運(yùn)營、分析全生命周期服務(wù),構(gòu)建全場景智慧化的應(yīng)用生態(tài)。目前,AGConnect已經(jīng)開通了87項(xiàng)服務(wù)。

ia_4900000002.png

華為AGC認(rèn)證服務(wù)就提供了一套完整的手機(jī)號和郵箱地址注冊登錄系統(tǒng)。

首先,對于新的用戶,認(rèn)證服務(wù)提供了賬號的注冊系統(tǒng)。首先看下我們的應(yīng)用注冊界面:

ia_4900000003.png

手機(jī)號注冊與郵箱注冊的具體流程大致相同,以手機(jī)號碼注冊流程為例:

ia_4900000004.png

認(rèn)證服務(wù)SDK提供了內(nèi)置的驗(yàn)證碼發(fā)送功能,應(yīng)用不需要自己去找通訊供應(yīng)商開通發(fā)送驗(yàn)證碼的服務(wù),非常方便。郵箱認(rèn)證也提供了發(fā)送郵箱驗(yàn)證碼的功能,只需要調(diào)用AGConnectAuth.requestVerifyCode傳入用戶信息就可以請求驗(yàn)證碼。代碼示例如下:

String countryCode = "86";

 VerifyCodeSettings settings = VerifyCodeSettings.newBuilder()

         .action(VerifyCodeSettings.ACTION_REGISTER_LOGIN)

         .sendInterval(30) //shortest send interval ,30-120s

         .locale(Locale.SIMPLIFIED_CHINESE) //optional,must contain country and language eg:zh_CN

         .build();

 if (notEmptyString(countryCode) && notEmptyString(accountNumber)) {

     Task<VerifyCodeResult> task = PhoneAuthProvider.requestVerifyCode(countryCode, accountNumber, settings);

     task.addOnSuccessListener(TaskExecutors.uiThread(), verifyCodeResult ->

             Toast.makeText(RegisterActivity.this, "verify code has been sent.", Toast.LENGTH_SHORT).show()

     ).addOnFailureListener(TaskExecutors.uiThread(), e -> {

         Toast.makeText(RegisterActivity.this, "Failed. "+e.getMessage(), Toast.LENGTH_SHORT).show();

         Log.e(TAG, "requestVerifyCode fail:" + e.getMessage());

     });

 } else {

     AGConnectCrash.getInstance().testIt(RegisterActivity.this);

 }

在我們的注冊頁面中,也可以看到一個(gè)輸入密碼的輸入框,這里SDK又提供了一個(gè)很便捷的功能。認(rèn)證服務(wù)給用戶提供了驗(yàn)證碼和密碼兩種登錄方式。用戶在注冊的時(shí)候可以選擇是否給自己的賬號設(shè)置一個(gè)密碼,如果密碼這里選擇了設(shè)置,那后續(xù)登錄的時(shí)候就可以使用密碼的方式來登錄,如果沒有在注冊時(shí)設(shè)置,則可以通過驗(yàn)證碼的方式來登錄。注冊成功后,SDK會自動(dòng)幫用戶進(jìn)行登錄,無需再跳轉(zhuǎn)回登錄界面重新登錄。我們開發(fā)的社交登錄系統(tǒng)注冊的時(shí)候設(shè)置了密碼,相關(guān)示例代碼如下:

PhoneUser phoneUser = new PhoneUser.Builder()

         .setCountryCode(countryCode)

         .setPhoneNumber(accountNumber)

         .setVerifyCode(verifyCode)

         .setPassword(password)

         .build();

 AGConnectAuth.getInstance().createUser(phoneUser).addOnSuccessListener(signInResult -> {

     String phoneNumber = signInResult.getUser().getPhone();

     String uid = signInResult.getUser().getUid();

     Bundle data = new Bundle();

     data.putString("phone", phoneNumber);

     data.putString("uid", uid);

     Intent intent = new Intent(RegisterActivity.this, ImageListActivity.class);

     intent.putExtras(data);

     startActivity(intent);

     finish();

 }).addOnFailureListener(e -> {

     Log.e(TAG, "register error, " + e);

     ToastUtils.showToast(RegisterActivity.this, "Register failed. "+e.getMessage());

 });

對于已經(jīng)注冊的用戶,我們同樣提供了使用手機(jī)號或郵箱登錄的能力。下面我們的登錄界面:

ia_4900000005.png

由于我們的應(yīng)用只設(shè)置了使用密碼登錄,所以在剛剛的注冊環(huán)節(jié)也必須是輸入密碼。代碼中,只需要調(diào)用signin接口將用戶相應(yīng)的數(shù)據(jù)傳入就可以進(jìn)行登錄了。登錄代碼示例如下:

String countryCode = "86";

 AGConnectAuthCredential credential = PhoneAuthProvider.credentialWithVerifyCode(

         countryCode,

         phoneAccount,

         photoPassword,

         null ); // password, can be null

 AGConnectAuth.getInstance().signIn(credential).addOnSuccessListener(signInResult -> {

     String phoneNumber = signInResult.getUser().getPhone();

     String uid = signInResult.getUser().getUid();

     Bundle data = new Bundle();

     data.putString("account", this.getString(R.string.phone_user)+phoneNumber.substring(11, 15));

     data.putString("uid", uid);

     ToastUtils.showToast(LoginActivity.this, "Login Success");

     Intent intent = new Intent(LoginActivity.this, ImageListActivity.class);

     intent.putExtras(data);

     startActivity(intent);

     finish();

 }).addOnFailureListener(e -> {

     Log.e(TAG, "Login failed: " + e.getMessage());

     ToastUtils.showToast(LoginActivity.this, "Account Error,Confirm and try again");

 });

登錄成功后認(rèn)證服務(wù)會返回一個(gè)當(dāng)前用戶的唯一ID,開發(fā)者可以根據(jù)這個(gè)ID來區(qū)分不同的用戶??梢钥吹轿覀兊牡卿浗缑孢€有一個(gè)匿名登錄的選項(xiàng)。這個(gè)也是認(rèn)證服務(wù)提供的。認(rèn)證服務(wù)提供了用戶的匿名模式,用戶可以不注冊不登錄,通過匿名的方式來體驗(yàn)應(yīng)用的功能,通俗點(diǎn)說就是游客模式,這樣可以給用戶一個(gè)試用的機(jī)會,提高應(yīng)用轉(zhuǎn)化率,有興趣的可以參考文檔實(shí)現(xiàn)。

登錄成功后,我們來到了圖片展示頁面:

ia_4900000006.png

這個(gè)頁面分為兩個(gè)部分,第一部分為標(biāo)題部分,分為用戶的名稱以及三個(gè)操作的按鈕,分別為添加圖片,刷新與退出登錄。用戶的名稱是通過認(rèn)證服務(wù)登錄成功以后的返回信息里獲取的。退出登錄則用到了認(rèn)證服務(wù)的退出登錄功能,退出后界面會就返回到之前的登錄界面,退出登錄的功能實(shí)現(xiàn)就不贅述了,調(diào)用signout接口即可。

而頁面下半部分的圖片展示則使用到了AGC的云存儲云數(shù)據(jù)庫等功能,這些功能也是基于認(rèn)證服務(wù)來實(shí)現(xiàn)的。認(rèn)證服務(wù)可以為云存儲與云數(shù)據(jù)庫提供憑證,例如云數(shù)據(jù)庫服務(wù)需要認(rèn)證服務(wù)的權(quán)限認(rèn)證才可以進(jìn)行增刪改等操作。具體這些服務(wù)是怎么應(yīng)用到我們的App中的,我將在以后的文章中為大家介紹。

總結(jié):

使用華為AGC認(rèn)證服務(wù)免除了自己搭建服務(wù)器進(jìn)行登錄認(rèn)證的煩惱,僅通過集成認(rèn)證服務(wù)SDK即可實(shí)現(xiàn)包括手機(jī)、郵箱在內(nèi)多種認(rèn)證方式的端到端注冊登錄流程,整個(gè)開發(fā)流程半天到一天即可搞定,同時(shí)也比自有認(rèn)證系統(tǒng)更加安全。

立即登錄,閱讀全文
版權(quán)說明:
本文內(nèi)容來自于華為開發(fā)者論壇,本站不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。文章內(nèi)容系作者個(gè)人觀點(diǎn),不代表快出海對觀點(diǎn)贊同或支持。如有侵權(quán),請聯(lián)系管理員(zzx@kchuhai.com)刪除!
優(yōu)質(zhì)服務(wù)商推薦
更多