乐趣区

关于android:如何在Xamarin中快速集成Android版认证服务手机号码篇

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

3. 创立 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 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/…

退出移动版