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

این صفحه نحوه عیب‌یابی مشکلاتی را که ممکن است هنگام توسعه بازی‌های اندروید با سرویس‌های بازی‌های گوگل پلی با آنها مواجه شوید، شرح می‌دهد.

ثبت وقایع

برای عیب‌یابی مشکلات بازی خود، می‌توانید با استفاده از دستور adb shell قابلیت Verbose logging را در دستگاه خود فعال کنید. سپس می‌توانید با استفاده از logcat پیام‌های لاگ سرویس‌های بازی‌های گوگل پلی را مشاهده کنید.

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

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

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

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

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

  4. مشاهده لاگ‌ها:

    adb logcat

غیرفعال کردن ثبت وقایع

برای غیرفعال کردن ثبت وقایع طولانی (verbose logging) برای سرویس‌های بازی‌های Play در دستگاه خود و بازگشت به رفتار ثبت وقایع اولیه، دستور زیر را اجرا کنید:

adb shell setprop log.tag.Games INFO

احراز هویت امکان‌پذیر نیست

اگر نمی‌توانید بازیکنان را در بازی خود احراز هویت کنید، ابتدا مطمئن شوید که دستورالعمل‌های ایجاد شناسه‌های کلاینت و پیکربندی سرویس‌های بازی را دنبال کرده‌اید. اگر هنوز با خطاهای احراز هویت مواجه هستید، موارد زیر را بررسی کنید تا مطمئن شوید بازی شما به درستی تنظیم شده است.

برچسب‌های فراداده خود را بررسی کنید

AndroidManifest.xml شما باید حاوی تگ فراداده games باشد. برای تأیید صحت تنظیم تگ‌های فراداده، مراحل زیر را انجام دهید:

  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. نام بسته‌ای که هنگام ایجاد شناسه کلاینت خود ارائه داده‌اید را تأیید کنید. برای تأیید نام بسته در کنسول گوگل پلی، به کنسول پلی بروید و روی ورودی مربوط به بازی خود کلیک کنید.

  3. به برگه برنامه‌های مرتبط بروید و لیست شناسه‌های کلاینت را بررسی کنید. باید یک برنامه مرتبط با اندروید در این لیست وجود داشته باشد که نام بسته آن با نام بسته در 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. در صفحه جزئیات بازی ، به پایین صفحه بروید و روی لینک پروژه مرتبط با پلتفرم ابری گوگل کلیک کنید.
  3. پروژه خود را انتخاب کنید.
  4. در نوار کناری سمت چپ، APIs & auth را انتخاب کنید. مطمئن شوید که وضعیت API مربوط به سرویس‌های بازی‌های گوگل پلی در لیست APIهای نمایش داده شده روشن (ON) است.
  5. در نوار کناری سمت چپ، برنامه‌های ثبت‌شده (Registered apps) را انتخاب کنید.
  6. بخش OAuth 2.0 Client ID را باز کنید و اثر انگشت گواهی (SHA1) را یادداشت کنید.

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

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

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

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

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

مشکلات پروگارد

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

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

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

  • اگر بازی شما منتشر شده است، بررسی کنید که تنظیمات بازی نیز منتشر شده باشد (انتشار برنامه بدون انتشار تنظیمات بازی امکان‌پذیر است). برای انجام این کار، به کنسول گوگل پلی بروید و به برنامه خود بروید و بررسی کنید که کادر کنار نام بازی نشان دهنده انتشار آن باشد. اگر نشان دهنده وضعیت دیگری مانند "آماده انتشار" یا "آماده آزمایش" باشد، روی کادر کلیک کنید و انتشار بازی را انتخاب کنید.
  • اگر نمی‌توانید بازی خود را منتشر کنید، بررسی کنید که دقیقاً یکی از شناسه‌های کلاینت، گزینه «این برنامه برای نصب‌های جدید ترجیح داده می‌شود» را فعال کرده باشد.

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

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

    ImageManager im = ...;

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

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