درباره پیام های FCM

Firebase Cloud Messaging (FCM) طیف گسترده ای از گزینه ها و قابلیت های پیام رسانی را ارائه می دهد. اطلاعات موجود در این صفحه به شما کمک می کند تا انواع مختلف پیام های FCM و کارهایی که می توانید با آنها انجام دهید را درک کنید.

انواع پیام

با FCM، می توانید دو نوع پیام به مشتریان ارسال کنید:

  • پیام های اعلان، که گاهی اوقات به عنوان "پیام های نمایش داده شده" در نظر گرفته می شود. اینها توسط FCM SDK به طور خودکار مدیریت می شوند.
  • پیام های داده، که توسط برنامه مشتری مدیریت می شود.

پیام های اعلان شامل مجموعه ای از کلیدهای از پیش تعریف شده قابل مشاهده توسط کاربر است. در مقابل، پیام‌های داده فقط شامل جفت‌های کلید-مقدار سفارشی تعریف‌شده توسط کاربر هستند. پیام‌های اعلان می‌توانند حاوی یک بار داده اختیاری باشند. حداکثر بار برای هر دو نوع پیام 4000 بایت است، به جز زمانی که پیام‌ها از کنسول Firebase ارسال می‌شود که محدودیت 1024 کاراکتری را اعمال می‌کند.

از سناریو استفاده کنید نحوه ارسال
پیام اعلان FCM به‌طور خودکار پیام را از طرف برنامه مشتری به دستگاه‌های کاربر نهایی نمایش می‌دهد. پیام‌های اعلان دارای مجموعه‌ای از کلیدهای قابل مشاهده برای کاربر از پیش تعریف‌شده و یک بار داده اختیاری از جفت‌های کلید-مقدار سفارشی هستند.
  1. در یک محیط قابل اعتماد مانند توابع ابر یا سرور برنامه خود را، با استفاده از SDK محیط مدیریت یا FCM سرور پروتکل : مجموعه ای از notification کلید. ممکن است بار داده اختیاری داشته باشد. همیشه تاشو

    برخی به نمونه هایی از اطلاعیه ها و محموله درخواست ارسال کنید.

  2. با استفاده از آهنگساز اطلاعیه : متن پیام، عنوان، و غیره را وارد کنید، و ارسال. با ارائه داده های سفارشی، بار داده اختیاری را اضافه کنید.
پیام داده برنامه مشتری مسئول پردازش پیام های داده است. پیام های داده فقط دارای جفت های کلید-مقدار سفارشی بدون نام کلید رزرو شده هستند (به زیر مراجعه کنید). در یک محیط قابل اعتماد مانند توابع ابر یا سرور برنامه خود را، با استفاده از SDK محیط مدیریت یا FCM سرور پروتکل : مجموعه ای از data کلید تنها.

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

FCM می‌تواند یک پیام اعلان شامل یک بار داده اختیاری ارسال کند. در چنین مواردی، FCM نمایش بار اعلان را کنترل می کند و برنامه مشتری بار داده را مدیریت می کند.

پیام های اطلاع رسانی

برای تست و یا برای بازاریابی و کاربران تعامل مجدد، شما می توانید پیام های اطلاع رسانی با استفاده از کنسول فایربیس ارسال . فایربیس کنسول فراهم می کند مبتنی بر تجزیه و تحلیل ترافیک A / B تست برای کمک به شما در بهبود و اصلاح پیام های بازاریابی.

برای پیام های اطلاع رسانی برنامه نویسی ارسال با استفاده از SDK محیط مدیریت و یا پروتکل های FCM، تعیین notification کلیدی با مجموعه ای از پیش تعریف شده لازم از گزینه کلید-مقدار برای بخش کاربر قابل مشاهده پیام های اطلاع رسانی. به عنوان مثال، در اینجا یک پیام اعلان با فرمت JSON در یک برنامه IM وجود دارد. کاربر می تواند انتظار داشته باشد پیامی با عنوان "پرتغال مقابل دانمارک" و متن "بازی عالی!" روی دستگاه:

{
  "message":{
    "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
    "notification":{
      "title":"Portugal vs. Denmark",
      "body":"great match!"
    }
  }
}

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

برای فهرست کامل کلیدهای از پیش تعریف شده موجود برای پیام های اعلان ساختمان، به مستندات مرجع مراجعه کنید:

پیام های داده

