پرسشگان اعلان‌های لحظه‌ای

چرا وقتی مرورگر بسته است، اعلان‌های لحظه‌ای کار نمی‌کند؟

این سؤال زیاد مطرح می‌شود، عمدتاً به این دلیل که چند سناریو وجود دارد که استدلال و درک آن را دشوار می‌کند.

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

این دقیقاً مشابه هر مرورگر دیگری در Android است، مرورگر با دریافت پیام لحظه‌ای فعال می‌شود و سپس مرورگر سرویس‌کار شما را فعال می‌کند و رویداد لحظه‌ای را ارسال می‌کند.

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

در Mac OS X، می‌توانید ازطریق علامتی که زیر نماد برنامه در سکو قرار دارد، متوجه شوید که برنامه درحال اجرا است یا نه.

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

نمونه‌ای از OS X

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

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

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

چگونه می‌توانم برنامه وب صفحه اصلی را ازطریق اعلان لحظه‌ای به‌صورت تمام‌صفحه باز کنم؟

در Chrome for Android، می‌توان برنامه وب را به صفحه اصلی اضافه کرد و وقتی برنامه وب از صفحه اصلی باز می‌شود، می‌تواند در حالت تمام‌صفحه بدون نوار نشانی وب راه‌اندازی شود، همان‌طور که در زیر نشان داده شده است.

نماد صفحه اصلی به تمام‌صفحه

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

‫Chrome این را «تاحدودی» پیاده‌سازی کرده است، هرچند ممکن است آن را غیرقابل‌اعتماد و استدلال با آن را دشوار بدانید. جزئیات پیاده‌سازی مربوطه عبارتند از:

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

این مشکل بیشتر بررسی خواهد شد.

چرا این روش از سوکت‌های وب بهتر است؟

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

رابطه بین GCM،‏ FCM،‏ Web Push، و Chrome چیست؟

این سؤال جنبه‌های مختلفی دارد و ساده‌ترین راه برای توضیح آن این است که تاریخچه ارسال وب و Chrome را گام‌به‌گام بررسی کنیم. (نگران نباشید، کوتاه است.)

دسامبر ۲۰۱۴

وقتی Chrome برای اولین‌بار ارسال وب را پیاده‌سازی کرد، Chrome از Google Cloud Messaging (GCM) برای ارسال پیام‌های ارسالی از سرور به مرورگر استفاده کرد.

این اعلان فشاری وب نبود. به چند دلیل، این راه‌اندازی اولیه Chrome و GCM، ارسال واقعی وب نبود.

  • GCM از توسعه‌دهندگان می‌خواهد که حسابی در Google Developers Console راه‌اندازی کنند.
  • ‫Chrome و GCM به شناسه فرستنده خاصی نیاز داشتند که توسط برنامه وب هم‌رسانی شود تا بتوانند پیام‌رسانی را به‌درستی راه‌اندازی کنند.
  • سرورهای GCM درخواست میانای برنامه‌سازی کاربردی سفارشی را که استاندارد وب نبود پذیرفتند.

ژوئیه ۲۰۱۶

در ماه ژوئیه، ویژگی جدیدی در ارسال وب اضافه شد - کلیدهای سرور برنامه (یا VAPID، همان‌طور که مشخصات شناخته شده است). وقتی Chrome پشتیبانی از این API جدید را اضافه کرد، از Firebase Cloud Messaging (که با نام FCM نیز شناخته می‌شود) به‌جای GCM به‌عنوان سرویس پیام‌رسانی استفاده کرد. این موضوع به چند دلیل مهم است:

  • Chrome و «کلیدهای سرور برنامه» نیازی به راه‌اندازی هیچ نوع پروژه‌ای با Google یا Firebase ندارند. به‌راحتی کار می‌کند.
  • ‫FCM از پروتکل ارسال وب پشتیبانی می‌کند که میانای برنامه‌سازی کاربردی‌ای است که همه سرویس‌های ارسال وب از آن پشتیبانی خواهند کرد. این یعنی صرف‌نظر از اینکه مرورگر از چه سرویس فشاری استفاده می‌کند، شما فقط همان نوع درخواست را ایجاد می‌کنید و پیام ارسال می‌شود.

چرا امروز گیج‌کننده است؟

اکنون که محتوایی درباره موضوع ارسال وب نوشته شده است، سردرگمی زیادی وجود دارد که بیشتر آن به GCM یا FCM اشاره دارد. اگر محتوا به GCM ارجاع می‌دهد، احتمالاً باید آن را به‌عنوان نشانه‌ای از قدیمی بودن محتوا یا تمرکز بیش‌ازحد آن بر Chrome درنظر بگیرید. (من در تعدادی از پست‌های قدیمی‌ام این کار را انجام داده‌ام.)

درعوض، ارسال وب را متشکل از مرورگری درنظر بگیرید که از سرویس ارسال برای مدیریت ارسال و دریافت پیام‌ها استفاده می‌کند، جایی که سرویس ارسال درخواست «پروتکل ارسال وب» را می‌پذیرد. اگر این‌گونه فکر کنید، می‌توانید مرورگر و سرویس ارسال مستقیم مورداستفاده را نادیده بگیرید و کارتان را شروع کنید.

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

Firebase دارای کیت توسعه نرم‌افزار جاوا اسکریپت است. چه چیزی و چرا؟

برای کسانی از شما که کیت توسعه نرم‌افزار وب Firebase را پیدا کرده‌اید و متوجه شده‌اید که دارای میانای برنامه‌سازی کاربردی پیام‌رسانی برای جاوا اسکریپت است، ممکن است این سؤال برایتان پیش بیاید که چه تفاوتی با ارسال وب دارد.

کیت توسعه نرم‌افزار پیام‌رسانی (معروف به Firebase Cloud Messaging JS SDK) چند ترفند در پشت صحنه انجام می‌دهد تا پیاده‌سازی ارسال وب را آسان‌تر کند.

  • به‌جای نگرانی درباره PushSubscription و فیلدهای مختلف آن، فقط باید نگران FCM Token (یک رشته) باشید.
  • بااستفاده از توکن‌های هر کاربر، می‌توانید از FCM API اختصاصی برای راه‌اندازی پیام‌های فشاری استفاده کنید. این میانای برنامه‌سازی کاربردی به رمزگذاری بار داده نیاز ندارد. می‌توانید بار داده نوشتار ساده را در بدنه درخواست POST ارسال کنید.
  • ‫FCM API اختصاصی از ویژگی‌های سفارشی پشتیبانی می‌کند، برای مثال موضوعات FCM (در وب هم کار می‌کند، هرچند مستندات آن ضعیف است).
  • درنهایت، FCM از Android،‏ iOS، و وب پشتیبانی می‌کند، بنابراین برای برخی تیم‌ها کار کردن با آن در پروژه‌های موجود آسان‌تر است.

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

همان‌طور که در سؤال قبلی گفتم، اگر ارسال مستقیم وب را فقط به‌عنوان یک مرورگر و یک سرویس ارسال مستقیم درنظر بگیرید، می‌توانید کیت توسعه نرم‌افزار «پیام‌رسانی» در Firebase را به‌عنوان کتابخانه‌ای برای ساده‌سازی پیاده‌سازی ارسال مستقیم وب درنظر بگیرید.

مقصد بعدی کجاست

Code labs