Xamarin 作为微软提供的挪动服务多零碎开发平台,成为很多开发者首选的利用开发平台。AppGallery Connect(以下简称 AGC)也在逐渐的反对 Xamarin 的 SDK。认证服务也是反对 Xamarin 平台的服务之一,明天就教大家如何在 Xamarin 里疾速集成认证服务的手机号码认证。
- 装置 Xamarin 环境
Xamarin 的御用开发平台是 Visual Studio,所以咱们须要首先装置 Visual Studio 2019.
下载地址:https://visualstudio.microsof…
下载好后进行装置,咱们须要装置 Xamarin 配套的插件,Mobile development with .NET,中文叫“应用.NET 的挪动开发”,装置实现后就能够通过 Visual Studio 进行 Xamarin 的 Android 和 iOS 开发了。
- 在 AGC 页面开明认证服务,具体创立与配置骤能够参考认证服务官网文档:https://developer.huawei.com/…
3. 创立 Xamarin 工程
在 Visual Studio 中创立新我的项目,抉择挪动利用(Xamarin.Forms),将利用的名称等信息设置好后,创立我的项目
- 将近程配置的 Xamarin 包集成到新的我的项目中
有两种形式集成 Xamarin 包
第一种是云端形式集成,在目录栏右击抉择治理 NuGet 程序包
在浏览选项中搜寻 Huawei.Agconnect.Auth,点击装置即可
第二种形式是本地集成 NuGet 包,首先须要将所有须要的 NuGet 包放入本地的一个文件夹中,
还是依照第一种的形式关上 NuGet 包管理器,中岛程序包源边上的设置图标,关上选项目录
点击绿色的加号增加新的包源,在源的中央输出刚刚寄存 NuGet 本地包的文件夹目录即可。
- 增加 AGC 配置文件
AGC 为开发者筹备了一个寄存所有利用相干信息的配置 json 文件,咱们须要将这个文件集成到我的项目中以便后续调用接口时应用,咱们的 SDK 会主动读取外面的内容,无需开发者调用时手动传入了,具体步骤如下
a) 依照第二步文档中的办法从 AGC 治理台中下载 agconnect-services.json 文件,将文件放入我的项目的 Assets 目录下
b) 在我的项目中创立一个新的类,HmsLazyInputStreams.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 也提供了发送验证码的性能:
i. 发送验证码的步骤如下:
首先咱们须要创立一个 VerifyCodeSettings 对象,外面蕴含了发送短信的相干设置,包含 action,语言等
VerifyCodeSettings settings = VerifyCodeSettings.NewBuilder()
.Action(VerifyCodeSettings.ActionRegisterLogin)
.SendInterval(30)
.Locale(Locale.English)
.Build();
读取用户输出的国家码与手机号,调用 RequestVerifyCodeAsync 办法向认证服务服务器申请发送验证码,传入国家码,手机号以及刚刚咱们创立的 setting 对象
string countryCode = edtCountryCode.Text.ToString().Trim();
string phoneNumber = edtAccount.Text.ToString().Trim();
try
{var requestVerifyCode = AGConnectAuth.Instance.RequestVerifyCodeAsync(countryCode, phoneNumber, 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();}
ii. 用户获取验证码后就能够开始注册流程了
首先咱们须要读取用户的输出并构建一个 PhoneUser 对象,外面寄存了手机用户的相干信息,包含手机号,国家码,验证码和明码。这里用户在创立的时候能够抉择是否设置明码,如果设置则后续在登录的时候就须要输出明码。
string countryCode = edtCountryCode.Text.ToString().Trim();
string phoneNumber = edtAccount.Text.ToString().Trim();
string password = edtPassword.Text.ToString().Trim();
string verifyCode = edtVerifyCode.Text.ToString().Trim();
// Build phone user.
PhoneUser phoneUser = new PhoneUser.Builder()
.SetCountryCode(countryCode)
.SetPhoneNumber(phoneNumber)
.SetPassword(password)
.SetVerifyCode(verifyCode)
.Build();
PhoneUser 创立胜利后咱们就能够调用 CreateUserAsync 办法创立用户了
```
try
{
// Create phoneUser user.
var phoneUserResult = AGConnectAuth.Instance.CreateUserAsync(phoneUser);
ISignInResult signInResult = await phoneUserResult;
if (phoneUserResult.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 会主动为用户进行登录,无需再调用登录接口了
iii. 对于非首次应用的用户,咱们就须要进行登录操作了,基于之前注册时的设置,登录分为两种,验证码登录和明码登录
string countryCode = edtCountryCode.Text.ToString().Trim();
string phoneNumber = edtAccount.Text.ToString().Trim();
string password = edtPassword.Text.ToString().Trim();
string verifyCode = edtVerifyCode.Text.ToString().Trim();
IAGConnectAuthCredential credential;
if (TextUtils.IsEmpty(verifyCode))
{
credential = PhoneAuthProvider.CredentialWithPassword(countryCode, phoneNumber, password);
}
else
{
credential = PhoneAuthProvider.CredentialWithVerifyCode(countryCode, phoneNumber, password, verifyCode);
}
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/…
认证服务 -xamarin 应用领导:https://developer.huawei.com/…
更多精彩内容,请见华为开发者官方论坛→https://developer.huawei.com/…