Android गेम में Play की गेम सेवाओं से जुड़ी समस्या हल करना

इस पेज पर, Google Play Games Services की मदद से Android गेम डेवलप करते समय आने वाली समस्याओं को हल करने का तरीका बताया गया है.

लॉग इन हो रहा है

अपने गेम से जुड़ी समस्याओं को हल करने के लिए, adb shell कमांड का इस्तेमाल करके अपने डिवाइस पर ज़्यादा जानकारी वाला लॉगिंग चालू किया जा सकता है. इसके बाद, logcat का इस्तेमाल करके, Google Play Games Services के लॉग मैसेज देखे जा सकते हैं.

प्रवेश करना सक्षम करें

अपने टेस्ट डिवाइस पर लॉगिंग की सुविधा चालू करने के लिए:

  1. डिवाइस को उस मशीन से कनेक्ट करें जिस पर Android SDK इंस्टॉल है.

  2. कोई टर्मिनल खोलें और यह कमांड चलाएं:

    adb shell setprop log.tag.Games VERBOSE
  3. डिवाइस पर अपना गेम चलाएं और उस समस्या को फिर से देखें जिसे आपको डीबग करना है.

  4. लॉग देखें:

    adb logcat

लॉगिंग की सुविधा बंद करना

अपने डिवाइस पर Play Games services के लिए ज़्यादा जानकारी वाली लॉगिंग बंद करने और लॉगिंग के मूल व्यवहार पर वापस जाने के लिए, यह कमांड चलाएं:

adb shell setprop log.tag.Games INFO

प्रवेश करने में असमर्थ

अगर खिलाड़ियों को अपने गेम में साइन इन करने में समस्या आ रही है, तो सबसे पहले पक्का करें कि आपने क्लाइंट आईडी बनाने और गेम सेवाओं को कॉन्फ़िगर करने के लिए दिए गए निर्देशों का पालन किया हो. अगर आपको अब भी साइन इन करने से जुड़ी गड़बड़ियां दिखती हैं, तो नीचे दिए गए आइटम देखकर पक्का करें कि आपका गेम सही तरीके से सेट अप किया गया है.

अपने मेटाडेटा टैग की जांच करना

आपके AndroidManifest.xml में गेम का मेटाडेटा टैग होना चाहिए. यह पुष्टि करने के लिए कि आपके मेटाडेटा टैग सही तरीके से सेट अप किए गए हैं:

  1. अपना AndroidManifest.xml खोलें और पुष्टि करें कि इसमें meta-data टैग शामिल है, जैसा कि यहां दिखाया गया है:

    <meta-data android:name="com.google.android.gms.games.APP_ID"
        android:value="@string/app_id" />
    
  2. अपने @string/app_id संसाधन की परिभाषा ढूंढें. आम तौर पर, इसे res/xml डायरेक्ट्री में मौजूद एक्सएमएल फ़ाइल में तय किया जाता है. उदाहरण के लिए, res/xml/strings.xml या res/xml/ids.xml.

  3. पुष्टि करें कि @string/app_id संसाधन की वैल्यू, आपके ऐप्लिकेशन के अंकों वाले आईडी से मेल खाती हो. इस संसाधन की वैल्यू में सिर्फ़ अंक होने चाहिए. उदाहरण के लिए:

    <string name="app_id">123456789012</string>
    

अपने पैकेज का नाम देखना

आपके गेम का पैकेज नाम, आपके क्लाइंट आईडी पर दिए गए पैकेज नाम से मेल खाना चाहिए. पैकेज के नाम की पुष्टि करने के लिए:

  1. अपना AndroidManifest.xml खोलें और पुष्टि करें कि आपके गेम के पैकेज का नाम सही है. पैकेज का नाम, manifest टैग में package एट्रिब्यूट की वैल्यू होती है.

  2. क्लाइंट आईडी बनाते समय दिए गए पैकेज के नाम की पुष्टि करें. Google Play Console में पैकेज के नाम की पुष्टि करने के लिए, Play Console पर जाएं और अपने गेम से जुड़ी एंट्री पर क्लिक करें.

  3. लिंक किए गए ऐप्लिकेशन टैब पर जाएं और क्लाइंट आईडी की सूची देखें. इस सूची में, लिंक किया गया कोई ऐसा Android ऐप्लिकेशन होना चाहिए जिसका पैकेज नाम, आपके AndroidManifest.xml में मौजूद पैकेज नाम से मेल खाता हो. अगर नाम मेल नहीं खाता है, तो पैकेज के सही नाम के साथ एक नया क्लाइंट आईडी बनाएं और फिर से साइन इन करने की कोशिश करें.

