【Serverless】Unity快速整合認證服務實現郵件登入

華為開發者論壇發表於2022-11-23

概述:

認證服務可以為您的應用快速構建安全可靠的使用者認證系統,您只需在應用中訪問認證服務的相關能力,而不需要關心雲側的設施和實現。

本次將帶來如何使用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);

    }
【Serverless】Unity快速整合認證服務實現郵件登入

呼叫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);

        }

    }
【Serverless】Unity快速整合認證服務實現郵件登入

郵箱地址+密碼登入

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;

        }

    }
【Serverless】Unity快速整合認證服務實現郵件登入

賬號登出程式碼

public void SignOut()

    {

        _dbConnect.CloseZone();

        AGConnectAuth.Instance.SignOut();

        LoginSuccessful.SetActive(false);

        LoginPanel.SetActive(true);

    }   
【Serverless】Unity快速整合認證服務實現郵件登入

功能測試

點選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