इस पेज पर, Google Play की गेम सेवाओं का इस्तेमाल करके, Android गेम डेवलप करते समय आने वाली समस्याओं को हल करने का तरीका बताया गया है.
लॉगिंग करना
अपने गेम से जुड़ी समस्याओं को हल करने के लिए, adb shell निर्देश का इस्तेमाल करके, अपने डिवाइस पर वर्बोस लॉगिंग चालू करें. इसके बाद, logcat का इस्तेमाल करके, Google Play की गेम सेवाओं के लॉग मैसेज देखे जा सकते हैं.
लॉगिंग की सुविधा चालू करना
अपने टेस्ट डिवाइस पर लॉगिंग की सुविधा चालू करने के लिए:
डिवाइस को ऐसी मशीन से कनेक्ट करें जिस पर Android SDK इंस्टॉल हो.
कोई टर्मिनल खोलें और यह निर्देश चलाएं:
adb shell setprop log.tag.Games VERBOSE
डिवाइस पर गेम चलाएं और उस समस्या को दोहराएं जिसे आपको डीबग करना है.
लॉग देखें:
adb logcat
लॉगिंग की सुविधा बंद करना
अपने डिवाइस पर Google Play की गेम सेवाओं के लिए वर्बोस लॉगिंग बंद करने और लॉगिंग के ओरिजनल तरीके पर वापस जाने के लिए, यह निर्देश चलाएं:
adb shell setprop log.tag.Games INFO
साइन-इन करने से जुड़ी समस्या
अगर अपने गेम में, खिलाड़ियों को साइन इन करने में समस्या आ रही है, तो पहले पक्का करें कि आपने क्लाइंट आईडी बनाने और गेम सेवाओं को कॉन्फ़िगर करने से जुड़े निर्देशों का पालन किया हो. अगर आपको अब भी साइन-इन करने में समस्या आ रही है, तो यहां बताई गई चीज़ों की जांच करें. इससे यह पक्का किया जा सकेगा कि आपका गेम सही तरीके से सेट अप किया गया है.
मेटाडेटा टैग की जांच करना
आपके AndroidManifest.xml में गेम का मेटाडेटा टैग होना चाहिए. यह पुष्टि करने के लिए कि आपके मेटाडेटा टैग सही तरीके से सेट अप किए गए हैं:
अपना
AndroidManifest.xmlखोलें और पुष्टि करें कि इसमें नीचे दिखाए गए तरीके सेmeta-dataटैग शामिल हो:<meta-data android:name="com.google.android.gms.games.APP_ID" android:value="@string/app_id" />यह पता लगाएं कि आपका
@string/app_idसंसाधन कहां कॉन्फ़िगर किया गया है. आम तौर पर, इसेres/xmlडायरेक्ट्री में मौजूद किसी एक्सएमएल फ़ाइल में कॉन्फ़िगर किया जाता है. उदाहरण के लिए,res/xml/strings.xmlयाres/xml/ids.xml.पुष्टि करें कि
@string/app_idसंसाधन की वैल्यू, आपके ऐप्लिकेशन के न्यूमेरिक आईडी से मेल खाती हो. इस संसाधन की वैल्यू में सिर्फ़ अंक होने चाहिए. उदाहरण के लिए:<string name="app_id">123456789012</string>
अपने पैकेज का नाम देखना
आपके गेम के पैकेज का नाम, आपके क्लाइंट आईडी पर दिए गए पैकेज के नाम से मेल खाना चाहिए. पैकेज के नाम की पुष्टि करने के लिए:
AndroidManifest.xmlखोलें और पुष्टि करें कि आपके गेम के पैकेज का नाम सही है. पैकेज का नाम वही होता है जोmanifestटैग में मौजूदpackageएट्रिब्यूट की वैल्यू होती है.क्लाइंट आईडी बनाते समय, आपने जो पैकेज का नाम दिया था उसकी पुष्टि करें. Google Play Console में पैकेज के नाम की पुष्टि करने के लिए, Play Console पर जाएं और अपने गेम से जुड़ी एंट्री पर क्लिक करें.
लिंक किए गए ऐप्लिकेशन टैब पर जाएं और क्लाइंट आईडी की सूची देखें. इस सूची में, Android से लिंक किया गया ऐसा ऐप्लिकेशन होना चाहिए जिसका पैकेज नाम, आपके
AndroidManifest.xmlमें मौजूद पैकेज नाम से मेल खाता हो. अगर दोनों मेल नहीं खाते हैं, तो पैकेज के सही नाम के साथ एक नया क्लाइंट आईडी बनाएं. इसके बाद, फिर से साइन इन करने की कोशिश करें.
सर्टिफ़िकेट फ़िंगरप्रिंट की जांच करना
जिस सर्टिफ़िकेट से गेम पर हस्ताक्षर किया जा रहा है वह आपके क्लाइंट आईडी से जुड़े सर्टिफ़िकेट फ़िंगरप्रिंट से मेल खाना चाहिए. इसकी पुष्टि करने के लिए, सबसे पहले अपने सर्टिफ़िकेट के SHA1 फ़िंगरप्रिंट की जांच करें. इसके लिए, यह तरीका अपनाएं:
अपनी सर्टिफ़िकेट फ़ाइल ढूंढें और उसका SHA1 फ़िंगरप्रिंट हासिल करें. SHA1 फ़िंगरप्रिंट हासिल करने के लिए, यह निर्देश चलाएं:
keytool -exportcert -alias your-key-name -keystore /path/to/your/keystore/file -list -vआउटपुट में,
SHA1:के तौर पर लेबल किए गए हेक्साडेसिमल अंकों के क्रम को नोट करें. वही आपके सर्टिफ़िकेट का फ़िंगरप्रिंट होगा.
इसके बाद, यह देखें कि आपका बिल्ड टूल उसी सर्टिफ़िकेट का इस्तेमाल कर रहा है या नहीं:
- अपने बिल्ड टूल से गेम का APK जनरेट करें और अपने हिसाब से चुने गए सर्टिफ़िकेट से उस पर हस्ताक्षर करें. जनरेट किए गए APK को किसी अस्थायी डायरेक्ट्री में कॉपी करें.
अस्थायी डायरेक्ट्री में, अपने APK को अनज़िप करने के लिए यह निर्देश चलाएं.
unzip YourGame.apkआरएसए सर्टिफ़िकेट फ़ाइल का इस्तेमाल करके, निजी पासकोड जनरेट करें:
keytool -printcert -file META-INF/CERT.RSAइसके अलावा, DSA सर्टिफ़िकेट फ़ाइल का इस्तेमाल करके भी निजी पासकोड जनरेट किया जा सकता है:
keytool -printcert -file META-INF/CERT.DSASHA1:लेबल वाली लाइन पर हेक्साडेसिमल अंकों के क्रम को नोट कर लें.अंकों का यह क्रम, पिछले चरण में दिए गए आपके सर्टिफ़िकेट फ़िंगरप्रिंट से मेल खाना चाहिए. अगर यह मेल नहीं खाता है, तो इसका मतलब है कि आपके बिल्ड टूल या सिस्टम को, आपके सर्टिफ़िकेट से ऐप्लिकेशन पर हस्ताक्षर करने के लिए कॉन्फ़िगर नहीं किया गया है. ऐसे में, अपने बिल्ड एनवायरमेंट का दस्तावेज़ देखें. इससे आपको यह पता चलेगा कि इसे सही तरीके से कैसे कॉन्फ़िगर किया जाए. इसके बाद, फिर से साइन इन करने की कोशिश करें.
इसके बाद, देखें कि सर्टिफ़िकेट फ़िंगरप्रिंट, आपके क्लाइंट आईडी में कॉन्फ़िगर किए गए फ़िंगरप्रिंट से मेल खाता है या नहीं. ऐसा करने के लिए:
- Play Console खोलें और अपने गेम पर जाएं.
- गेम की जानकारी पेज पर सबसे नीचे तक स्क्रोल करें. इसके बाद, लिंक किए गए Google Cloud Platform प्रोजेक्ट के लिंक पर क्लिक करें.
- अपना प्रोजेक्ट चुनें.
- बाईं ओर मौजूद साइडबार में, एपीआई और पुष्टि करने की सुविधा को चुनें. पक्का करें कि दिखाई गई एपीआई की सूची में, Google Play की गेम सेवाओं से जुड़े एपीआई का स्टेटस चालू है के तौर पर दिखाया गया हो.
- बाईं ओर मौजूद साइडबार में, रजिस्टर किए गए ऐप्लिकेशन को चुनें.
- OAuth 2.0 क्लाइंट आईडी सेक्शन को बड़ा करें और सर्टिफ़िकेट फ़िंगरप्रिंट (SHA1) को नोट करें.
अगर यह फ़िंगरप्रिंट, पिछले चरणों में दिए गए आपके सर्टिफ़िकेट फ़िंगरप्रिंट से मेल नहीं खाता है, तो आपको सही सर्टिफ़िकेट फ़िंगरप्रिंट वाला नया क्लाइंट आईडी बनाना होगा. आपको नया क्लाइंट आईडी, Play Console में ही बनाना होगा न कि Google Cloud Platform प्रोजेक्ट में.
देखें कि टेस्ट खाते चालू हों
किसी गेम को पब्लिश करने से पहले, Play Console में गेम बनाने वाले खाते को टेस्टर के तौर पर भी चालू करना होगा. यह देखने के लिए कि इसे सही तरीके से कॉन्फ़िगर किया गया है या नहीं:
- Play Console खोलें और अपने गेम पर जाएं.
- टेस्टिंग टैब खोलें.
- देखें कि जिस खाते से साइन इन करने की कोशिश की जा रही है वह टेस्टर की सूची में शामिल हो.
अगर वह खाता सूची में नहीं है, तो उसे सूची में जोड़ें. इसके बाद, कुछ मिनट इंतज़ार करें और फिर से साइन इन करने की कोशिश करें.
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 एसडीके उन्हें कमज़ोर रेफ़रंस के तौर पर बनाए रखता है. इसका मतलब है कि उन्हें चालू किए जाने से पहले, गारबेज कलेक्टर उन्हें मिटा सकता है. इसके बजाय, आपको किसी परसिस्टेंट ऑब्जेक्ट का इस्तेमाल करके इवेंट लिसनर को लागू करना चाहिए. जैसे, 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...
}
}