首页 > 其他分享 >【Serverless】Unity快速集成认证服务实现邮件登录

【Serverless】Unity快速集成认证服务实现邮件登录

时间:2022-11-23 09:45:53浏览次数:69  
标签:Serverless 界面 AGConnectAuth 登录 Unity SetActive Debug 邮件

概述:

认证服务可以为您的应用快速构建安全可靠的用户认证系统,您只需在应用中访问认证服务的相关能力,而不需要关心云侧的设施和实现。

本次将带来如何使用Unity编辑器快速集成认证服务SDK并实现邮箱地址登录。

 

集成准备

Unity环境配置

下载Unity Hub,安装Unity编辑器、VS2019、Android平台工具、Documentation。

cke_461.png

创建好Unity工程后,Android环境配置如图:

Edit-Preferences-External Tools配置好之前下载的Android SDK。

cke_1106.png

Edit-Project Settings-Player-Other Settings配置包名。

cke_1976.png

AGC环境配置

1、在AGC创建项目和应用

cke_4958.png

2、开通认证服务,其中这次演示使用邮箱登录的方式,所以启用邮箱地址的认证方式

cke_7351.png

cke_8522.png

3、返回项目设置界面,下载最新的Json文件,将下载好的Json文件放到项目Assets\Resources目录下;

集成认证服务和云数据库SDK。下载AGC Unity SDK并在项目的“Resources/AGConnect”文件夹下添加DLL依赖项。

cke_12302.png

布局设计

本次演示的Demo是需要用户输入邮箱地址和密码进行注册,然后输入邮箱验证码完成注册与登录。

Demo主要有三个界面布局,是玩家登录界面、游戏创建/加入界面和游戏对局界面,下面是三个布局界面的展示截图。

登录界面

cke_15185.png

输入邮箱验证码界面

cke_18909.png

登录完成界面

cke_22725.png

功能实现

调用AGConnectAuth.RequestVerifyCodeAsync申请邮箱注册的验证码。该验证码将发送给用户邮箱,确保该邮箱为用户本人所有,同时跳转至输入验证码界面。

public async void OpenVerifyPanel()

    {

        VerifyCodeSettings settings = new VerifyCodeSettings.Builder()

            .SetAction(VerifyCodeSettings.ActionRegisterLogin)

            .SendInterval(30)

            .SetLang("en-US")

            .Build();

        Task<VerifyCodeResult> verifyCodeResultTask =

            AGConnectAuth.Instance.RequestVerifyCodeAsync(Email.GetComponent<TMP_InputField>().text, settings);

        try

        {

            await verifyCodeResultTask;

        }

        catch (System.Exception)

        {

            if (verifyCodeResultTask.Exception.InnerException is AGCException exception)

                Debug.Log(exception.ErrorMessage);

            else Debug.Log(verifyCodeResultTask.Exception.InnerException.ToString());

        }

        LoginPanel.SetActive(false);

        Verify.SetActive(true);

    }

调用AGConnectAuth.CreateUserAsync注册用户。注册成功后,用户自动登录,无需再次调用登录接口。

public async void Register()

    {

        EmailUser emailUser = new EmailUser.Builder()

            .SetEmail(Email.GetComponent<TMP_InputField>().text)

            .SetVerifyCode(VerifyCode.GetComponent<TMP_InputField>().text)

            .SetPassword(Password.GetComponent<TMP_InputField>().text)

            .Build();

 

        Task<ISignInResult> createUserTask = AGConnectAuth.Instance.CreateUserAsync(emailUser);

        try

        {

            await createUserTask;

            var result = createUserTask.Result;

            var user = AGConnectAuth.Instance.GetCurrentUser();

            Verify.SetActive(false);

            LoginSuccessful.SetActive(true);

        }

        catch (System.Exception)

        {

            if (createUserTask.Exception.InnerException is AGCException exception)

                Debug.Log(exception.ErrorMessage);

            else

                Debug.Log(createUserTask.Exception.InnerException.ToString());

 

            Verify.SetActive(false);

            LoginUnsuccessful.SetActive(true);

        }

    }

邮箱地址+密码登录

