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. 二、Uniapp+vue+腾讯IM+腾讯音视频开发仿微信的IM聊天APP,支持各类消息收发,音视频通话,附vue实现源码(已开源)-腾讯云后台配置TXIM

    项目文章索引 1.项目引言 2.腾讯云后台配置TXIM 3.配置项目并实现IM登录 4.会话好友列表的实现 5.聊天输入框的实现 6.聊天界面容器的实现 7.聊天消息项的实现 8.聊天输入框扩展面板的 ...

  2. Linux(centos7)安装ClickHouse

    Clickhouse 仅支持Linux 且必须支持SSE4.2 指令集 grep -q sse4_2 /proc/cpuinfo && echo "SSE 4.2 suppo ...

  3. JS将时间戳转换为日期格式

    function getDate(time){ var date =(new Date(parseInt(time))).toLocaleDateString() return date; } tim ...

  4. c++ 设计模式概述之享元

    类写的不够规范,目的是为了缩短篇幅,实际中其不要这样做. 参考文章: 1. http://c.biancheng.net/view/1371.html 1.概述 A.享元,我的理解是: 共享的模块单元 ...

  5. 【LeetCode】697. Degree of an Array 解题报告

    [LeetCode]697. Degree of an Array 解题报告 标签(空格分隔): LeetCode 题目地址:https://leetcode.com/problems/degree- ...

  6. Redis 的 3 种集群方案对比

    数据持久化 主从复制 自动故障恢复 集群化 数据持久化本质上是为了做数据备份,有了数据持久化,当Redis宕机时,我们可以把数据从磁盘上恢复回来,但在数据恢复之前,服务是不可用的,而且数据恢复的时间取 ...

  7. CoGAN

    目录 概 主要内容 代码 Liu M., Tuzel O. Coupled Generative Adversarial Networks. NIPS, 2016. 概 用GAN和数据(从边缘分布中采 ...

  8. Python Revisited Day 08 (高级程序设计技术)

    目录 8.1 过程型程序设计进阶 8.1.1 使用字典进行分支 8.1.2 生成器表达式与函数 8.1.3 动态代码执行与动态导入 动态程序设计与内省函数(表) 动态代码执行 eval(), exec ...

  9. 前端在线学习网站W3School

    W3School在线学习网站 http://www.w3school.com.cn/ W3School是因特网上最大的WEB开发者资源,是完全免费的,是非营利性的, 一直在升级和更新,是W3C中国社区 ...

  10. javascript中逻辑运算(||,&&,!)

    作为一个后端开发的程序员,一直就对JavaScript情有独钟,作为一门前后端通吃的语言,必须赞一下.而且之前很长一段时间都有在做JavaScript,一路都是和ie8死磕,磕完又找低版本的谷歌磕,坑 ...