सर्टिफ़िकेट फ़िंगरप्रिंट की जांच करना

जिस सर्टिफ़िकेट से आपने अपने गेम पर हस्ताक्षर किया है वह आपके क्लाइंट आईडी से जुड़े सर्टिफ़िकेट फ़िंगरप्रिंट से मेल खाना चाहिए. इसकी पुष्टि करने के लिए, पहले अपने सर्टिफ़िकेट का SHA1 फ़िंगरप्रिंट इस तरह देखें:

  1. अपनी सर्टिफ़िकेट फ़ाइल ढूंढें और उसका SHA1 फ़िंगरप्रिंट पाएं. SHA1 फ़िंगरप्रिंट पाने के लिए, यह कमांड चलाएं:

    keytool -exportcert -alias your-key-name -keystore /path/to/your/keystore/file -list -v
    
  2. आउटपुट में, SHA1: लेबल वाले हेक्साडेसिमल अंकों के क्रम पर ध्यान दें. यह आपके सर्टिफ़िकेट का फ़िंगरप्रिंट है.

इसके बाद, देखें कि आपका बिल्ड टूल इस सर्टिफ़िकेट का इस्तेमाल कर रहा है या नहीं:

  1. अपने बिल्ड टूल से अपने गेम का APK जनरेट करें और उस पर अपने पसंदीदा सर्टिफ़िकेट से हस्ताक्षर करें. जनरेट किए गए APK को किसी अस्थायी डायरेक्ट्री में कॉपी करें.
  2. अपने APK को अनज़िप करने के लिए, अस्थायी डायरेक्ट्री में यह कमांड चलाएं.

    unzip YourGame.apk
    
  3. आरएसए सर्टिफ़िकेट फ़ाइल का इस्तेमाल करके निजी पासकोड जनरेट करने के लिए:

    keytool -printcert -file META-INF/CERT.RSA
    

    इसके अलावा, डीएसए सर्टिफ़िकेट फ़ाइल का इस्तेमाल करके निजी पासकोड जनरेट किया जा सकता है:

    keytool -printcert -file META-INF/CERT.DSA
    
  4. SHA1: लेबल वाली लाइन पर, हेक्साडेसिमल अंकों के क्रम पर ध्यान दें.

    अंकों का यह क्रम, पिछले चरण में दिए गए आपके सर्टिफ़िकेट के फ़िंगरप्रिंट से मेल खाना चाहिए. अगर कोई मैच नहीं होता है, तो इसका मतलब है कि आपके पास मौजूद सर्टिफ़िकेट का इस्तेमाल करके, ऐप्लिकेशन पर हस्ताक्षर करने के लिए, आपके बिल्ड टूल या सिस्टम को कॉन्फ़िगर नहीं किया गया है. इस मामले में, अपने बिल्ड एनवायरमेंट के दस्तावेज़ देखें और यह पता लगाएं कि इसे सही तरीके से कैसे कॉन्फ़िगर किया जाए. इसके बाद, फिर से साइन इन करने की कोशिश करें.

इसके बाद, देखें कि सर्टिफ़िकेट का फ़िंगरप्रिंट, आपके क्लाइंट आईडी में कॉन्फ़िगर किए गए फ़िंगरप्रिंट से मेल खाता है या नहीं. ऐसा करने के लिए:

  1. Play Console खोलें और अपने गेम पर जाएं.
  2. गेम की जानकारी पेज पर, सबसे नीचे तक स्क्रोल करें और लिंक किए गए Google Cloud Platform प्रोजेक्ट के लिंक पर क्लिक करें.
  3. अपना प्रोजेक्ट चुनें.
  4. बाईं ओर मौजूद साइडबार में, एपीआई और पुष्टि को चुनें. पक्का करें कि एपीआई की दिखाई गई सूची में, Google Play games services API का स्टेटस चालू हो.
  5. बाईं ओर मौजूद साइडबार में, रजिस्टर किए गए ऐप्लिकेशन चुनें.
  6. OAuth 2.0 क्लाइंट आईडी सेक्शन को बड़ा करें और सर्टिफ़िकेट का फ़िंगरप्रिंट (SHA1) नोट करें.

