عیب یابی Play Games Services در بازی های اندروید

این صفحه نحوه عیب یابی مشکلاتی را که ممکن است در حین توسعه بازی های اندروید با خدمات بازی های Google Play با آن مواجه شوید، توضیح می دهد.

ورود به سیستم

برای عیب‌یابی مشکلات بازی‌تان، می‌توانید با استفاده از دستور adb shell ، Logging مفصل را در دستگاه خود روشن کنید. سپس می‌توانید پیام‌های گزارش خدمات بازی‌های Google Play را با استفاده از logcat مشاهده کنید.

ورود به سیستم را فعال کنید

برای فعال کردن ورود به سیستم در دستگاه آزمایشی خود:

  1. دستگاه را به دستگاهی که Android SDK را نصب کرده است وصل کنید.

  2. یک ترمینال را باز کنید و این دستور را اجرا کنید:

    adb shell setprop log.tag.Games VERBOSE
  3. بازی خود را روی دستگاه اجرا کنید و مشکلی را که می‌خواهید اشکال زدایی کنید، دوباره تولید کنید.

  4. مشاهده گزارش‌ها:

    adb logcat

غیرفعال کردن ورود به سیستم

برای غیرفعال کردن گزارش کامل برای سرویس‌های بازی‌های Play در دستگاه خود و بازگشت به رفتار گزارش‌گیری اولیه، دستور زیر را اجرا کنید:

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 خود را پیدا کنید. معمولاً در یک فایل XML واقع در دایرکتوری res/xml ، برای مثال res/xml/strings.xml یا res/xml/ids.xml تعریف می‌شود.

  3. بررسی کنید که مقدار منبع @string/app_id با شناسه عددی برنامه شما مطابقت داشته باشد. مقدار این منبع فقط باید دارای اعداد باشد. به عنوان مثال:

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

نام بسته خود را بررسی کنید

نام بسته بازی شما باید با نام بسته در شناسه مشتری شما مطابقت داشته باشد. برای تأیید نام بسته:

  1. AndroidManifest.xml خود را باز کنید و بررسی کنید که نام بسته بازی شما صحیح باشد. نام بسته مقدار ویژگی package در تگ manifest است.

  2. نام بسته ای که هنگام ایجاد شناسه مشتری خود ارائه کرده اید را تأیید کنید. برای تأیید نام بسته در کنسول Google Play، به کنسول Play بروید و روی ورودی مربوط به بازی خود کلیک کنید.

  3. به تب Apps Linked رفته و لیست شناسه های مشتری را بررسی کنید. باید یک برنامه مرتبط با 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. با استفاده از یک فایل گواهی RSA یک کلید خصوصی ایجاد کنید:

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

    همچنین، می‌توانید کلید خصوصی را با استفاده از یک فایل گواهی DSA ایجاد کنید:

    keytool -printcert -file META-INF/CERT.DSA
    
  4. به دنباله ارقام هگزادسیمال روی خط با برچسب SHA1: .

    این ترتیب ارقام باید با اثر انگشت گواهی شما در مرحله قبل مطابقت داشته باشد. در صورت عدم تطابق، ابزار ساخت یا سیستم شما برای امضای برنامه شما با گواهینامه شما پیکربندی نشده است. در این مورد، با مستندات محیط ساخت خود مشورت کنید تا نحوه صحیح پیکربندی آن را مشخص کنید و سعی کنید دوباره وارد شوید.

سپس، بررسی کنید که آیا اثر انگشت گواهی با اثر انگشت پیکربندی شده در شناسه مشتری شما مطابقت دارد یا خیر. برای انجام این کار:

  1. کنسول Play را باز کنید و به بازی خود بروید.
  2. در صفحه جزئیات بازی ، به پایین بروید و روی پیوند پروژه پیوند شده Google Cloud Platform کلیک کنید.
  3. پروژه خود را انتخاب کنید
  4. در نوار کناری سمت چپ، APIs & auth را انتخاب کنید. مطمئن شوید که وضعیت API خدمات بازی های Google Play در لیست نمایش داده شده APIها روشن است.
  5. در نوار کناری سمت چپ، برنامه‌های ثبت‌شده را انتخاب کنید.
  6. بخش OAuth 2.0 Client ID را باز کنید و اثر انگشت گواهی (SHA1) را یادداشت کنید.

اگر این اثر انگشت با اثر انگشت گواهی شما در مراحل قبلی مطابقت ندارد، باید یک شناسه مشتری جدید با اثر انگشت گواهی صحیح ایجاد کنید. شما باید شناسه مشتری جدید را در Play Console ایجاد کنید، نه در پروژه Google Cloud Platform.

بررسی کنید که حساب های آزمایشی فعال هستند

قبل از انتشار بازی، حسابی که بازی را در Play Console ایجاد کرده است نیز باید به عنوان آزمایش کننده فعال شود. برای بررسی اینکه آیا این به درستی پیکربندی شده است:

  1. کنسول Play را باز کنید و به بازی خود بروید.
  2. تب Testing را باز کنید.
  3. بررسی کنید حسابی که می‌خواهید با آن وارد شوید در فهرست آزمایش‌کنندگان باشد.

اگر حسابی که می‌خواهید با آن وارد شوید فهرست نشده است، آن را به لیست اضافه کنید، چند دقیقه صبر کنید و دوباره سعی کنید وارد شوید.

مسائل حفاظتی

اگر از Proguard استفاده می‌کنید و خطاهایی در APK مبهم مشاهده می‌کنید، سطح API هدف را در AndroidManifest.xml خود بررسی کنید. حتما آن را روی 17 یا بالاتر تنظیم کنید.

سایر دلایل مشکلات راه اندازی

سایر علل رایج خطاها را بررسی کنید:

  • اگر بازی شما منتشر شده است، بررسی کنید که تنظیمات بازی نیز منتشر شده باشد (امکان انتشار اپلیکیشن بدون انتشار تنظیمات بازی وجود دارد). برای انجام این کار، به کنسول Google Play بروید و به برنامه خود بروید و بررسی کنید که کادر کنار نام بازی نشان دهنده انتشار آن باشد. اگر نشان می دهد که در وضعیت دیگری است، مانند "آماده برای انتشار" یا "آماده برای آزمایش"، روی کادر کلیک کنید و انتشار بازی را انتخاب کنید.
  • اگر نمی‌توانید بازی خود را منتشر کنید، بررسی کنید که دقیقاً یکی از شناسه‌های مشتری گزینه This app is preferred for new installs را فعال کرده باشد.

شنوندگان ناشناس

از شنوندگان ناشناس استفاده نکنید. شنوندگان ناشناس پیاده سازی های یک رابط شنونده هستند که به صورت درون خطی تعریف شده اند، همانطور که در زیر نشان داده شده است.

    ImageManager im = ...;

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

شنوندگان ناشناس قابل اعتماد نیستند زیرا SDK بازی‌های Play آنها را به‌عنوان مرجع ضعیف نگه می‌دارد، به این معنی که ممکن است قبل از فراخوانی توسط جمع‌آورنده زباله بازیابی شوند. در عوض، شما باید شنونده را با استفاده از یک شی دائمی مانند 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...
        }
    }