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

如何在Xamarin中快速集成Android版认证服务-手机号码篇,第1张

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

Xamarin作为微软提供的移动服务多系统开发平台,成为很多开发者首选的应用开发平台。AppGallery Connect(以下简称AGC)也在逐步的支持Xamarin的SDK。认证服务也是支持Xamarin平台的服务之一,今天就教大家如何在Xamarin里快速集成认证服务的手机号码认证。

    安装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开发了。

    在AGC页面开通认证服务,具体创建与配置骤可以参考认证服务官方文档:https://developer.huawei.com/consumer/cn/doc/development/AppGallery-connect-Guides/agc-auth-android-getstarted-0000001053053922

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/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://developer.huawei.com/consumer/cn/forum/home?ha_source=sanfang

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5709633.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-18

发表评论

登录后才能评论

评论列表(0条)

保存