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


    概述:

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

    本次将带来如何使用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 verifyCodeResultTask =
    
                AGConnectAuth.Instance.RequestVerifyCodeAsync(Email.GetComponent().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().text)
    
                .SetVerifyCode(VerifyCode.GetComponent().text)
    
                .SetPassword(Password.GetComponent().text)
    
                .Build();
    
     
    
            Task 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

  • 相关阅读:
    基于Qt实现文本编辑器功能
    【网络安全的神秘世界】JavaScript
    Vue.js+Node.js全栈开发教程:Vue.js方法详解
    内存占用问题
    React之refs
    一种基于区块链的物联网架构设计
    Linux共享内存创建和删除
    Nacos注册中心与配置管理
    【RSocket】使用 RSocket(三)——服务端主动调用客户端方法
    全栈资源库【All】
  • 原文地址:https://www.cnblogs.com/developer-huawei/p/16917263.html