عیب یابی مشکلات بازی اندروید شما

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

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

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

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

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، به کنسول Google Play بروید و روی ورودی مربوط به بازی خود کلیک کنید. به تب Apps Linked رفته و لیست شناسه های مشتری را بررسی کنید. باید یک برنامه مرتبط با Android در این لیست وجود داشته باشد که نام بسته آن با نام بسته موجود در AndroidManifest.xml شما مطابقت داشته باشد.
  3. اگر ناهماهنگی وجود دارد، یک شناسه مشتری جدید با نام بسته درست ایجاد کنید و سعی کنید دوباره وارد شوید.

اثر انگشت گواهی را بررسی کنید

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

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

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

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

  1. کنسول Google 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...
        }
    }