عیب یابی ریکت نیتیو

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


پوش نمی‌گیرم


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

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

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

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

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

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

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

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

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

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

کانال‌ها

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

AndroidIOS

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


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

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

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

۲- تنظیمات APN (پوش‌نوتیفیکیشن) خود را چک کنید

IOS

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

۳- پوش‌ روی Simulator آی‌او‌اس دریافت نمی‌شود

IOS

امکان دریافت پوش‌نویفیکیشن بر روی Simulator آی‌او‌اس وجود ندارد.

۴- سوئیچ سرور عملیاتی اپل را در پنل به درستی تنظیم کنید

IOS

به طور کلی (در هر محیط چابک)، زمانی که گواهی sandbox اپل را در پنل قرار دهید، سوئیچ سرور عملیاتی اپل باید خاموش باشد. اما در زمانی که گواهی production اپل را قرار دهید، این سوئیچ باید حتما روشن باشد.

نکته:‍ توجه داشته باشید هنگامی که گواهی sandbox اپل را در پنل آزمایشی قرار می‌دهید، فقط امکان دریافت Cloud Messaging در حالت debug وجود خواهد داشت. اما اگر گواهی production اپل را در محیط عملیاتی قرار دهید، زمانی Cloud Messaging را دریافت خواهید کرد که اقدام به ساخت ipa از پروژه خود کرده و از طریق TestFlight یا Enterprise اپلیکیشن خود را نصب کنید.

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

Android

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

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

Android

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

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

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

Android

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

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

Android

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

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

Android

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

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

AndroidIOS

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


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


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

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

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

۲- تنظیمات اکشن کلیک و محتوا در اعلان به درستی قرار داده‌ شود

IOS

زمانی که این آپشن‌ها گذاشته می‌شوند باید تنظیمات اپ به‌ درستی ذخیره شده باشد.

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

Android

در حالتی که اپلیکیشن شما در حالت 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 > Notifications را چک کنید. در صورت خاموش بودن گزینه نوتیفیکیشن، آن را فعال نمایید.

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

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

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

Android

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