Xamarin 作為微軟提供的移動服務多系統開發平臺,成為很多開發者首選的應用開發平臺,AppGallery Connect(以下簡稱 AGC)也在逐步的支持 Xamarin 的 SDK,認證服務也是支持 Xamarin 平臺的服務之一,今天就教大家如何在 Xamarin 里快速集成認證服務的郵箱地址認證,
1. 安裝 Xamarin 環境
Xamarin 的御用開發平臺是 Visual Studio,所以我們需要首先安裝 Visual Studio 2019.
下載地址:https://visualstudio.microsoft.com/zh-hans/downloads/
下載好后進行安裝,我們需要安裝 Xamarin 配套的插件,Mobile development with .NET,中文叫“使用 .NET 的移動開發”,安裝完成后就可以通過 Visual Studio 進行 Xamarin 的 Android 和 iOS 開發了,

2. 在 AGC 頁面開通認證服務,具體創建與配置驟可以參考認證服務官方檔案:https://developer.huawei.com/consumer/cn/doc/development/AppGallery-connect-Guides/agc-auth-android-getstarted-0000001053053922
3. 創建 Xamarin 工程
在 Visual Studio 中創建新專案,選擇移動應用(Xamarin.Forms),將應用的名稱等資訊設定好后,創建專案

4. 將遠程配置的 Xamarin 包集成到新的專案中
有兩種方式集成 Xamarin 包
第一種是云端方式集成,在目錄欄右擊選擇管理 NuGet 程式包

在瀏覽選項中搜索 Huawei.Agconnect.Auth,點擊安裝即可
第二種方式是本地集成 NuGet 包,首先需要將所有需要的 NuGet 包放入本地的一個檔案夾中,

還是按照第一種的方式打開 NuGet 包管理器,中島程式包源邊上的設定圖示,打開選專案錄

點擊綠色的加號添加新的包源,在源的地方輸入剛剛存放 NuGet 本地包的檔案夾目錄即可,

5. 添加 AGC 組態檔
AGC 為開發者準備了一個存放所有應用相關資訊的配置 json 檔案,我們需要將這個檔案集成到專案中以便后續呼叫介面時使用,我們的 SDK 會自動讀取里面的內容,無需開發者呼叫時手動傳入了,具體步驟如下
a). 按照第二步檔案中的方法從 AGC 管理臺中下載 agconnect-services.json 檔案,將檔案放入專案的 Assets 目錄下

b). 在專案中創建一個新的類,cs,將如下代碼寫入進行 json 檔案的內容讀取
using System;
using System.IO;
using Android.Util;
using Android.Content;
using Huawei.Agconnect.Config;
namespace XamarinHmsRemoteConfig
{
class HmsLazyInputStream : LazyInputStream
{
public HmsLazyInputStream(Context context) : base(context)
{
Get(context);
}
public override Stream Get(Context context)
{
try
{
return context.Assets.Open("agconnect-services.json");
}
catch (Exception e)
{
Log.Error(e.ToString(), "Can't open agconnect file");
return null;
}
}
}
}
在主 Activity 中,我們需要在 AttachBaseContext 中添加如下代碼已讀取 json 檔案中的內容
protected override void AttachBaseContext(Context context)
{
base.AttachBaseContext(context);
AGConnectServicesConfig config = AGConnectServicesConfig.FromContext(context);
config.OverlayWith(new HmsLazyInputStream(context));
}
c). 設定包名
右擊專案找到屬性選項,在 Android 清單頁簽找到程式包名稱,設定應用的包名,

