Unity 串接 Google Play 服務來實作遊戲登入驗證機制

我們可以觀察到,現在大部分的手機遊戲都會讓玩家使用社群登入來進行遊戲,不太會用傳統的帳密登入介面實作,為的就是快速與方便性。那麼在設計給 Android 手機跑的小遊戲時,目前看到最常用的就是用 Google Play 服務來登入,與傳統的 Google 登入的不同在於能利用它的機制來儲存遊戲進度、成就、排行榜等資訊。

切換專案為 Android 平台

開啟 Build Settings,將 Platform 切換為 Android

2020 01 26 19 15 10 Build Settings

設定 Package 名稱

開啟 PlayerSettings,開啟 Other Settings 區塊,將 Package Name 修改成一個可用的名稱。

常看到的取名法是 com.作者名稱.專案名稱,可以參考 Android – Package Name convention 討論串中的說法。

2020 01 26 19 19 22

生成 Keystore

接下來切換到 Publishing Settings 區塊:

  1. 勾選 Create a new keystore。
  2. 點擊 Browse Keystore 選擇儲存位置。
  3. 在 Keystore a password 與 Confirm keystore password 中輸入密碼。
  4. 點擊 Alias 欄位中的下拉式選單,選擇 Create a new key。
  5. 填入 Alias、Password 與 Confirm 欄位,按下 Create Key 生成。
  6. 將 Alias 欄位切換為生成好的 Key,並填入 Key 的密碼。
2020 01 26 19 22 50

匯入 Play 套件

下載 Google Play Games plugin for Unity 原始碼後,將 current-build 中的 unitypackage 匯入至 Unity 專案中。

新增 Google Play 遊戲服務

進入 Google Play 控制台,切換到 遊戲服務,點擊 新增遊戲

在「我尚未在自己的遊戲中使用任何 Google API」中填入遊戲名稱與類別,最後按下 繼續 來進行後續步驟。

2020 01 26 21 24 59 遊戲服務 Google Play Console

建立連結 Android 應用程式

現在應該會在遊戲服務的介面中,現在切換到 已連結的應用程式,新增一個 連結 Android 應用程式

在套件名稱中輸入你先前設置的 Package 名稱,最後按下 儲存並繼續

2020 01 26 21 26 26 已連結的應用程式 PlayerServiceTutorial Google Play Console

點擊 立即授權您的應用程式

2020 01 26 21 26 35 已連結的應用程式 PlayerServiceTutorial Google Play Console

最後會出現要你輸入憑證指紋的介面,這個頁面就先放著,我們馬上來取得你的 SHA1 指紋。

2020 01 26 21 29 55 已連結的應用程式 PlayerServiceTutorial Google Play Console

設定 Java 環境變數

因為我們會要用到 KeyTool ,所以請進入 控制台 -> 系統及安全性 -> 系統,開啟左側欄中的 進階系統設定

2020 01 26 16 39 03 系統 1

進入右下角的 環境變數

2020 01 26 16 39 11 系統內容

在系統變數中,選擇 Path 後按下 編輯

2020 01 26 16 39 28 環境變數

按一下 新增,並將 Java 的 bin 資料夾路徑貼上,最後點擊 確定

2020 01 26 16 39 55 編輯環境變數

取得 SHA1 指紋

然後開啟命令提示字元,將目錄切換到你的 Keystore 位置,並輸入以下格式的指令:

keytool -exportcert -list -v -alias foo -keystore foo.keystore

請自行將 -alias 後的 foo 修改為你的 Alias、foo.keystore 修改為你的 Keystore 檔案名稱

解密後我們可以在憑證指紋欄位中找到你的 SHA1 指紋,將它複製貼上到前面控制台的輸入介面中。

2020 01 26 21 33 55 cmd

這邊顯示的東西不怎麼重要 …… 略過。

2020 01 26 21 50 00 已連結的應用程式 PlayerServiceTutorial Google Play Console

建立連結網路應用程式

接下來新增一個 連結網路應用程式,然後在啟動網址中輸入任一個網址。這東西只是要拿來過驗證,能過就行。

如果對網址沒想法,那你可以用 https://localhost/dummy

2020 01 26 22 07 59 已連結的應用程式 PlayerServiceTutorial Google Play Console

跟前面一樣,點擊 立即授權您的應用程式

2020 01 26 22 08 24 已連結的應用程式 PlayerServiceTutorial Google Play Console

彈出的視窗直接按確認就好,重要的是接下來這頁面給的東西。

已成功連結您的用戶端 ID 記錄下來,後面會用到。

2020 01 26 22 08 45 已連結的應用程式 PlayerServiceTutorial Google Play Console

新增事件

因為我們之後會用到 Play 服務的資源字串,所以需要先新增一個事件。這個事件可以是空事件,只是拿它來做當媒介。

進入 事件 介面,點擊 新增事件,隨便輸入名稱後按下 儲存

2020 01 26 22 14 34 新事件 PlayerServiceTutorial Google Play Console 1

點擊畫面中的 取得資源,並將顯示的 XML 字串紀錄下來。

2020 01 26 22 14 56 事件 PlayerServiceTutorial Google Play Console

設定 Play 套件參數

回到 Unity,從頂部選單進入 Window -> Google Play Games -> Setup -> Android Setup。

將剛才取得的 XML 字串 貼入 Resources Definition,用戶端 ID 請貼到 Web App Client ID 欄位中。

2020 01 26 22 15 27 Google Play Games Android Configuration

到這邊,基本上 API 的設定都完成了,接下來進入 Coding 時間。

Play Service 程式碼架構

初始化

PlayGamesClientConfiguration config = new PlayGamesClientConfiguration.Builder()
.RequestServerAuthCode(false /* Don't force refresh */)
.Build();

PlayGamesPlatform.InitializeInstance(config);
PlayGamesPlatform.Activate();

使用者登入

Social.localUser.Authenticate((bool success) =>
{
    if (success)
    {
        // TODO
    }
});

如果要取得使用者的 ID Token,需要先在前面的初始化 Builder() 中加入 .RequestIdToken(),再用這個方法來取得:

((PlayGamesLocalUser) Social.localUser).GetIdToken();

原始碼範例

飯粒 🍚

using UnityEngine;
using GooglePlayGames;
using GooglePlayGames.BasicApi;

public class GameManager : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        PlayGamesClientConfiguration config = new PlayGamesClientConfiguration.Builder()
        .RequestServerAuthCode(false /* Don't force refresh */)
        .RequestIdToken()
        .Build();

        PlayGamesPlatform.InitializeInstance(config);
        PlayGamesPlatform.Activate();

        Social.localUser.Authenticate((bool success) =>
        {
            if (success)
            {
                Debug.Log(((PlayGamesLocalUser)Social.localUser).GetIdToken());
            }
        });
    }
}

成果展示

這個程式筆記就先寫到這裡,如果有錯誤、問題或建議等可以在留言版告訴我,如果有幫到你的話也請幫我的 LikeCoin 拍個手或讚一下 FB 粉專

謝啦 (❁´◡`❁)~

訂閱
Notify of
guest
2 留言
最受好評的
最新的 最舊的
Inline Feedbacks
檢視所有留言
2
0
Would love your thoughts, please comment.x
()
x