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

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

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

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

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

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

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

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

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

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

आपको Google Play Console में Play Games की सेवाएं सेट अप करनी होंगी.

अपना गेम प्रोजेक्ट सेट अप करना

अपना गेम प्रोजेक्ट सेट अप करने के लिए, यह तरीका अपनाएं.

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

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