準備作業完成后,我們就可以正式進入開發階段
對于郵箱地址認證,認證服務 SDK 提供了兩個階段的操作,一個是注冊,另一個是登錄,這兩個操作都需要用到獲取郵件驗證碼的功能,所以認證服務 SDK 也提供了發送驗證碼的功能:
1. 發送驗證碼的步驟如下:
首先我們需要創建一個 VerifyCodeSettings 物件,里面包含了發送郵件的相關設定,包括 action,語言等
VerifyCodeSettings settings = VerifyCodeSettings.NewBuilder()
.Action(VerifyCodeSettings.ActionRegisterLogin)
.SendInterval(30)
.Locale(Locale.English)
.Build();
讀取用戶輸入的郵箱地址,呼叫 RequestVerifyCodeAsync 方法向認證服務服務器請求發送驗證碼,傳入郵箱地址以及剛剛我們創建的 setting 物件
string email = edtAccount.Text.ToString().Trim();
try
{
var requestVerifyCode = AGConnectAuth.Instance.RequestVerifyCodeAsync(email, settings);
VerifyCodeResult verifyCodeResult = await requestVerifyCode;
if (requestVerifyCode.Status.Equals(System.Threading.Tasks.TaskStatus.RanToCompletion))
{
Toast.MakeText(this, "Send email verify code success! ", ToastLength.Short).Show();
}
}
catch (Exception ex)
{
Toast.MakeText(this, ex.Message, ToastLength.Long).Show();
}
2. 用戶獲取驗證碼后就可以開始注冊流程了
首先我們需要讀取用戶的輸入并構建一個 EmailUser 物件,里面存放了郵箱用戶的相關資訊,包括郵箱地址,驗證碼和密碼,這里用戶在創建的時候可以選擇是否設定密碼,如果設定則后續在登錄的時候就需要輸入密碼,
string email = edtAccount.Text.ToString().Trim();
string password = edtPassword.Text.ToString().Trim();
string verifyCode = edtVerifyCode.Text.ToString().Trim();
// Build e-mail user.
EmailUser emailUser = new EmailUser.Builder()
.SetEmail(email)
.SetPassword(password)//optional,if you set a password, you can log in directly using the password next time.
.SetVerifyCode(verifyCode)
.Build();
EmailUser 創建成功后我們就可以呼叫 CreateUserAsync 方法創建用戶了
try
{
// Create e-mail user.
var emailUserResult = AGConnectAuth.Instance.CreateUserAsync(emailUser);
ISignInResult signInResult = await emailUserResult;
if (emailUserResult.Status.Equals(System.Threading.Tasks.TaskStatus.RanToCompletion))
{
// After a user is created, the user has logged in by default.
StartActivity(new Intent(this, typeof(MainActivity)));
}
}
catch (Exception ex)
{
Toast.MakeText(this, "Create User Fail:" + ex.Message, ToastLength.Long).Show();
}
用戶創建完成后,SDK 會自動為用戶進行登錄,無需再呼叫登錄介面了
3. 對于非首次使用的用戶,我們就需要進行登錄操作了,基于之前注冊時的設定,登錄分為兩種,驗證碼登錄和密碼登錄
string email = edtAccount.Text.ToString().Trim();
string password = edtPassword.Text.ToString().Trim();
string verifyCode = edtVerifyCode.Text.ToString().Trim();
IAGConnectAuthCredential credential;
if (TextUtils.IsEmpty(verifyCode))
{
credential = EmailAuthProvider.CredentialWithPassword(email, password);
}
else
{
credential = EmailAuthProvider.CredentialWithVerifyCode(email, password, verifyCode);
}
SignIn(credential);
try
{
AGConnectAuth connectAuth = AGConnectAuth.Instance;
var signInResult = AGConnectAuth.Instance.SignInAsync(credential);
ISignInResult result = await signInResult;
if (signInResult.Status.Equals(System.Threading.Tasks.TaskStatus.RanToCompletion))
{
Log.Debug(TAG, signInResult.Result.ToString());
StartActivity(new Intent(this, typeof(MainActivity)));
Finish();
}
}
catch (Exception ex)
{
Log.Error(TAG, ex.Message);
Toast.MakeText(this, "SignIn failed: " + ex.Message, ToastLength.Long).Show();
}
我們可以看到,如果是密碼登錄,我們呼叫的是 CredentialwithPassword 來創建一個 credential,而驗證碼登錄則是使用 CredentialWithVerifyCode 來創建 credential,而后我們呼叫 SignInAsync 方法傳入這個 credential 進行登錄的操作,
以上我們就成功接入了 Xamarin 版本認證服務中的郵箱地址認證,如果覺得簡單那就趕快行動起來試試吧,
參考檔案:
xamarin 使用入門:https://developer.huawei.com/consumer/cn/doc/development/AppGallery-connect-Guides/agc-get-started-xamarin
認證服務 - xamarin 使用指導:https://developer.huawei.com/consumer/cn/doc/development/AppGallery-connect-Guides/agc-auth-xamarin-android-usage-0000001098592850#EN-US_TOPIC_0000001098592850__section17453164515224
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/424854.html
標籤:.NET技术