کلید مناسب را با جفت های کلید-مقدار سفارشی خود تنظیم کنید تا یک بار داده به برنامه مشتری ارسال شود.

به عنوان مثال، در اینجا یک پیام با قالب JSON در برنامه IM همان است که در بالا، که در آن اطلاعات در رایج محصور data کلید و برنامه ی کلاینت انتظار می رود که تفسیر محتوای:

{
  "message":{
    "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
    "data":{
      "Nick" : "Mario",
      "body" : "great match!",
      "Room" : "PortugalVSDenmark"
    }
  }
}

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

رمزگذاری برای پیام های داده

حمل و نقل آندروید لایه (نگاه کنید به معماری FCM ) با استفاده از رمزنگاری نقطه به نقطه است. بسته به نیاز خود، ممکن است تصمیم بگیرید که رمزگذاری سرتاسری را به پیام های داده اضافه کنید. FCM راه حل سرتاسری ارائه نمی دهد. با این حال، راه حل های خارجی در دسترس مانند وجود دارد مویرگی یا DTLS .

پیام‌های اعلان با بار داده اختیاری

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

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

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

در اینجا یک پیام با قالب JSON حاوی هر دو است notification کلید و data های کلیدی:

{
  "message":{
    "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
    "notification":{
      "title":"Portugal vs. Denmark",
      "body":"great match!"
    },
    "data" : {
      "Nick" : "Mario",
      "Room" : "PortugalVSDenmark"
    }
  }
}

سفارشی کردن پیام در پلتفرم ها

فایربیس محیط مدیریت SDK و پروتکل FCM V1 HTTP هر دو اجازه می دهد درخواست پیام خود را به مجموعه تمام زمینه های موجود در message شی. این شامل:

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

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

زمان استفاده از فیلدهای مشترک

وقتی هستید از فیلدهای مشترک استفاده کنید:

  • هدف قرار دادن نمونه برنامه در تمام سیستم عامل - اپل، اندروید، و وب
  • ارسال پیام به موضوعات

همه نمونه های برنامه، صرف نظر از پلتفرم، می توانند فیلدهای مشترک زیر را تفسیر کنند:

زمان استفاده از فیلدهای مخصوص پلتفرم

زمانی که می خواهید از فیلدهای مخصوص پلتفرم استفاده کنید:

  • فیلدها را فقط به پلتفرم های خاص ارسال کنید
  • ارسال زمینه پلت فرم خاص علاوه بر زمینه های مشترک

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

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

مثال: پیام اعلان با گزینه های تحویل پلت فرم خاص

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

  • مدت زمان طولانی را برای پلتفرم‌های اندروید و وب تعیین می‌کند، در حالی که اولویت پیام APN (پلتفرم‌های اپل) را روی تنظیمات کم تنظیم می‌کند.
  • مجموعه کلید های مناسب برای تعریف نتیجه یک شیر آب برای کاربران بر روی اطلاع رسانی بر روی آندروید و اپل - click_action ، و category ، به ترتیب.
{
  "message":{
     "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
     "notification":{
       "title":"Match update",
       "body":"Arsenal goal in added time, score is now 3-0"
     },
     "android":{
       "ttl":"86400s",
       "notification"{
         "click_action":"OPEN_ACTIVITY_1"
       }
     },
     "apns": {
       "headers": {
         "apns-priority": "5",
       },
       "payload": {
         "aps": {
           "category": "NEW_MESSAGE_CATEGORY"
         }
       }
     },
     "webpush":{
       "headers":{
         "TTL":"86400"
       }
     }
   }
 }

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

گزینه های تحویل

FCM مجموعه خاصی از گزینه‌های تحویل را برای پیام‌های ارسال شده به دستگاه‌های Android ارائه می‌کند و امکان گزینه‌های مشابه را در پلتفرم‌های اپل و وب فراهم می‌کند. برای مثال، "پیش ساخته" رفتار پیغام بر روی آندروید از طریق FCM حمایت collapse_key طریق، در اپل apns-collapse-id و جاوا اسکریپت / وب از طریق Topic . برای جزئیات، به توضیحات در این بخش و مستندات مرجع مرتبط مراجعه کنید.

پیام های تاشو و غیر قابل جمع شدن

