عیب یابی اندروید

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


۱- پوش نمی‌گیرم

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

اپ باز است (Background یا Foreground) و پوش نمی‌گیرم:

  • از ثبت موفق دستگاه کاربر اطمینان یابید

در صورتی که شما دستگاه را با userId که ثبت کردید در بخش مشترکین پنل مشاهده نکردید به نکات زیر توجه فرمایید:

الف- وی‌پی‌ان دستگاه حتما خاموش باشد.

ب- تعیین درست محیط چابک (آزمایشی و عملیاتی) توسط متد setDevelopment

پ- وارد کردن صحیح اطلاعات حساب (appId, APIKey, username, password) در مقداردهی اولیه

پس از بررسی نکات بالا دستگاه شما باید در بخش مشترکین پنل آمده باشد.

  • کاربر حتما در کانال ارسالی شما عضو باشد

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

کانال‌ها

  • اطلاعات حساب خود را با دقت وارد کنید (خطای internal server error)

در صورت دریافت خطای فوق در logcat از وارد کردن اطلاعات حساب (appId, APIKey, username, password) خود اطمینان یابید.


اپ بسته است (Terminated) و پوش نمی‌گیرم:

  • از مراحل ثبت موفق دستگاه و عضویت در کانال ارسال مانند بالا اطمینان یابید

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

  • تنظیمات GCM (پوش‌نوتیفیشکن) خود را چک کنید

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

  • senderId که در پنل و متد init وارد می‌نمایید، صحیح باشد

دقت داشته باشید senderId که در پنل قرار داده‌اید با senderId که در متد init همراه با appId به چابک داده‌اید، یکسان باشد.

نکته: ترکیب APP_ID/SENDERID به عنوان YOUR_APP_ID مورد استفاده قرار می‌گیرد.

  • از تعریف GCMReceiver برای دریافت پوش اطمینان یابید

اطمینان یابید که کد GcmReceiver در فایل AndroidManifes.xml قرار داده شده باشد. همچنین برای YOUR_APPLICATION_PACKAGE_ID حتما باید bundleId اپلیکیشن خود را قرار دهید.

  • متد init را برای شروع حتما فراخوانی کنید

متد init چابک حتما باید در کلاس application و در متد onCreate در هر شرایطی فراخوانی شود و در صورت عدم فراخوانی متد فوق با خطای زیر مواجه خواهید شد.

AdpPushClient not initialized yet, please first call AdpPushClient.get with parameters
  • دقت کنید که از نسخه درست buildTools و play services استفاده کنید

نسخه buildTools و play services شما باید به درستی انتخاب شود. برای انتخاب صحیح مطابق این جدول عمل کنید.

  • در حالت بسته بودن اپ، پیام چابک دریافت نمی‌شود (فقط نوتیفیکیشن دریافت خواهد شد)

در پنل حساب کاربری خود در بخش پیام‌ها، دایره زرد رنگ به معنی در صف بود پیام شما می‌باشد و زمانی که کاربر به چابک متصل شود (اپ را باز کند) پیام را دریافت می‌کند. در بخش نوتیفیکیشن در صورت ارسال موفق به سرور هر پلتفرم، تیک سبز رنگ به همراه لوگوی پلتفرم نشان داده خواهد شد. همچنین خطاهای Device_Unregisterd و GONE به معنی حذف اپلیکیشن شما توسط کاربر و SENDER_ID_MISMATCH به معنی این است که اطلاعات پوش‌نوتیفیکیشن پلتفرم اندروید که در پنل ما قرار داده‌اید با اپلیکیشنی که روی دستگاه نصب نموده‌اید، همخوانی ندارد. این نمادها را می‌توانید به صورت کامل در مستندات پنل بخش پیام‌ها مشاهده کنید.


۲- اعلان‌ها نمایش داده نمی‌شوند

یکی دیگر از مشکلات متداول عدم نمایش اعلان (نوتیفیکیشن) در دستگاه مخاطب است. در این قسمت به دلایل احتمالی این مشکل اشاره‌ خواهیم کرد.

  • اپلکیشن روی صفحه نمایش باز نباشد

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

  • مقدار متد buildNotification باید true باشد

در صورتی که در متد buildNotification مقدار false را قرار دهید، اعلان نمایش داده نمی‌شود. (نمایش اعلان بر عهده خودتان خواهد بود)

  • دقت کنید که اپلیکیشن در حالت Force Stop نباشد

در حالتی که اپلیکیشن شما در حالت Force Stop از سوی کاربر گذاشته شده باشد، اکثر رویداد‌ها از جمله دریافت پیام‌های GCM/FCM رخ نخواهد داد. به طور کلی یک اپلیکیشن در حالت‌های زیر می‌تواند Force Stop شود:

الف- انتخاب گزینه Force Stop در صفحه Settings > Apps

ب- نگه‌ داشتن دکمه بازگشت روی بعضی گوشی‌ها

پ- استفاده از یک برنامه برای بستن اپلیکیشن‌ها (App Killers)

ت- swipe اپلیکیشن حین دیباگ از دور (Remote Debugging)

ث- swipe اپلیکیشن از لیست Recent Apps در دستگاه‌های شیائومی

ج- به صورت خودکار از سوی بعضی برندهای گوشی برای بهینه سازی مصرف باتری. برای غیرفعال کردن آن قدم‌های زیر انجام دهید:

سامسونگ: غیرفعال کردن battery usage optimization

هواوی: قدم اول: به settings > advanced settings > battery manager بروید و اپ را انتخاب کنید.

قدم دوم: به settings > apps > advanced > ignore battery optimizations بروید و اپ را انتخاب کنید.

قدم سوم: به settings > notification panel & status bar > notification center بروید و پس از انتخاب اپ، “allow notifications” و “priority display” را فعال کنید.

برای EMUI 5.0 / Android 7 پایین‌تر به Settings > Protected apps بروید و اپ خود را چک کنید. راهنمای کامل

سونی: آیکون باتری را بزنید و به Power Management > STAMINA mode > Apps active in standby بروید و اپ خود را اضافه کنید.

ایسوس: اپ خود را در Auto-start Manager چک کنید.

وان‌پلاس: به Settings > Battery > Battery Optimization > Application بروید و Don’t Optimize را بزنید.

اوپو: به Settings > Security settings > Data saving بروید و اپ خود را فعال کنید.

شیائومی: به Security (App) > Permissions > Autostart بروید و اپ خود را فعال کنید.

ردمی: به Settings > Developer Options بروید و “memory optimization” را غیرفعال کنید. راهنمای کامل

  • گزینه دریافت پوش برای اپلیکیشن را چک کنید

    تنظیمات نوتیفیکیشن در صفحه Settings > Apps را چک کنید. در صورت خاموش بودن گزینه نوتیفیکیشن، آن را فعال نمایید.

  • وضعیت اتصال دستگاه به اینترنت را بررسی نمایید

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

  • وجود کتابخانه‌های دیگر در کنار چابک

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