এই পৃষ্ঠায় বর্ণনা করা হয়েছে, গুগল প্লে গেমস সার্ভিসেস ব্যবহার করে অ্যান্ড্রয়েড গেম তৈরি করার সময় আপনি যেসব সমস্যার সম্মুখীন হতে পারেন, সেগুলোর সমাধান কীভাবে করবেন।
লগিং
আপনার গেমের সমস্যা সমাধান করতে, আপনি adb shell কমান্ড ব্যবহার করে আপনার ডিভাইসে ভার্বোস লগিং চালু করতে পারেন। এরপর আপনি logcat ব্যবহার করে Google Play Games Services-এর লগ বার্তাগুলো দেখতে পারবেন।
লগিং সক্ষম করুন
আপনার টেস্ট ডিভাইসে লগিং চালু করতে:
ডিভাইসটিকে এমন একটি মেশিনের সাথে সংযুক্ত করুন যেখানে অ্যান্ড্রয়েড এসডিকে ইনস্টল করা আছে।
একটি টার্মিনাল খুলুন এবং এই কমান্ডটি চালান:
adb shell setprop log.tag.Games VERBOSE
ডিভাইসটিতে আপনার গেমটি চালান এবং যে সমস্যাটি ডিবাগ করার চেষ্টা করছেন, সেটি পুনরায় তৈরি করুন।
লগগুলি দেখুন:
adb logcat
লগিং নিষ্ক্রিয় করুন
আপনার ডিভাইসে প্লে গেমস সার্ভিসেস-এর জন্য ভার্বোস লগিং নিষ্ক্রিয় করতে এবং মূল লগিং আচরণে ফিরে যেতে, নিম্নলিখিত কমান্ডটি চালান:
adb shell setprop log.tag.Games INFO
প্রমাণীকরণ করা সম্ভব হয়নি
আপনি যদি আপনার গেমে খেলোয়াড়দের প্রমাণীকরণ করতে না পারেন, তাহলে প্রথমে নিশ্চিত করুন যে আপনি আপনার ক্লায়েন্ট আইডি তৈরি এবং গেম পরিষেবা কনফিগার করার জন্য নির্দেশাবলী অনুসরণ করেছেন। এরপরও যদি প্রমাণীকরণে ত্রুটি দেখা দেয়, তাহলে আপনার গেমটি সঠিকভাবে সেট আপ করা আছে কিনা তা নিশ্চিত করতে নিম্নলিখিত বিষয়গুলো পরীক্ষা করুন।
আপনার মেটাডেটা ট্যাগগুলি পরীক্ষা করুন
আপনার AndroidManifest.xml ফাইলে অবশ্যই একটি games মেটাডেটা ট্যাগ থাকতে হবে। আপনার মেটাডেটা ট্যাগগুলো সঠিকভাবে সেট আপ করা হয়েছে কিনা তা যাচাই করতে:
আপনার
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ডিরেক্টরিতে অবস্থিত একটি XML ফাইলে সংজ্ঞায়িত করা থাকে, যেমনres/xml/strings.xmlবাres/xml/ids.xml।যাচাই করুন যে
@string/app_idরিসোর্সের মানটি আপনার অ্যাপ্লিকেশনের সংখ্যাসূচক আইডির সাথে মেলে। এই রিসোর্সের মানটিতে শুধুমাত্র অঙ্ক থাকতে হবে। উদাহরণস্বরূপ:<string name="app_id">123456789012</string>
আপনার প্যাকেজের নাম যাচাই করুন
আপনার গেমের প্যাকেজ নামটি অবশ্যই আপনার ক্লায়েন্ট আইডিতে থাকা প্যাকেজ নামের সাথে মিলতে হবে। প্যাকেজ নামটি যাচাই করতে:
আপনার
AndroidManifest.xmlখুলুন এবং যাচাই করুন যে আপনার গেমের প্যাকেজ নামটি সঠিক আছে। প্যাকেজ নামটি হলোmanifestট্যাগেরpackageঅ্যাট্রিবিউটের ভ্যালু।আপনার ক্লায়েন্ট আইডি তৈরি করার সময় আপনি যে প্যাকেজ নামটি দিয়েছিলেন তা যাচাই করুন। গুগল প্লে কনসোলে প্যাকেজ নামটি যাচাই করতে, প্লে কনসোলে যান এবং আপনার গেমের সাথে সম্পর্কিত এন্ট্রিতে ক্লিক করুন।
লিঙ্কড অ্যাপস ট্যাবে যান এবং ক্লায়েন্ট আইডিগুলির তালিকাটি পরীক্ষা করুন। এই তালিকায় এমন একটি অ্যান্ড্রয়েড লিঙ্কড অ্যাপ থাকা উচিত, যার প্যাকেজ নামটি আপনার
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একটি RSA সার্টিফিকেট ফাইল ব্যবহার করে একটি প্রাইভেট কী তৈরি করুন:
keytool -printcert -file META-INF/CERT.RSAবিকল্পভাবে, আপনি একটি DSA সার্টিফিকেট ফাইল ব্যবহার করে প্রাইভেট কী তৈরি করতে পারেন:
keytool -printcert -file META-INF/CERT.DSASHA1:.এই সংখ্যাগুলোর ক্রমটি পূর্ববর্তী ধাপের আপনার সার্টিফিকেট ফিঙ্গারপ্রিন্টের সাথে মিলতে হবে। যদি অমিল থাকে, তাহলে আপনার বিল্ড টুল বা সিস্টেম আপনার সার্টিফিকেট দিয়ে অ্যাপ্লিকেশনটি সাইন করার জন্য কনফিগার করা নেই। এই ক্ষেত্রে, এটি সঠিকভাবে কনফিগার করার পদ্ধতি জানতে আপনার বিল্ড এনভায়রনমেন্টের ডকুমেন্টেশন দেখুন এবং পুনরায় অথেন্টিকেট করার চেষ্টা করুন।
এরপর, সার্টিফিকেট ফিঙ্গারপ্রিন্টটি আপনার ক্লায়েন্ট আইডিতে কনফিগার করা ফিঙ্গারপ্রিন্টের সাথে মেলে কিনা তা পরীক্ষা করুন। এটি করতে:
- প্লে কনসোলটি খুলুন এবং আপনার গেমটিতে যান।
- গেমের বিবরণ পৃষ্ঠায়, একদম নিচে স্ক্রোল করুন এবং লিঙ্ক করা গুগল ক্লাউড প্ল্যাটফর্ম প্রজেক্টের লিঙ্কে ক্লিক করুন।
- আপনার প্রকল্পটি নির্বাচন করুন।
- বাম দিকের সাইডবারে, APIs & auth নির্বাচন করুন। প্রদর্শিত API-এর তালিকায় Google Play games services API-এর স্ট্যাটাস ON আছে কিনা, তা নিশ্চিত করুন।
- বাম পাশের সাইডবারে, নিবন্ধিত অ্যাপস নির্বাচন করুন।
- OAuth 2.0 ক্লায়েন্ট আইডি বিভাগটি প্রসারিত করুন এবং সার্টিফিকেট ফিঙ্গারপ্রিন্ট (SHA1) নোট করুন।
যদি এই ফিঙ্গারপ্রিন্টটি পূর্ববর্তী ধাপগুলোর আপনার সার্টিফিকেটের ফিঙ্গারপ্রিন্টের সাথে না মেলে, তাহলে আপনাকে সঠিক সার্টিফিকেট ফিঙ্গারপ্রিন্ট ব্যবহার করে একটি নতুন ক্লায়েন্ট আইডি তৈরি করতে হবে। আপনাকে নতুন ক্লায়েন্ট আইডিটি প্লে কনসোলে তৈরি করতে হবে, গুগল ক্লাউড প্ল্যাটফর্ম প্রজেক্টে নয়।
টেস্ট অ্যাকাউন্টগুলো সক্রিয় আছে কিনা তা যাচাই করুন।
একটি গেম প্রকাশ করার আগে, প্লে কনসোলে যে অ্যাকাউন্টটি গেমটি তৈরি করেছে, সেটিকেও পরীক্ষক হিসেবে সক্রিয় করতে হবে। এটি সঠিকভাবে কনফিগার করা হয়েছে কিনা তা পরীক্ষা করতে:
- প্লে কনসোলটি খুলুন এবং আপনার গেমটিতে যান।
- টেস্টিং ট্যাবটি খুলুন।
- আপনি যে অ্যাকাউন্টটি দিয়ে প্রমাণীকরণের চেষ্টা করছেন, সেটি পরীক্ষকদের তালিকায় আছে কি না, তা যাচাই করুন।
আপনি যে অ্যাকাউন্টটি দিয়ে প্রমাণীকরণ করার চেষ্টা করছেন সেটি যদি তালিকায় না থাকে, তবে সেটিকে তালিকায় যুক্ত করুন, কয়েক মিনিট অপেক্ষা করুন এবং আবার প্রমাণীকরণের চেষ্টা করুন।
প্রোগার্ড সমস্যা
আপনি যদি Proguard ব্যবহার করেন এবং অবফাসকেটেড APK-তে কোনো ত্রুটি দেখতে পান, তাহলে আপনার AndroidManifest.xml এ টার্গেট API লেভেলটি পরীক্ষা করুন। নিশ্চিত করুন যে এটি 17 বা তার বেশিতে সেট করা আছে।
সেটআপ সমস্যার অন্যান্য কারণ
ত্রুটির অন্যান্য সাধারণ কারণগুলো যাচাই করুন:
- আপনার গেমটি প্রকাশিত হলে, গেমের সেটিংসও প্রকাশিত হয়েছে কিনা তা পরীক্ষা করুন (গেমের সেটিংস প্রকাশ না করেও অ্যাপ্লিকেশনটি প্রকাশ করা সম্ভব)। এটি করার জন্য, গুগল প্লে কনসোলে যান এবং আপনার অ্যাপটিতে নেভিগেট করুন, এবং পরীক্ষা করে দেখুন যে গেমের নামের পাশের বক্সে এটি প্রকাশিত (published) দেখাচ্ছে কিনা। যদি এটি "প্রকাশের জন্য প্রস্তুত" (Ready to Publish) বা "পরীক্ষার জন্য প্রস্তুত" (Ready to Test)-এর মতো অন্য কোনো অবস্থায় থাকে, তাহলে বক্সটিতে ক্লিক করুন এবং "গেম প্রকাশ করুন" (Publish Game) নির্বাচন করুন।
- আপনি যদি আপনার গেমটি প্রকাশ করতে না পারেন, তবে যাচাই করুন যে ক্লায়েন্ট আইডিগুলোর মধ্যে ঠিক একটিতে ‘নতুন ইনস্টলেশনের জন্য এই অ্যাপটিই অগ্রাধিকারযোগ্য’ বিকল্পটি সক্রিয় করা আছে কি না ।
বেনামী শ্রোতারা
অ্যানোনিমাস লিসেনার ব্যবহার করবেন না। অ্যানোনিমাস লিসেনার হলো লিসেনার ইন্টারফেসের এমন ইমপ্লিমেন্টেশন যা ইনলাইনে সংজ্ঞায়িত করা হয়, যেমনটি নিচে দেখানো হয়েছে।
ImageManager im = ...;
// Anonymous listener -- dangerous:
im.loadImage(new ImageManager.OnImageLoadedListener() {
@Override
public void onImageLoaded(Uri uri, Drawable drawable) {
// ...code...
}
}
অ্যানোনিমাস লিসেনারগুলো নির্ভরযোগ্য নয়, কারণ প্লে গেমস এসডিকে এগুলোকে উইক রেফারেন্স হিসেবে রক্ষণাবেক্ষণ করে, যার অর্থ হলো এগুলোকে কল করার আগেই গার্বেজ কালেক্টর রিক্লেইম করে নিতে পারে। এর পরিবর্তে, আপনার 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...
}
}