پیام غیر تاشو نشان دهنده است که هر پیامی که به دستگاه تحویل داده است. یک پیام غیرقابل جمع کردن، محتوای مفیدی را ارائه می‌کند، برخلاف پیام‌های جمع‌شدنی مانند «پینگ» بدون محتوا به برنامه تلفن همراه برای تماس با سرور برای واکشی داده‌ها.

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

برای اندروید محدودیت 100 پیام وجود دارد که می توان آنها را بدون جمع کردن ذخیره کرد. در صورت رسیدن به حد مجاز، همه پیام های ذخیره شده حذف می شوند. هنگامی که دستگاه دوباره آنلاین می شود، یک پیام ویژه دریافت می کند که نشان می دهد به محدودیت رسیده است. سپس برنامه می‌تواند وضعیت را به درستی مدیریت کند، معمولاً با درخواست همگام‌سازی کامل از سرور برنامه.

پیام تاشو یک پیام که ممکن است توسط یک پیام جدید جایگزین اگر هنوز به به دستگاه تحویل داده می شود.

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

به علامت یک پیام به عنوان پیش ساخته در آندروید، شامل collapse_key پارامتر در محموله پیام. به طور پیش‌فرض، کلید collapse نام بسته برنامه ثبت شده در کنسول Firebase است. سرور FCM می تواند به طور همزمان چهار پیام جمع شونده مختلف را در هر دستگاه ذخیره کند که هر کدام دارای یک کلید جمع کردن متفاوت است. اگر از این تعداد تجاوز کنید، FCM فقط چهار کلید جمع شدنی را نگه می‌دارد، بدون اینکه تضمینی در مورد نگه داشتن آنها وجود داشته باشد.

پیام‌های موضوعی بدون محموله به‌طور پیش‌فرض قابل جمع‌شوندگی هستند.

از کدوم استفاده کنم؟

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

از سناریو استفاده کنید نحوه ارسال
غیر قابل جمع شدن هر پیامی برای برنامه مشتری مهم است و باید تحویل داده شود. به جز پیام های اعلان، همه پیام ها به طور پیش فرض غیرقابل جمع شدن هستند.
تاشو وقتی پیام جدیدتری وجود دارد که پیام قدیمی‌تر و مرتبط‌تر را بی‌ربط به برنامه مشتری نشان می‌دهد، FCM جایگزین پیام قدیمی‌تر می‌شود. برای مثال: پیام‌هایی که برای شروع همگام‌سازی داده‌ها از سرور استفاده می‌شوند یا پیام‌های اعلان قدیمی. پارامتر مناسب را در درخواست پیام خود تنظیم کنید:
  • collapseKey در آندروید
  • apns-collapse-id در اپل
  • Topic در وب
  • collapse_key در پروتکل های میراث (تمام سیستم عامل)

تنظیم اولویت یک پیام

شما دو گزینه برای اختصاص دادن اولویت تحویل به پیام های پایین دستی در اندروید دارید: عادی و اولویت بالا. تحویل پیام های عادی و با اولویت بالا به این صورت عمل می کند:

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

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

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

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

در اینجا نمونه ای از یک پیام اولویت معمولی است که از طریق پروتکل FCM HTTP v1 ارسال شده تا به مشترک مجله اطلاع دهد که محتوای جدید برای دانلود در دسترس است:

{
  "message":{
    "topic":"subscriber-updates",
    "notification":{
      "body" : "This week's edition is now available.",
      "title" : "NewsMagazine.com",
    },
    "data" : {
      "volume" : "3.21.15",
      "contents" : "http://www.news-magazine.com/world-week/21659772"
    },
    "android":{
      "priority":"normal"
    },
    "apns":{
      "headers":{
        "apns-priority":"5"
      }
    },
    "webpush": {
      "headers": {
        "Urgency": "high"
      }
    }
  }
}

برای جزئیات بیشتر پلتفرم خاص در مورد تنظیم اولویت پیام:

تنظیم طول عمر یک پیام

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

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

در اندروید و وب/جاوا اسکریپت، می توانید حداکثر طول عمر یک پیام را مشخص کنید. مدت زمان باید از 0 تا 2419200 ثانیه (28 روز) باشد و مربوط به حداکثر مدت زمانی است که FCM پیام را ذخیره می کند و تلاش می کند تا پیام را تحویل دهد. درخواست‌هایی که حاوی این فیلد نیستند به‌طور پیش‌فرض حداکثر چهار هفته است.

