عیب یابی اندروید
ویرایش
نکته:
عیبیابی مشکلات متداول زیر بر اساس نسخههای ۳ به بالا کتابخانه چابک نوشته شده است. در صورتی که از نسخه پایینتری استفاده میکنید به این صفحه مراجعه کنید.
در این صفحه به عیبیابی مشکلات متداول توسعهدهندگان در پیادهسازی چابک و ارائه راهحلهای مربوط به آن میپردازیم. برخی از این مشکلات عبارتند از کرش کردن اپلیکیشن، عدم دریافت پوشنوتیفیکیشن، نمایش نوتیفیکیشن و نمایش تصویر نوتیفیکیشن است.
اپلیکیشنم کرش میکند
۱- چابک را حتما initialize کنید
اگر چابک را initialize نکنید، ممکن است با یکی از خطاهای زیر مواجه شوید:
در صورتی که با خطای:
AdpPushClient not initialized, Make sure to call AdpPushClient.configureEnvironment(Environment) in onCreate() method of your Application class
مواجه شدید، اطمینان یابید چابک را initialize کرده باشید. معمولا این خطا به دلیل صدا نزدن متد configureEnvironment
اتفاق میافتد و برای رفع مشکل، تنها باید متد را بسته به محیط صدا بزنید.
اگر با یکی از خطاهای:
AdpPushClient not initialized, Make sure to configure correct environment
و یا
AdpPushClient not initialized, Make sure to put the json files in root of your project
مواجه شدید، یعنی فایل Chabok.sandbox.json یا Chabok.production.json در جای مناسبی قرار نگرفته و یا اگر در جای درستی هست، محتویاتش کامل نیست. برای اطلاعات بیشتر میتوانید مستندات راهاندازی را مطالعه کنید.
۲- نسخه سرویسهای گوگل پلی را بررسی کنید
در صورتی که با خطاهای:
;java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/android/gms/iid/InstanceID
و یا
Caused by: java.lang.ClassNotFoundException: Didn’t find class com.google.android.gms.iid.InstanceID
مواجه شدید، دقت کنید که نسخه سرویسهای گوگل پلی شما با هم، همخوانی و تطابق داشته باشند.
کرش کردن اپلیکیشن در هنگام دریافت پوش نوتیفیکیشن
اگر هنگام دریافت پوش، اپلیکیشن کرش کرد و یکی از دو خطای:
Unable to instantiate service com.adpdigital.push.ChabokFirebaseMessaging
یا
java.lang.IllegalAccessError: com.google.firebase.messaging.FirebaseMessagingService
را در logcat دریافت کردید:
برای رفع خطاهای بالا باید قطعه کد زیر را در فایل build.gradle
ماژول اصلی اپلیکیشن اضافه کنید:
implementation 'com.google.firebase:firebase-messaging:17.1.0'
یک پوش را چند بار میگیرم
۱- از قطعه کد زیر استفاده کنید
در صورتی که از سرویسهای دیگر پوش استفاده کنید (3rd parties)، حتما از کد زیر استفاده کنید.
این کد باعث میشود تا فقط پوشنوتیفیکشنهای چابک نمایش داده شوند؛ برای این کار کد زیر در فایل AndroidManifest.xml
قرار دهید:
<meta-data android:name="com.adpdigital.push.client.SHOW_ONLY_CHABOK_NOTIFICATIONS" android:value="ENABLE" />
۲- از AutoNotify فایربیس استفاده نکنید
در صورتی که از Auto Notify سرویس فایربیس استفاده میکنید (در این مدل نمایش نوتیفیکیشن را سیستمعامل برعهده دارد)، در زمانهایی که اپلیکیشن در بکگراند یا بسته است، کد رسیور چابک و شما فراخوانی نخواهد شد در نتیجه نوتیفیکیشن ۲بار نمایش داده خواهد شد.
پوش نمیگیرم
یکی از مشکلات متداولی که توسعهدهندگان پس از نصب چابک با آن مواجه میشوند، عدم دریافت پیام (هم پیام چابک و هم پوشنوتیفیکیشن) است. این مشکل معمولا به راهاندازی ناقص یا غیر صحیح چابک بر میگردد.
حالت اول: اپ باز است (Background یا Foreground) و پوش نمیگیرم:
۱- از ثبت موفق دستگاه کاربر اطمینان یابید
در صورتی که شما دستگاه را با userId
که ثبت کردید در بخش مشترکین پنل مشاهده نکردید به نکات زیر توجه فرمایید:
الف- ویپیان دستگاه حتما خاموش باشد.
ب- تعیین درست محیط چابک:
متد configureEnvironment
را با توجه به محیط عملیاتی یا آزمایشی پیادهسازی کنید.
پ- دانلود فایل Chabok.sandbox.json یا Chabok.production.json با توجه به محیط آن:
اگر محیط راهاندازی sandbox (آزمایشی) است، باید از فایل Chabok.sandbox.json استفاده کنید و در صورت استفاده از محیط production (عملیاتی)، باید از فایل Chabok.production.json استفاده نمایید.
پس از بررسی نکات بالا دستگاه شما باید در بخش مشترکین پنل آمده باشد.
۲- کاربر حتما در کانال ارسالی شما عضو باشد
در صورت مشاهده دستگاه کاربر در بخش مشترکین پنل، از عضویت کاربر در کانالی که با آن پیام خود را ارسال میکنید اطمینان یابید. برای اینکه کانالهایی که کاربرتان در آنها عضو هستند را مشاهده میکنید، میتوانید روی آیکون در کارت هر دستگاه در بخش مشترکین پنل کلیک کنید. علاوه بر آن شما میتوانید از اتصال یا عدم اتصال دستگاه از مشاهده نوار سبز رنگ در بالای کارت مطلع شوید.
حالت دوم: اپ بسته است (Terminated) و پوش نمیگیرم:
۳- از مراحل ثبت موفق دستگاه و عضویت در کانال ارسال مانند بالا اطمینان یابید
در ابتدا از ثبت موفق کاربر و مشاهده دستگاه در بخش مشترکین و عضویت آن در کانال ارسالی پیام مطمئن شوید.
۴- تنظیمات پوشنوتیفیکیشن خود را چک کنید
از وارد کردن صحیح اطلاعات دسترسی پوشنوتیفیکیشن در هر پلتفرم از بخش تنظیمات پنل قسمت پلتفرمها اطمینان یابید. در صورت مشاهده متن غیرفعال در کارت تنظیمات هر پلتفرم، دستگاه به بخش مشترکین اضافه نشده است. برای مثال اگر تنظیمات پوشنوتیفیکیشن اندروید را به درستی انجام داده باشید ولی دستگاه اندروید به بخش مشترکین اضافه نشده باشد بر روی کارت تنظیمات پوشنوتیفیکیشن اندروید متن غیرفعال را مشاهده خواهید کرد.
۵- دانلود فایل google-services.json از پنل فایربیس
همیشه مطمئن شوید که فایل google-services.json پروژه را که از پنل فایربیس دانلود کردید در پوشه ماژول اصلی پروژه خود قرار داده باشید.
برای کسب اطلاعات بیشتر حتما بخش نکات ضروری نصب کتابخانه در راهاندازی را مرور کنید.
۶- دقت کنید که از نسخه درست 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 را چک کنید. در صورت خاموش بودن گزینه نوتیفیکیشن، آن را فعال نمایید.
۵- وضعیت اتصال دستگاه به اینترنت را بررسی نمایید
شبکه اینترنتی که به آن وصل هستید ممکن است اتصال شما به سرورهای گوگل یا اپل را بسته باشد. در این حالت میتوانید قطع و وصل کردن اینترنت خود را امتحان کنید.
۶- وجود کتابخانههای دیگر در کنار چابک
در صورتی که شما از سرویسهای دیگری هم استفاده میکنید و کتابخانههای آنها را نصب کردهاید امکان عدم نمایش اعلان برای شما وجود خواهد داشت. به عنوان مثال اگر کتابخانه پوشه را علاوه بر چابک روی اپ خود داشته باشید، زمانی که اپ شما بسته است، پوشنوتیفیکیشن دریافت میشود اما اعلان آن در دستگاه کاربر نمایش داده نمیشود.
تصویر نوتیفیکیشن نمایش داده نمیشود
حالت اول: پوش را با پنل ارسال کردهام
دقت داشته باشید پس از انتخاب تصویر، دکمه بارگذاری را حتما بزنید و پیام موفقیت را مشاهده کنید.
حالت دوم: پوش را با API ارسال کردهام
در این حالت باید به پارامترهای mediaType
و mediaUrl
مقادیر درست دهید.
موارد بالا را بررسی کردم اما همچنان مشکلم برطرف نشده!
در صورتی هم که موارد این صفحه را بررسی کردید و همچنان مشکلتان برطرف نشده بود، میتوانید از پشتیبانی چابک در گیتهاب استفاده کنید. در آن جا issue
های قبلی را مطالعه کنید و اگر مشکل شما بین آنها نبود، میتوانید یک issue
جدید برای بررسی تیم فنی چابک باز نمایید.