अगर यह फ़िंगरप्रिंट, पिछले चरणों में दिए गए आपके सर्टिफ़िकेट के फ़िंगरप्रिंट से मेल नहीं खाता है, तो आपको सर्टिफ़िकेट के सही फ़िंगरप्रिंट के साथ नया क्लाइंट आईडी बनाना होगा. आपको नया क्लाइंट आईडी, Google Cloud Platform प्रोजेक्ट में नहीं, बल्कि Play Console में बनाना होगा.

देखें कि टेस्ट खाते चालू हैं या नहीं

किसी गेम को पब्लिश करने से पहले, Play Console में गेम बनाने वाले खाते को टेस्टर के तौर पर भी चालू करना ज़रूरी है. यह देखने के लिए कि इसे सही तरीके से कॉन्फ़िगर किया गया है या नहीं:

  1. Play Console खोलें और अपने गेम पर जाएं.
  2. टेस्टिंग टैब खोलें.
  3. देखें कि जिस खाते से साइन इन करने की कोशिश की जा रही है वह टेस्टर की सूची में है या नहीं.

अगर वह खाता सूची में नहीं है जिससे आपको साइन इन करना है, तो उसे सूची में जोड़ें. इसके बाद, कुछ मिनट इंतज़ार करें और फिर से साइन इन करने की कोशिश करें.

Proguard से जुड़ी समस्याएं

अगर Proguard का इस्तेमाल किया जा रहा है और आपको बदलाव किए गए APK में गड़बड़ियां दिख रही हैं, तो अपने AndroidManifest.xml पर टारगेट एपीआई लेवल देखें. इसे 17 या इससे ज़्यादा पर सेट करना न भूलें.

सेटअप से जुड़ी समस्याओं की अन्य वजहें

गड़बड़ियों की अन्य सामान्य वजहें देखें:

  • अगर आपका गेम पब्लिश हो गया है, तो देखें कि गेम की सेटिंग भी पब्लिश की गई हैं या नहीं. गेम की सेटिंग पब्लिश किए बिना भी ऐप्लिकेशन को पब्लिश किया जा सकता है. इसके लिए, Google Play Console पर जाएं और अपने ऐप्लिकेशन पर जाएं. इसके बाद, देखें कि गेम के नाम के बगल में मौजूद बॉक्स से यह पता चलता हो कि गेम पब्लिश हो गया है. अगर स्टेटस "पब्लिश करने के लिए तैयार" या "टेस्ट करने के लिए तैयार" जैसा कोई दूसरा स्टेटस दिखाता है, तो बॉक्स पर क्लिक करें और गेम पब्लिश करें को चुनें.
  • अगर आपको अपना गेम पब्लिश करने में समस्या आ रही है, तो देखें कि किसी एक क्लाइंट आईडी में नए इंस्टॉल के लिए, इस ऐप्लिकेशन को प्राथमिकता दी जाती है विकल्प चालू हो.

बिना पहचान वाले दर्शक

पहचान छिपाकर सुनने वालों का इस्तेमाल न करें. अनाम लिसनर, ऐसे लिसनर इंटरफ़ेस के लागू होने हैं जिन्हें इनलाइन में तय किया गया है. इसकी जानकारी नीचे दी गई है.

    ImageManager im = ...;

    // Anonymous listener -- dangerous:
    im.loadImage(new ImageManager.OnImageLoadedListener() {
        @Override
        public void onImageLoaded(Uri uri, Drawable drawable) {
            // ...code...
        }
    }

बिना पहचान वाले लिसनर भरोसेमंद नहीं होते, क्योंकि Play Games SDK टूल उन्हें कमज़ोर रेफ़रंस के तौर पर सेव करता है. इसका मतलब है कि इन्हें इस्तेमाल करने से पहले, गै़रबेज कलेक्टर उन्हें वापस ले सकता है. इसके बजाय, आपको Activity जैसे किसी पर्सिस्टेंट ऑब्जेक्ट का इस्तेमाल करके, लिसनर को लागू करना चाहिए.

    public class MyActivity extends Activity
            implements ImageManager.OnImageLoadedListener {

        private void loadOurImages() {
            ImageManager im = ...;
            im.loadImage(this);
        }

        @Override
        public void onImageLoaded(Uri uri, Drawable drawable) {
            // ...code...
        }
    }