public async Task<bool> Login(string email, string password)

    {

        if (AGConnectAuth.Instance.GetCurrentUser() == null)

        {

            try

            {

                IAGConnectAuthCredential credential = EmailAuthProvider.CredentialWithPassword(email, password);

                var result = await AGConnectAuth.Instance.SignInAsync(credential);

                Debug.Log("Login Successful");

                return true;

            }

            catch (AGCAuthException ex)

            { 

                Debug.LogError("Login Failed: " + ex.ErrorMessage);

                return false;

            }

            catch (System.Exception ex)

            {

                Debug.LogError("Login Failed: " + ex.Message);

                return false;

            }

        }

        else

        {

            Debug.LogError("User Already Logged In");

            return true;

        }

    }

账号登出代码

public void SignOut()

    {

        _dbConnect.CloseZone();

        AGConnectAuth.Instance.SignOut();

        LoginSuccessful.SetActive(false);

        LoginPanel.SetActive(true);

    }   

功能测试

点击File-Build Settings,选择Android平台,点击Build And Run,打包APK,然后在设备中进行安装。

cke_41614.png

1、输入邮箱号和密码,点击“Register”进行注册

cke_51438.png

2、输入注册邮箱收到的验证码,点击“Verify“进行注册登录,进入登陆成功界面

cke_61430.png

3、在AGC控制台可以查看已注册的账号。

cke_73143.png

​欲了解更多更全技术文章,欢迎访问https://developer.huawei.com/consumer/cn/forum/?ha_source=zzh

标签:Serverless,界面,AGConnectAuth,登录,Unity,SetActive,Debug,邮件
From: https://www.cnblogs.com/developer-huawei/p/16917263.html

相关文章

  • unity urp boatattack water 应用
    新建URP项目导入waterpackages把com.verasl.water-system拷贝到新建的URPpackages打开PackageMananger确认是否导入正确生成WaterSurfaceHierarchy中Creat......
  • Serverless云服务的出现以及docker容器带来的变化
    Serverless云服务的出现以及docker容器带来的变化坚持原创,写好每一篇文章随着云服务的不断发展,很多公司都把自己的服务放在云上,通过云来管理各种服务。云服务的演进一......
  • 【网络编程】Unity中使用Socket编程
    基本介绍名词解释Socket:网络连接的一端被称为socket。一个socket包含以下五个元素:使用的协议、本机IP、本地端口、远程IP、远程端口。IP地址:每台电脑都有一个自己的IP地址。......
  • Python爬虫异常怎么用邮件来通知
    正常企业做数据抓取经常会遇到各种故障问题,那么在人不能随时盯着爬虫电脑来防止错误,就需要用email来向自己报告。SMTP邮件协议是Python内置是支持的,他不仅可以发送纯文本的......
  • 邮件发送
    FUNCTIONzfmxx_send_email.*"----------------------------------------------------------------------*"*"本地接口:*"IMPORTING*"REFERENCE(I_SENDER)TYPE......
  • Serverless 架构下的 AI 应用开发
    作者:阿里云云原生本篇内容连载自《Serverless架构下的AI应用开发:入门、实战与性能优化》。Serverless架构与CI/CD工具的结合CI/CD是一种通过在应用开发阶段引......
  • 【unity】AssetBundle
    前言学xlua前应该要会打AB包。现在来补充一下有关AB包的使用。AssetBundle这里有一篇博客讲得很好,指路->【Unity框架】基于XLua框架搭建与AssetBundle的使用流程,不过仍......
  • 邮件发送
    邮件发送流程 1.邮件发送原理图2.jar包的支持activation-1.1.1.jarmail-1.4.7.jar3.授权码的获取4.简易文本邮件发送的实现由上图我们可以确定几个必须步......
  • Unity :Android局域网通信、UDP广播实现控制器开关(继电器)
    要解决的问题:1.UDP广播:因为平板控制的不仅仅是继电器,还有其他电脑2.继电器接收的是16进制指令,所以要把12个按钮1-12转换成16进制,要不然一个个的发送太麻烦,这里是指令的理......
  • Unity Shader 7 CG 语法
    1Cg语法基础如C++、C#和Java等高级语言一样,Cg语言也有自己的数据类型和关键字。掌握和理解这些关键字是写好Cg程序的基础。1.2、Cg的数据类型与关键字基本数据类型:Cg支......