با Play Games Services برای C و C++ شروع کنید

این راهنما نحوه راه‌اندازی یک پروژه بازی C یا C++ را برای استفاده از Play Games Services v2 Native SDK و ادغام سرویس ورود به سیستم توضیح می‌دهد. برای ادغام سایر ویژگی‌های «خدمات بازی‌های Play» در بازی و ادغام خدمات بازی‌های Play در سرور بازی‌های پشتیبان، یکپارچه‌سازی ورود به سیستم مورد نیاز است.

ویژگی های پشتیبانی شده

Play Games Services v2 Native SDK در نسخه بتا است و فقط از سرویس ورود به سیستم پشتیبانی می‌کند. هنوز از سایر ویژگی‌های خدمات بازی‌های Play پشتیبانی نمی‌کند.

اسناد مرجع API

فایل‌های هدر SDK حاوی اسناد مرجع برای APIها هستند. فایل‌های هدر در پوشه include در فایل‌های SDK قرار دارند که پس از همگام‌سازی پروژه خود با مخزن SDK در دسترس هستند.

الزامات

  • یک پروژه بازی که از C یا C++ به عنوان زبان برنامه نویسی اصلی استفاده می کند.

  • پروژه بازی و محیط توسعه شما باید دارای سیستم ساخت Gradle باشد.

قبل از شروع

باید خدمات بازی‌های Play را در کنسول Google Play راه‌اندازی کنید .

پروژه بازی خود را تنظیم کنید

مراحل زیر را برای راه اندازی پروژه بازی خود انجام دهید.

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 را به روز کنید

  1. در فایل AndroidManifest.xml ، شناسه پروژه خدمات بازی‌های Play خود را تعریف کنید. می توانید این کار را با افزودن خطوط زیر به فایل انجام دهید:

    <manifest>
      <application>
        <meta-data android:name="com.google.android.gms.games.APP_ID"
                   android:value="@string/game_services_project_id"/>
      </application>
    </manifest>
    
  2. یک منبع رشته ای برای شناسه پروژه خود ایجاد کنید. این به بازی شما اجازه می دهد در زمان ساخت به 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>
    
  3. بازی خود را بسازید و آزمایش کنید. در صورت موفقیت، هنگامی که بازی خود را راه اندازی می کنید، یک اعلان ورود به سیستم یا یک بنر ورود موفق به سیستم نمایش داده می شود.

شناسه بازیکن را دریافت کنید

بازی شما می‌تواند با بازیابی شناسه بازیکن به اطلاعات بازیکنی که وارد سیستم شده است دسترسی پیدا کند. با فراخوانی تابع 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» را که به‌طور خودکار هنگام راه‌اندازی بازی شما نمایش داده می‌شود رد کند، ممکن است در طول جلسه بازی نظر خود را تغییر دهد. می‌توانید با فراخوانی PgsGamesSignInClient_signIn ، درخواست ورود را مجدداً راه‌اندازی کنید تا زمانی که هیچ بازیکنی در حال حاضر وارد نشده است.

مجوز سرور بازی

هنگامی که بازیکنی با موفقیت وارد «خدمات بازی‌های Play» شد، مشتری بازی شما می‌تواند یک کد مجوز سرور درخواست کند که سرور بازی باطن شما می‌تواند از آن برای برقراری ارتباط امن با «خدمات بازی‌های Play» استفاده کند. این به سرور بازی شما اجازه می‌دهد تا داده‌ها را برای بازیکنی که به سیستم وارد شده است بازیابی، به‌روزرسانی و ذخیره کند. می توانید کد مجوز سرور را با فراخوانی تابع PgsGamesSignInClient_requestServerSideAccess بازیابی کنید.

برای اطلاعات بیشتر، راهنمای دسترسی به سرور را ببینید.