در اینجا برخی از کاربردهای احتمالی این ویژگی وجود دارد:

  • تماس های دریافتی چت تصویری
  • رویدادهای دعوت در حال انقضا
  • رویدادهای تقویم

یکی دیگر از مزایای تعیین طول عمر یک پیام این است که FCM هرگز پیام هایی را با مقدار زمان تا زنده 0 ثانیه کاهش نمی دهد. به عبارت دیگر، FCM بهترین تلاش را برای پیام هایی که باید «اکنون یا هرگز» تحویل داده شوند، تضمین می کند. به خاطر داشته باشید که time_to_live مقدار 0 به معنی پیام هایی که نمی تواند بلافاصله تحویل داده می شود دور انداخته می شوند. با این حال، از آنجایی که چنین پیام هایی هرگز ذخیره نمی شوند، بهترین تاخیر را برای ارسال پیام های اعلان فراهم می کند.

در اینجا نمونه ای از درخواستی است که شامل TTL می شود:

{
  "message":{
    "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
    "data":{
      "Nick" : "Mario",
      "body" : "great match!",
      "Room" : "PortugalVSDenmark"
    },
    "apns":{
      "headers":{
        "apns-expiration":"1604750400"
      }
    },
    "android":{
      "ttl":"4500s"
    },
    "webpush":{
      "headers":{
        "TTL":"4500"
      }
    }
  }
}

دریافت پیام از چندین فرستنده

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

برای فعال کردن این ویژگی، مطمئن شوید که شما هر فرستنده فرستنده ID . هنگام درخواست ثبت نام، برنامه مشتری چندین بار رمز را واکشی می کند، هر بار با شناسه فرستنده متفاوت در قسمت مخاطب، با استفاده از روش بازیابی رمز برای پلتفرم داده شده:

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

در نهایت، رمز ثبت نام را با فرستندگان مربوطه به اشتراک بگذارید، و آنها می توانند با استفاده از کلیدهای احراز هویت خود پیام هایی را به برنامه مشتری ارسال کنند.

توجه داشته باشید که محدودیت 100 فرستنده چندگانه وجود دارد.

طول عمر یک پیام

وقتی یک سرور برنامه پیامی را به FCM ارسال می کند و شناسه پیام را پس می گیرد، به این معنی نیست که پیام قبلاً به دستگاه تحویل داده شده است. بلکه به این معناست که برای تحویل پذیرفته شده است. اینکه پیام بعد از پذیرش چه اتفاقی می افتد به عوامل زیادی بستگی دارد.

در بهترین حالت، اگر دستگاه به FCM متصل باشد، صفحه نمایش روشن باشد و هیچ محدودیتی برای دریچه گاز وجود نداشته باشد، پیام بلافاصله ارسال می شود.

اگر دستگاه متصل باشد اما در Doze باشد، یک پیام با اولویت پایین توسط FCM ذخیره می شود تا زمانی که دستگاه از Doze خارج شود. و این که در آن collapse_key پرچم آن نقش دارد: اگر در حال حاضر یک پیام با همان کلید فروپاشی (و نشانه ثبت نام) ذخیره می شود و انتظار برای تحویل وجود دارد، پیام قدیمی دور ریخته می شود و پیغام جدید می گیرد خود را (که، قدیمی پیام توسط پیام جدید جمع می شود). با این حال، اگر کلید کوچک کردن تنظیم نشده باشد، هر دو پیام جدید و قدیمی برای تحویل آینده ذخیره می شوند.

اگر دستگاه به FCM متصل نباشد، پیام تا زمانی که یک اتصال برقرار شود ذخیره می‌شود (دوباره با رعایت قوانین کوچک کردن کلید). هنگامی که یک اتصال برقرار می شود، FCM همه پیام های معلق را به دستگاه تحویل می دهد. اگر دستگاه دیگر هرگز وصل نشود (مثلاً اگر به تنظیمات کارخانه بازنشانی شده باشد)، پیام در نهایت تمام می شود و از حافظه FCM حذف می شود. ایست به طور پیش فرض چهار هفته است، مگر اینکه time_to_live پرچم تنظیم شود.

برای دریافت بینش بیشتر در مورد تحویل یک پیام:

    برای به دست آوردن بینش بیشتر به تحویل پیام بر روی سیستم عامل آندروید یا اپل، نگاه کنید به داشبورد FCM گزارش ، که سوابق تعداد پیام برای "برداشت" (اطلاعیه دیده شده توسط کاربران) برای ارسال و باز در دستگاه های اپل و اندروید، همراه با داده برنامه های اندروید

