В этом руководстве описывается, как настроить игровой проект на C или C++ для использования Play Games Services v2 Native SDK и интеграции аутентификации платформы . Интеграция необходима для интеграции других функций Play Games Services в вашу игру, а также для интеграции Play Games Services в ваш внутренний игровой сервер .
Поддерживаемые функции
Play Games Services v2 Native SDK находится в стадии бета-тестирования и поддерживает только службу входа. Другие функции Play Games Services пока не поддерживаются.
Справочная документация API
Заголовочные файлы SDK содержат справочную документацию по API. Они находятся в папке include
в файлах SDK, которые становятся доступны после синхронизации проекта с репозиторием SDK.
Требования
Игровой проект, использующий в качестве основного языка программирования C или C++.
В вашем игровом проекте и среде разработки должна быть настроена система сборки Gradle .
Прежде чем начать
Вам необходимо настроить Play Games Services в Google Play Console.
Настройте свой игровой проект
Выполните следующие шаги для настройки вашего игрового проекта.
Обновить 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)
Обновление build.gradle
В файле build.gradle
уровня приложения выполните следующие действия:
Убедитесь, что функция предварительной сборки включена.
Добавьте зависимость для Play Games Services v2 Native SDK:
-
com.google.android.gms:play-services-games-v2-native-c:17.0.0-beta1
-
Вот пример:
android {
...
buildFeatures {
prefab true
}
...
}
dependencies {
...
implementation "com.google.android.gms:play-services-games-v2-native-c:17.0.0-beta1"
}
Обновить AndroidManifest.xml
В файле
AndroidManifest.xml
укажите идентификатор проекта Play Games Services. Для этого добавьте в файл следующие строки:<manifest> <application> <meta-data android:name="com.google.android.gms.games.APP_ID" android:value="@string/game_services_project_id"/> </application> </manifest>
Создайте строковый ресурс для идентификатора вашего проекта. Это позволит игре получить доступ к идентификатору во время сборки. Чтобы создать ресурс, создайте файл
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>
Создайте и протестируйте свою игру. В случае успеха при запуске игры появится приглашение на вход или баннер с сообщением об успешном входе.
Получить идентификатор игрока
Ваша игра может получить доступ к информации об аутентифицированном игроке, извлекая его идентификатор. Вы можете получить идентификатор игрока, вызвав функцию GetPlayerID
, как показано в следующем примере.
#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 Games Services, автоматически отображаемое при запуске игры, он может передумать во время игрового сеанса. Вы можете повторно запустить приглашение на вход, вызвав PgsGamesSignInClient_signIn
, при условии, что ни один из игроков не прошёл аутентификацию.
Авторизация игрового сервера
После успешной аутентификации игрока в игровых сервисах Play ваш игровой клиент может запросить код авторизации сервера, который ваш внутренний игровой сервер может использовать для безопасного взаимодействия с игровыми сервисами Play. Это позволяет игровому серверу получать, обновлять и хранить данные аутентифицированного игрока. Вы можете получить код авторизации сервера, вызвав функцию PgsGamesSignInClient_requestServerSideAccess
.
Более подробную информацию см. в руководстве по доступу к серверу .