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

این راهنما نحوه راه‌اندازی یک پروژه بازی بومی C یا C++ را برای استفاده از SDK بومی Play Games Services v2 و ادغام احراز هویت پلتفرم شرح می‌دهد. ادغام برای ادغام سایر ویژگی‌های Play Games Services در بازی شما و ادغام Play Games Services در سرور بازی backend شما ضروری است.

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

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

مستندات مرجع 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 Games Services خود را تعریف کنید. می‌توانید این کار را با اضافه کردن خطوط زیر به فایل انجام دهید:

    <manifest>
      <application>
        <meta-data android:name="com.google.android.gms.games.APP_ID"
                   android:value="@string/game_services_project_id"/>
      </application>
    </manifest>
    
  2. یک منبع رشته‌ای برای شناسه پروژه خود ایجاد کنید. این به بازی شما اجازه می‌دهد تا در زمان ساخت به شناسه دسترسی داشته باشد. برای ایجاد منبع، فایل 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 Games Services را که به طور خودکار هنگام اجرای بازی شما نمایش داده می‌شود، رد کند، ممکن است در طول جلسه بازی نظر خود را تغییر دهد. می‌توانید با فراخوانی PgsGamesSignInClient_signIn درخواست ورود را دوباره اجرا کنید، البته تا زمانی که هیچ بازیکنی در حال حاضر احراز هویت نشده باشد.

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

پس از اینکه یک بازیکن با موفقیت در سرویس‌های بازی‌های Play احراز هویت شد، کلاینت بازی شما می‌تواند یک کد مجوز سرور درخواست کند که سرور بازی backend شما می‌تواند از آن برای برقراری ارتباط ایمن با سرویس‌های بازی‌های Play استفاده کند. این به سرور بازی شما اجازه می‌دهد تا داده‌ها را برای بازیکن احراز هویت شده بازیابی، به‌روزرسانی و ذخیره کند. می‌توانید کد مجوز سرور را با فراخوانی تابع PgsGamesSignInClient_requestServerSideAccess بازیابی کنید.

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