برای دستگاه‌های Android با پیام‌رسانی مستقیم کانال فعال، اگر دستگاه بیش از یک ماه به FCM متصل نشده باشد، FCM همچنان پیام را می‌پذیرد اما فوراً آن را نادیده می‌گیرد. اگر دستگاه در عرض چهار هفته از داده پیام های گذشته شما به آن فرستاده متصل، مشتری خود را دریافت onDeletedMessages () پاسخ به تماس. سپس برنامه می‌تواند وضعیت را به درستی مدیریت کند، معمولاً با درخواست همگام‌سازی کامل از سرور برنامه.

در نهایت، زمانی که FCM تلاش می‌کند پیامی را به دستگاه ارسال کند و برنامه حذف شد، FCM فوراً آن پیام را کنار گذاشته و رمز ثبت نام را باطل می‌کند. تلاش های آینده به ارسال پیام به که نتایج دستگاه را در یک NotRegistered خطا.

دریچه گیری و پوسته پوسته شدن

هدف ما این است که همیشه هر پیامی را که از طریق FCM ارسال می شود، ارائه دهیم. با این حال، ارائه هر پیام گاهی اوقات منجر به تجربه کلی ضعیف کاربر می شود. در موارد دیگر، ما باید مرزهایی را برای اطمینان از اینکه FCM یک سرویس مقیاس پذیر برای همه فرستنده ها ارائه می دهد، ارائه کنیم.

خفه کردن پیام تاشو

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

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

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

ما پیام‌های جمع‌شونده را به 20 پیام در هر برنامه در هر دستگاه محدود می‌کنیم و هر 3 دقیقه یک پیام را دوباره پر می‌کنیم.

خفه کردن سرور XMPP

ما نرخ اتصال شما به سرورهای FCM XMPP را به 400 اتصال در دقیقه در هر پروژه محدود می کنیم. این نباید برای تحویل پیام مشکلی ایجاد کند، اما برای اطمینان از ثبات سیستم ما مهم است.

برای هر پروژه، FCM اجازه 2500 اتصال را به صورت موازی می دهد.

حداکثر نرخ پیام به یک دستگاه

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

محدودیت پیام بالادستی

ما محدود پیام بالادست در 1500000 / دقیقه در هر پروژه برای جلوگیری از اضافه بار سرور مقصد بالادست.

ما پیام‌های بالادستی را در هر دستگاه در 1000 در دقیقه محدود می‌کنیم تا در برابر تخلیه باتری در اثر رفتار بد برنامه محافظت کنیم.

محدودیت پیام موضوع

نرخ اضافه/حذف اشتراک موضوع به 3000 QPS در هر پروژه محدود شده است.

برای نرخ ارسال پیام، و گنجایش خروجی گرفتن گلوگاه .

دریچه گاز هوا

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

پیام fanout آنی نیست و بنابراین گاهی اوقات شما چندین fanout به طور همزمان در حال انجام است. ما تعداد پیام‌های ارسال پیام همزمان در هر پروژه را به 1000 محدود می‌کنیم. پس از آن، ممکن است درخواست‌های fanout اضافی را رد کنیم یا fanout درخواست‌ها را تا زمانی که برخی از Fanout‌های در حال انجام تکمیل شده اند به تعویق بیاندازیم.

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

پورت های FCM و فایروال شما

اگر سازمان شما دیوار آتشی برای محدود کردن ترافیک به اینترنت یا از اینترنت دارد، باید آن را طوری پیکربندی کنید که به دستگاه‌های تلفن همراه اجازه دهد به FCM متصل شوند تا دستگاه‌های موجود در شبکه شما پیام‌ها را دریافت کنند. FCM معمولا از پورت 5228 استفاده می کند، اما گاهی اوقات از 443، 5229 و 5230 استفاده می کند.

برای دستگاه‌هایی که به شبکه شما متصل می‌شوند، FCM IP خاصی ارائه نمی‌کند، زیرا محدوده IP ما به‌طور مکرر تغییر می‌کند و قوانین فایروال شما ممکن است قدیمی شود و بر تجربه کاربران شما تأثیر بگذارد. در حالت ایده آل، پورت های مجاز 5228-5230 و 443 بدون محدودیت IP. با این حال، اگر شما باید محدودیت IP، شما باید تمام از آدرس IP ذکر شده در allowlist goog.json . این لیست بزرگ به طور منظم به روز می شود و به شما توصیه می شود قوانین خود را به صورت ماهانه به روز کنید. مشکلات ناشی از محدودیت های IP فایروال اغلب متناوب هستند و تشخیص آنها دشوار است.

