Featured image of post Login Playfab với Google Play Game Service

Login Playfab với Google Play Game Service

Đăng nhập Playfab bằng Google Play Game Service trong Unity

Giới thiệu

Tuần trước mình có thử sử dụng Google Play Game Service (GPGS) làm tùy chọn để đăng nhập cho Playfab. Lần cuối mà mình sử dụng GPGS là khoảng 4 năm trước, ấn tượng hồi đấy là nó khó sử dụng việc setup rất rắc rối nữa cộng với việc hạn chế về việc lưu dữ liệu nên mình không sử dụng nó. Điểm cộng lớn nhất chắc là nó free.

Tại sao chúng ta cần login bằng GPGS?

Nếu bạn xem qua sơ đồ bên dưới ta sẽ thấy rằng lần đầu mở game lên thì chúng ta sẽ chỉ login silent mà thôi, sau đấy user sẽ chọn liên kết với các tài khoản social như Facebook, Google …

với Facebook nó có một điểm yếu là policy của nó khiến dự án của bạn có thể DeActive khiến user mất tài khoản. Công ty mình có 6 dự án và 5 cái bị deactive facebook rồi .

Lưu ý là GPGS chỉ dành riêng cho Android vì vậy nên nó sẽ không hoạt động trên iOS cũng như PC.
Ngoài ra Google và GPGS là hai cách thức login hoàn toàn khác nhau. Trong bài viết này mình chỉ hướng dẫn với GPGS.

Môi trường

Cài đặt

Tạo project Unity

  1. Bạn cần tạo một project Unity nếu chưa có và đổi platform sang Android.

  1. Điền Product Name và Package Name, ở trong ví dụ này Product Name và Package Name của mình là Login GPGScom.pancake.login

  1. Đảm bảo tùy chọn minify bị tắt trong publishing setting

  1. Import Google Play Game Service package, bạn có thể tìm thấy unity package của nó trong folder curent-build

  1. Import PlayFab SDK, bạn có thể chọn cài bằng PlayFab Unity Editor Extension hoặc tải trực tiếp SDK package rồi cài ở đây

  1. Nếu nó có hỏi bạn fore resolve thì chọn không (disabled)

Tạo project trên Google play console

Bạn đăng nhập vào google play console và chọn tạo app mới. Điền các thông tin như hình sau rồi nhấn nút create app thôi.

Tạo project trên Google Cloud Console

Nếu bạn chưa tạo project trên Google Cloud hoặc chưa tạo project firebase, mặc định nếu tạo project firebase thì nó cũng sẽ tạo project google cloud tương ứng.
Nếu bạn tạo project google cloud trước thì lúc tạo firebase bạn có thể chọn project google cloud đã tồn tại để tạo firebase.

Tạo project trên Playfab

Việc tạo project trong playfab khá đơn giản bạn chỉ cần điền tên ứng dụng là xong.

Lấy SHA-1 certificate fingerprint

Ở đây thì chúng ta có hai loại certificate là Upload keyApp signing key. SHA-1 của Upload key thì bạn có thể tự lấy thông qua keystore của bạn bằng cách chạy câu lệnh sau bằng terminal.

  • Đầu tiên bạn cần bật terminal trong folder bin của jdk, lưu ý là nếu bạn tạo keystore bằng unity 2021 trở xuống thì do các bản này unity vẫn sử dụng JDK 8.
    Còn từ unity 2022 đã dùng JDK 11 thì key store được tạo bởi JDK 11 (unity 2022) sẽ không sử dụng JDK 8 để phân tích thông tin được nên khi chạy câu lệnh với terminal sẽ hiển thị lỗi. Nghĩa là nếu bạn tạo keystore bằng bản JDK nào thì phải dùng bản JDK đấy để đọc thông tin.
1
keytool -keystore path-to-debug-or-production-keystore -list -v

Còn App signing key sẽ được google tạo ra khi bạn tải bản build của mình lên google play console, bạn có thể build bản internal testing rồi tải lên google play console để lấy được các thông tin này.

Bạn Có thể tìm thấy chúng trong App signing trong mục Setup

Tạo credentials

Oke sau khi bạn đã có được 2 cái SHA-1 này rồi chúng ta sẽ sang bước tiếp theo.

Quay lại với Google Cloud Console. Bạn hãy mở mục APIs & Services lên.

Sau đấy chọn menu Credentials ở menu bên tay trái

Giờ chúng ta cần tạo Credentials với loại là OAuth client ID

Chọn loại Applicate là Android điền tên giống với tên ứng dụng, package name giống package name của project ở đây là com.pancake.login, SHA-1 bạn điền SHA-1 đã lấy được từ bước trước đấy. Lưu ý là chúng ta có 2 cái SHA-1 vì vậy chúng ta sẽ tạo 2 cái credentials với loại là OAuth client ID cho application là Android. Name và Package name vẫn điền giống nhau nhưng chỉ khác SHA-1 certificate fingerprint mà thôi.

Tiếp theo chúng ta tạo tiếp một OAth Client ID với Application type là Web Application. Name vẫn điền giống tên ứng dụng của bạn trong ví dụ này là Login GPGS.

  • Authorized JavaScript origins nhấn vào button add URI và ở mục này chúng ta sẽ điền API endpoint lấy được từ Playfab. Bạn có thể tìm thấy nó trong menu Title Settings > API Features > API endpoint. Nó sẽ có dạng là https/[title id].playfabapi.com

  • Authorized redirect URIs nhấn vào button add URI và ở mục này chúng ta sẽ điền chính xác là https://oauth.playfab.com/oauth2/google

