Xamarin作为微软提供的挪动服务多零碎开发平台,成为很多开发者首选的利用开发平台。AppGallery Connect(以下简称AGC)也在逐渐的反对Xamarin的SDK。认证服务也是反对Xamarin平台的服务之一,明天就教大家如何在Xamarin里疾速集成认证服务的邮箱地址认证。

  1. 装置Xamarin环境

Xamarin的御用开发平台是Visual Studio,所以咱们须要首先装置Visual Studio 2019.

下载地址:https://visualstudio.microsof...

下载好后进行装置,咱们须要装置Xamarin配套的插件,Mobile development with .NET,中文叫“应用.NET的挪动开发”,装置实现后就能够通过Visual Studio进行Xamarin的Android和iOS开发了。

  1. 在AGC页面开明认证服务,具体创立与配置骤能够参考认证服务官网文档:https://developer.huawei.com/...
  2. 创立Xamarin工程

在Visual Studio中创立新我的项目,抉择挪动利用(Xamarin.Forms),将利用的名称等信息设置好后,创立我的项目

  1. 将近程配置的Xamarin包集成到新的我的项目中

有两种形式集成Xamarin包

第一种是云端形式集成,在目录栏右击抉择治理NuGet程序包

在浏览选项中搜寻Huawei.Agconnect.Auth,点击装置即可

第二种形式是本地集成NuGet包,首先须要将所有须要的NuGet包放入本地的一个文件夹中,

还是依照第一种的形式关上NuGet包管理器,中岛程序包源边上的设置图标,关上选项目录

点击绿色的加号增加新的包源,在源的中央输出刚刚寄存NuGet本地包的文件夹目录即可。

  1. 增加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 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(); }

ii.用户获取验证码后就能够开始注册流程了

首先咱们须要读取用户的输出并构建一个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会主动为用户进行登录,无需再调用登录接口了

iii. 对于非首次应用的用户,咱们就须要进行登录操作了,基于之前注册时的设置,登录分为两种,验证码登录和明码登录

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/...

认证服务-xamarin应用领导:https://developer.huawei.com/...

更多精彩内容,请见华为开发者官方论坛→https://developer.huawei.com/...