ما مجموعه ای از نام های دامنه را ارائه می دهیم که می توانند به جای آدرس های IP در لیست مجاز قرار گیرند. آن نام هاست در زیر فهرست شده است. اگر شروع به استفاده از نام هاست اضافی کنیم، لیست را در اینجا به روز می کنیم. استفاده از نام دامنه برای قانون فایروال شما ممکن است در دستگاه فایروال شما کاربردی باشد یا نباشد.

پورت هایی که باید باز شوند:

  • 5228
  • 5229
  • 5230
  • 443

نام هاست برای باز کردن:

  • mtalk.google.com
  • mtalk4.google.com
  • mtalk-staging.google.com
  • mtalk-dev.google.com
  • alt1-mtalk.google.com
  • alt2-mtalk.google.com
  • alt3-mtalk.google.com
  • alt4-mtalk.google.com
  • alt5-mtalk.google.com
  • alt6-mtalk.google.com
  • alt7-mtalk.google.com
  • alt8-mtalk.google.com
  • android.clients.google.com
  • device-provisioning.googleapis.com

فایروال‌های ترجمه آدرس شبکه و/یا بازرسی بسته دولتی:

اگر شبکه شما ترجمه آدرس شبکه (NAT) یا بازرسی بسته دولتی (SPI) را اجرا می کند، یک بازه زمانی 30 دقیقه ای یا بیشتر برای اتصالات ما از طریق پورت های 5228-5230 اعمال کنید. این ما را قادر می‌سازد تا ضمن کاهش مصرف باتری دستگاه‌های تلفن همراه کاربران، اتصال مطمئنی را ارائه دهیم.

اعتبارنامه

بسته به ویژگی‌های FCM که پیاده‌سازی می‌کنید، ممکن است به اعتبارنامه‌های زیر از پروژه Firebase خود نیاز داشته باشید:

شناسه پروژه یک شناسه منحصر به فرد برای پروژه Firebase شما، که در درخواست‌ها به نقطه پایانی FCM v1 HTTP استفاده می‌شود. این مقدار در دسترس است فایربیس کنسول تنظیمات پنجره.
رمز ثبت نام

یک رشته رمز منحصر به فرد که هر نمونه برنامه مشتری را شناسایی می کند. رمز ثبت نام برای پیام‌رسانی تک دستگاهی و گروهی دستگاه مورد نیاز است. توجه داشته باشید که نشانه های ثبت نام باید مخفی نگه داشته شوند.

شناسه فرستنده ارزش عددی منحصر به فرد ایجاد شده در هنگام پروژه Firebase خود، در دسترس در ایجاد ابر پیام تب از پنجره فایربیس کنسول تنظیمات. شناسه فرستنده برای شناسایی هر فرستنده ای که می تواند به برنامه مشتری پیام ارسال کند، استفاده می شود.
نشانه دسترسی یک توکن کوتاه مدت OAuth 2.0 که درخواست ها را به API HTTP v1 مجاز می کند. این نشانه با یک حساب خدماتی مرتبط است که به پروژه Firebase شما تعلق دارد. برای ایجاد و دسترسی چرخش نشانه، مراحل شرح داده شده در دنبال ارسال درخواست اجازه .
کلید سرور (برای پروتکل های قدیمی)

یک کلید سرور که به سرور برنامه شما اجازه دسترسی به خدمات Google را می دهد، از جمله ارسال پیام از طریق پروتکل های قدیمی Firebase Cloud Messaging. وقتی پروژه Firebase خود را ایجاد می کنید، کلید سرور را به دست می آورید. شما می توانید آن را در نظر ابر پیام تب از پنجره فایربیس کنسول تنظیمات.

مهم: آیا سرور در هر نقطه کلیدی در کد مشتری خود را شامل نمی شود. همچنین، مطمئن شوید که فقط از کلیدهای سرور برای مجوز دادن به سرور برنامه خود استفاده می کنید. کلیدهای اندروید، پلتفرم اپل و مرورگر توسط FCM رد می شوند.