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

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

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

如何在Xamarin中快速集成Android版认证服务-手机号码篇的更多相关文章

  1. 如何在 Xamarin 中快速集成 Android 版认证服务 - 邮箱地址篇

    Xamarin 作为微软提供的移动服务多系统开发平台,成为很多开发者首选的应用开发平台.AppGallery Connect(以下简称 AGC)也在逐步的支持 Xamarin 的 SDK.认证服务也是 ...

  2. 如何在Python中快速画图——使用Jupyter notebook的魔法函数(magic function)matplotlib inline

    如何在Python中快速画图--使用Jupyter notebook的魔法函数(magic function)matplotlib inline 先展示一段相关的代码: #we test the ac ...

  3. iOS平台 | 快速集成华为AGC认证服务

    介绍 如何让用户根据已有的账号来进行登录注册呢?在应用中集成华为AGC认证服务SDK来轻松快速地实现这个功能. 本篇内容根据官网文档指导集成过程总结完成,关于集成步骤,官网的资料写的有点多,现在我总结 ...

  4. [Xamarin] 從Xamarin中呼叫 *.jar 的 library -建立.jar篇 (转帖)

    嗯,這篇我們來聊聊如何從Xamarin 中來呼叫,已經包好的.jar ,首先因為要讓測試順利,我們開一個Android Java 的專案 當然是Eclipse ,然後我們簡簡單單寫一個測試用的libr ...

  5. IOS中快速集成短信SDK验证开发(SMSSDK),IOS开发中如何设置手机验证码

    [转载请注明出处] sdk是别人的,我只是下载来集成一下. smssdk下载网站:http://www.mob.com/(也有其他很多网站有类似SDK,譬如https://www.juhe.cn/等等 ...

  6. 在MFC对话框中快速集成三维控件

    在MFC的对话框中可以方便的集成AnyCAD三维控件(c++版本),遵循一下几步: 1.在对话框资源中增加一个Static控件,ID为IDC_STATIC_3D,并且把它的Notify属性设置为Tru ...

  7. 如何在eclipse中快速debug到想要的参数条件场景下

    前言 俗话说,工欲善其事必先利其器. 对于我们经常使用的开发工具多一些了解,这也是对我们自己工作效率的一种提升. 场景 作为开发,我们经常会遇到各种bug,大部分的bug很明确,我们直接可以打断点定位 ...

  8. 9、如何在Xamarin中进行iOS真机调试和发布

    本文主要引导用户如何使用真机调试和编译发布. 概述 使用前的准备: 1.一台IPhone设备  或者IPad 都行看你自己 2.一台Mac主机和搭建好对应的xamarin.ios 开发环境 3.开发者 ...

  9. 如何在VS中快速导入新的源码以及文件夹

    参考链接:http://www.cjjjs.com/paper/xmkf/201641716212844.aspx 在visual studio 2013中尝试发现的问题:原文中“显示所有文件 ”的操 ...

随机推荐

  1. Java 将PDF转为线性PDF

    线性化PDF文件是PDF文件的一种特殊格式,可以通过Internet更快地进行查看.线性化的PDF,在页面数量很多的情况下,更能突出表现出快速浏览的优势.下面是通过后端Java程序实现将PDF文件转为 ...

  2. 使用xlsx实现Excel导入

    需求 实现在系统里批量导入数据,通过上传一个excel文件,前端将文件处理为json数据发送给后端.(最好与后端定义好上传的文件模板,方便处理数据) 实现 使用xlsx: xlsx的github地址: ...

  3. Pointcut 表达式

    AOP 概念篇 今天介绍 Pointcut 的表达式 通配符 常见的通配符如下 .. 含义一:方法表达式中.代表任意数量的参数 @Service public class HelloService { ...

  4. velocity使用foreach进行遍历时$velocityCount不起作用

    把$velocityCount替换成$foreach.count 例如 #if($foreach.count != $columns.size()),#end

  5. bugku的一道代码审计基础题:eval

    首先看到 include "flag.php",第一反应就应该是文件包含 直接先?hello=file:////etc, 然后啥也没 那就再检查一下代码,eval(var_dump ...

  6. C++ switch 语句的用法

    C++ 判断 一个 switch 语句允许测试一个变量等于多个值时的情况.每个值称为一个 case,且被测试的变量会对每个 switch case 进行检查. C++ 中 switch 语句的语法: ...

  7. SuperPixel

    目录 SLIC Superpixel algorithm 距离函数的选择 代码 Gonzalez R. C. and Woods R. E. Digital Image Processing (For ...

  8. web服务之nginx部署

    本期内容概要 了解web服务 Nginx和Apache的对比 部署Nginx 内容详细 1.什么是web服务 Web服务是一种服务导向架构的技术,通过标准的Web协议提供服务,目的是保证不同平台的应用 ...

  9. Capstone CS5267|CS5267参数|CS5267规格书

    CS5267 USB Type-C to HDMI2.0b 4k@60Hz Converter with PD3.0 Support 1.CS5267概述 Capstone CS5267是一款高性能T ...

  10. Spring企业级程序设计 • 【第2章 Spring Bean管理进阶】

    全部章节   >>>> 本章目录 2.1 bean标签和import标签 2.1.1 标签中的id属性和name属性 2.1.2 Bean的作用范围和生命周期 2.1.2 Be ...