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

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

3. 创建 Xamarin 工程

在 Visual Studio 中创建新项目,选择移动应用(Xamarin.Forms),将应用的名称等信息设置好后,创建项目

4. 将远程配置的 Xamarin 包集成到新的项目中

有两种方式集成 Xamarin 包

第一种是云端方式集成,在目录栏右击选择管理 NuGet 程序包

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

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

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

点击绿色的加号添加新的包源,在源的地方输入刚刚存放 NuGet 本地包的文件夹目录即可。

5. 添加 AGC 配置文件

AGC 为开发者准备了一个存放所有应用相关信息的配置 json 文件,我们需要将这个文件集成到项目中以便后续调用接口时使用,我们的 SDK 会自动读取里面的内容,无需开发者调用时手动传入了,具体步骤如下

a). 按照第二步文档中的方法从 AGC 管理台中下载 agconnect-services.json 文件,将文件放入项目的 Assets 目录下

b). 在项目中创建一个新的类,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 也提供了发送验证码的功能:

1. 发送验证码的步骤如下:

首先我们需要创建一个 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();
}

2. 用户获取验证码后就可以开始注册流程了

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

3. 对于非首次使用的用户,我们就需要进行登录操作了,基于之前注册时的设置,登录分为两种,验证码登录和密码登录

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

如何在 Xamarin 中快速集成 Android 版认证服务 - 邮箱地址篇的更多相关文章

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

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

  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. IOS中快速集成短信SDK验证开发(SMSSDK),IOS开发中如何设置手机验证码

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

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

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

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

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

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

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

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

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

  9. 如何在Shell中快速切换目录

    1.回到上一次进入的路经cd -2.回到Homecd ~3.自动补齐实例,cd /usr/src/redhat,可以用cd /u[TAB]s[TAB]r[TAB]4.!$ 表示上一个命令的最后一个参数 ...

随机推荐

  1. vi中使用鼠标右键插入时进入(insert)visual模式

    使用vim插入外面复制的内容时,用右键点击后,并未将内容粘贴进去,而是进入了(insert)visual模式,解决方法:先shift+enter进入普通模式输入 set mouse-=a然后再i进入i ...

  2. Go语言系列之网络编程

    现在我们几乎每天都在使用互联网,我们前面已经学习了如何编写Go语言程序,但是如何才能让我们的程序通过网络互相通信呢?本章我们就一起来学习下Go语言中的网络编程. 关于网络编程其实是一个很庞大的领域,本 ...

  3. live-server使用指南

    一.安装 npm -g install live-server 二.配置 --port=NUMBER` - 选择要使用的端口,默认值:PORT env var或8080--host=ADDRESS` ...

  4. layui父表单获取子表单的值完成修改操作

    最近在做项目时,学着用layui开发后台管理系统. 但在做编辑表单时遇到了一个坑. 点击编辑时会出现一个弹窗. 我们需要从父表单传值给子表单.content是传值给子表单 layer.open({ t ...

  5. Three.js 实现虎年春节3D创意页面

    背景 虎年 春节将至,本文使用 React + Three.js 技术栈,实现趣味 3D 创意页面.本文包含的知识点主要包括:ShadowMaterial. MeshPhongMaterial 两种基 ...

  6. UVA 10815 Andy's First Dictionary (C++ STL map && set )

    原题链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_proble ...

  7. WAFW00F waf识别工具 源码学习

    我实习工作的第一个任务根据已有的java waf识别工具 实现了一个python的waf识别工具 代码结构非常乱 仅仅达到了能用的水平. 顶头svp推荐这个项目当时我已经写好了开始用了自己的 稍微看了 ...

  8. 自旋锁-JUC系列

    公众号原文:自旋锁-JUC系列 前言 2022!这个年份现在看起来都觉得有那么些恍惚的未来感,然而现在已在脚下. 无边落木萧萧下, 不尽长江滚滚来! 人生如白驹过隙! 本来计划最近把AQS源码分析做了 ...

  9. 带你玩转Flink流批一体分布式实时处理引擎

    摘要:Apache Flink是为分布式.高性能的流处理应用程序打造的开源流处理框架. 本文分享自华为云社区<[云驻共创]手把手教你玩转Flink流批一体分布式实时处理引擎>,作者: 萌兔 ...

  10. java string 转化为json_java String 转Json报错

    缺少jar包依赖: java.lang.NoClassDefFoundError: org/apache/commons/beanutils/DynaBean 缺少commons-beanutils- ...