C और C++ के लिए, Play की गेम सेवाओं का इस्तेमाल शुरू करें

इस गाइड में, Play की गेम सेवाओं के v2 Native SDK का इस्तेमाल करने के लिए, नेटिव C या C++ गेम प्रोजेक्ट सेट अप करने का तरीका बताया गया है. साथ ही, प्लैटफ़ॉर्म ऑथेंटिकेशन को इंटिग्रेट करने का तरीका भी बताया गया है. Play Games की अन्य सेवाओं की सुविधाओं को अपने गेम में इंटिग्रेट करने के लिए, इंटिग्रेशन ज़रूरी है. साथ ही, Play Games की सेवाओं को अपने बैकएंड गेम सर्वर में इंटिग्रेट करने के लिए भी इंटिग्रेशन ज़रूरी है.

इस्तेमाल की जा सकने वाली सुविधाएं

Play की गेम सेवाओं का v2 Native SDK बीटा वर्शन में है. यह सिर्फ़ साइन-इन सेवा के साथ काम करता है. फ़िलहाल, यह Play Games Services की अन्य सुविधाओं के साथ काम नहीं करता.

एपीआई के रेफ़रंस से जुड़ा दस्तावेज़

एसडीके की हेडर फ़ाइलों में, एपीआई के लिए रेफ़रंस दस्तावेज़ शामिल होते हैं. हेडर फ़ाइलें, एसडीके की फ़ाइलों में मौजूद include फ़ोल्डर में होती हैं. ये फ़ाइलें, आपके प्रोजेक्ट को एसडीके रिपॉज़िटरी के साथ सिंक करने के बाद उपलब्ध होती हैं.

ज़रूरी शर्तें

  • ऐसा गेम प्रोजेक्ट जिसमें C या C++ को मुख्य प्रोग्रामिंग भाषा के तौर पर इस्तेमाल किया जाता है.

  • आपके गेम प्रोजेक्ट और डेवलपमेंट एनवायरमेंट में, Gradle बिल्ड सिस्टम सेट अप होना चाहिए.

शुरू करने से पहले

आपको Google Play Console में 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 की गेम सेवाओं के 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 की सेवाओं के प्रोजेक्ट का आईडी तय करें. इसके लिए, फ़ाइल में ये लाइनें जोड़ें:

    <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 की गेम सेवाओं में पुष्टि कर लेता है, तब आपका गेम क्लाइंट, सर्वर के ऑथराइज़ेशन कोड का अनुरोध कर सकता है. आपका बैकएंड गेम सर्वर, इस कोड का इस्तेमाल करके Play की गेम सेवाओं के साथ सुरक्षित तरीके से कम्यूनिकेट कर सकता है. इससे आपका गेम सर्वर, पुष्टि किए गए खिलाड़ी के लिए डेटा को वापस पा सकता है, उसे अपडेट कर सकता है, और सेव कर सकता है. PgsGamesSignInClient_requestServerSideAccess फ़ंक्शन को कॉल करके, सर्वर ऑथराइज़ेशन कोड वापस पाया जा सकता है.

ज़्यादा जानकारी के लिए, सर्वर ऐक्सेस करने की गाइड देखें.