1
https://oauth.playfab.com/oauth2/google

Ngay bên dưới menu Credentials là menu OAuth consent screen chọn user type là external và nhấn create

Điền tên ứng dụng, user support email và logo ứng dụng của bạn, developer contect infomation cũng điền email của bạn vào. Authorized domains bạn có thể bỏ qua không cần điền vì nó sẽ tự điền dựa vào creadentials đã tạo trước đó rồi.

Giờ thì bạn nhấn save and continue để sang bước tiếp theo thôi.

Nhấn vào button Add or remove scopes sau đấy tìm kiếm với tên là Google Play Game Services rồi chọn scope là ../auth/games, ../auth/games_lite../auth/drive.appdata.

Nhấn button Update sau đấy nhấn Save And Continue để sang bước tiếp theo.

Add test user nếu có, đây là các tài khoản đã liên kết với Google và Goolge Play Games. Bạn có thể tạm bỏ qua bước này.
Sau đấy tiếp tục nhấn nút Save And Continue.

Như vậy là chúng ta đã xong cài đặt trên Google Cloud Console. Giờ chúng ta sẽ quay lại Google Play Console.

Cấu hình Google Play Game

Trong menu bên tay trái trong Google Play Console tìm đến mục Play Game Services và chọn Configuration

Lúc này bạn có thể chọn Cloud project đã tạo ở bước trước đó. nếu cloud project đó đã được link với một project khác nó sẽ không hiện ở đây nữa.

Bạn sẽ cần cài đặt theo các yêu cầu ở đây.

  • Bạn sẽ cần upload một bản aab lên bao gồm gpgs sdk đã được build kèm theo.
  • Cài đặt credential liên kết với credential được tạo ở google cloud console trước đấy. Ở bước này bạn cần tạo 3 credential với 2 cái cho Android và 1 cái cho Game server.

Ỏ đây mình đã thêm cả 3 cái nên không có OAuth client nào hiển thị để chọn ở đây.

Sau khi đã cài đặt xong chúng ta sẽ publish configuation cho Google play Game service

Cài đặt add-on google cho PlayFab

Đăng nhập vào PlayFab di chuyển đến mục Add-ons chọn Google.

  • Google App Package ID: điền package name project của bạn
  • Google App License Key : điền Base64-encoded RSA public key được tìm thấy trong licensing trong menu Monetization setup
  • Google OAuth Client ID : điền Client ID của credentials bạn tạo với dạng là Web Application
  • Google OAuth Client Secret : điền Client secret của credentials bạn tạo với dạng là Web Application

Nhấn button save để lưu setting lại.

Quay lại với Unity

Tạo PlayFabSharedSettings thông qua menu PlayFab > MakePlayFabSharedSettings sau đấy điền title iddevelopment secret key

Tiếp theo chúng ta sẽ thực hiện setup cho Google Play Games trong Unity. Bật bảng cài đặt thông qua menu Window > Google Play Games > Setup > Android Setup.

  • Resource definition bạn lấy từ Google play console bằng button Get Resources

  • Client ID sẽ điền Client ID của Web Application

Giờ nhấn setup

  • Force Resolve thông qua menu Assets > External Dependency Manager > Android Resolver > Force Resolver

  • Tạo Script có tên là GooglePlayGameManager
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
using System;
using GooglePlayGames;
using GooglePlayGames.BasicApi;
using System.Threading.Tasks;
using PlayFab;
using PlayFab.ClientModels;
using UnityEngine;


public class GooglePlayGameManager : MonoBehaviour
{
    public string token;
    private void Awake() { PlayGamesPlatform.Activate(); }

    private async void Start()
    {
        await LoginGooglePlayGames();

        LoginPlayfab();
    }

    private void LoginPlayfab()
    {
        PlayFabClientAPI.LoginWithGooglePlayGamesServices(new LoginWithGooglePlayGamesServicesRequest
            {
                CreateAccount = true,
                TitleId = "B77AD",
                ServerAuthCode = token
            },
            _ =>
            {
                Debug.Log("Login Playfab Success!!!");
            },
            error =>
            {
                Debug.Log("Login Playfab Error :" + error.ErrorMessage);
            });
    }

    private Task LoginGooglePlayGames()
    {
        var taskSource = new TaskCompletionSource<object>();
        PlayGamesPlatform.Instance.Authenticate((success) =>
        {
            if (success == SignInStatus.Success)
            {
                Debug.Log("Login with Google Play games successful.");
                PlayGamesPlatform.Instance.RequestServerSideAccess(true,
                    code =>
                    {
                        token = code;
                        Debug.Log("Authorization code: " + code);
                        taskSource.SetResult(null);
                    });
            }
            else
            {
                PlayGamesPlatform.Instance.ManuallyAuthenticate(success =>
                {
                    if (success == SignInStatus.Success)
                    {
                        PlayGamesPlatform.Instance.RequestServerSideAccess(true,
                            code =>
                            {
                                token = code;
                                Debug.Log("Authorization code: " + code);
                                tcs.SetResult(null);
                            });
                    }
                    else
                    {
                        Debug.Log("Login Unsuccessful");
                        taskSource.SetException(new Exception("Failed"));
                    }
                });
            }
        });
        return taskSource.Task;
    }
}

Gắn script GooglePlayGameManager vào một GameObject trong scene sau đó lưu lại và build aab sau đó upload lên internal testing và chạy thử

Bạn sẽ nhận được đoạn log như dưới đây thì chứng tỏ là mọi thứ đã thành công.

yenmoc
Lượt nghé thăm