本文將說明如何設定 C++ 專案,以便使用第 2 版原生 C 或 C++,並驗證驗證服務。
事前準備
您必須在 Google Play 管理中心設定 Play 遊戲服務。
應用程式必要條件
請確認應用程式的版本檔案使用下列的值:
19中的minSdkVersion或以上版本compileSdkVersion28以上版本
設定遊戲專案
如要設定遊戲專案,請完成下列步驟。
更新 build.gradle
在應用程式層級的 build.gradle 檔案中,執行下列操作:
確認已啟用 prefab 建構功能。
新增第 2 版原生 SDK (Beta 版) 的依附元件:
com.google.android.gms:play-services-games-v2-native-c-1.0.0-beta01
範例如下:
android {
...
buildFeatures {
prefab true
}
...
}
dependencies {
...
implementation "com.google.android.gms:play-services-games-v2-native-c:21.0.0-beta1"
}
更新 CMakeLists.txt
在 CMakeLists.txt 檔案中,新增下列程式碼:
find_package(com.google.android.gms.games.v2.c REQUIRED CONFIG)
// link games_static for -DANDROID_STL=c++_static or default
// link games_shared for -DANDROID_STL=c++_shared
target_link_libraries(
app PUBLIC com.google.android.gms.games.v2.c::games_static)
更新 AndroidManifest.xml
如要在
AndroidManifest.xml檔案中定義 Play 遊戲服務專案 ID,請加入下列程式碼:<manifest> <application> <meta-data android:name="com.google.android.gms.games.APP_ID" android:value="@string/game_services_project_id"/> </application> </manifest>為專案 ID 建立字串資源。這樣一來,遊戲在建構時間就能存取 ID。如要建立資源,請建立
project_root/app/src/main/res/values/games-ids.xml檔案並新增下列項目:<?xml version="1.0" encoding="utf-8"?> <resources> <string name="game_services_project_id" translatable="false">add your Project ID here</string> </resources>建構並測試遊戲。如果成功,啟動遊戲時,遊戲會顯示登入提示或成功的登入橫幅。
取得玩家 ID
遊戲只要擷取玩家 ID,即可存取已驗證玩家的玩家資訊。您可以呼叫 GetPlayerId 函式來擷取玩家 ID,如以下範例所示。
#include <assert.h>
#include "gni/gni.h"
#include "gni/gni_task.h"
#include "pgs/pgs_play_games.h"
#include "pgs/pgs_players_client.h"
// A callback for a GniTask returned from PgsPlayersClient_getCurrentPlayerId.
void OnGetCurrentPlayerIdCompleteCallback(GniTask *task, void *user_data) {
if (!GniTask_isSuccessful(task)) {
const char *error_message = nullptr;
GniTask_getErrorMessage(task, &error_message);
// Log error message here.
GniString_destroy(error_message);
GniTask_destroy(task);
return;
}
const char *result = nullptr;
PgsPlayersClient_getCurrentPlayerId_getResult(task, &result);
// Log player ID here.
GniString_destroy(result);
GniTask_destroy(task);
}
// Gets the player ID.
void GetPlayerId(jobject main_activity) {
static const PgsPlayersClient *players_client =
PgsPlayGames_getPlayersClient(main_activity);
GniTask *get_current_player_id_task =
PgsPlayersClient_getCurrentPlayerId(players_client);
assert(get_current_player_id_task != nullptr);
GniTask_addOnCompleteCallback(get_current_player_id_task,
OnGetCurrentPlayerIdCompleteCallback,
nullptr);
}
// Entry point for our test app
void TestPGSNative(JNIEnv *env, jobject main_activity) {
JavaVM *java_vm;
env->GetJavaVM(&java_vm);
GniCore_init(java_vm, main_activity);
GetPlayerId(main_activity);
}
重新啟動登入提示
如果玩家拒絕在遊戲啟動時自動顯示的初始 Play 遊戲服務登入提示,玩家可能會在遊戲工作階段期間改變心意。只要目前沒有玩家通過驗證,即可呼叫 PgsGamesSignInClient_signIn 來重新啟動登入提示。
遊戲伺服器授權
玩家成功通過 Play 遊戲服務驗證後,遊戲用戶端即可要求提供伺服器授權碼,讓後端遊戲伺服器可用來安全地與 Play 遊戲服務進行通訊。這可讓遊戲伺服器擷取、更新及儲存已驗證玩家的資料。您可以呼叫 PgsGamesSignInClient_requestServerSideAccess 函式來擷取伺服器授權碼。
詳情請參閱伺服器存取指南。