درباره پیام های 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 تمام پارامترهای مشخص شده را در نظر می گیرد و پیام را برای هر پلتفرم سفارشی می کند.

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

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

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

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

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

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

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

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

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

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

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

  • مدت زمان زیادی را برای سیستم عامل های Android و وب در نظر می گیرد ، در حالی که اولویت پیام APN ها (iOS) را بر روی تنظیمات پایین تنظیم می کند
  • مجموعه کلید های مناسب برای تعریف نتیجه یک شیر آب برای کاربران بر روی اطلاع رسانی در اندروید و iOS - 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 ارائه می دهد و گزینه های مشابه را در iOS و وب مجاز می کند. برای مثال، "پیش ساخته" رفتار پیغام بر روی آندروید از طریق FCM حمایت collapse_key طریق، در iOS apns-collapse-id و جاوا اسکریپت / وب از طریق Topic . برای جزئیات بیشتر ، توضیحات در این بخش و اسناد مرجع مربوطه را ببینید.

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

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

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

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

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

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

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

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

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

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

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

تعیین اولویت پیام

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

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

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

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

    از آنجا که بخش کوچکی از جمعیت تلفن همراه Android در شبکه های با تاخیر بالا هستند ، قبل از نمایش اعلان ، از باز کردن اتصال به سرورهای خود اجتناب کنید. تماس مجدد با سرور قبل از پایان زمان مجاز پردازش ممکن است برای کاربران در شبکه های با تاخیر بالا خطرناک باشد. در عوض ، محتوای اعلان را در پیام 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 معمولاً پیامها را بلافاصله پس از ارسال ارسال می کند. با این حال ، این ممکن است همیشه ممکن نباشد. به عنوان مثال ، اگر سیستم عامل Android است ، ممکن است دستگاه خاموش ، آفلاین یا در غیر این صورت در دسترس نباشد. یا FCM ممکن است عمداً پیامها را به تأخیر بیندازد تا از مصرف بیش از حد برنامه و تأثیر منفی بر طول عمر باتری جلوگیری کند.

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

در Android و Web/JavaScript ، می توانید حداکثر طول عمر یک پیام را مشخص کنید. مقدار باید از 0 تا 2،419،200 ثانیه (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 پرچم تنظیم شود.

برای درک بیشتر در مورد ارسال پیام:

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

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

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

سوزش و پوسته پوسته شدن

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

خم شدن پیام تاشو

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

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

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

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

خاموش شدن سرور XMPP

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

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

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

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

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

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

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

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

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

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

دریچه گاز خاموش

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

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

میزان واقعی 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) یا Stateful Packet Inspection (SPI) را پیاده سازی می کند ، زمان 30 دقیقه یا بیشتر برای اتصالات ما در درگاه های 5228-5230 اعمال کنید. این ما را قادر می سازد تا اتصال قابل اعتماد را در عین کاهش مصرف باتری دستگاه های تلفن همراه کاربران خود ارائه دهیم.

اعتبارنامه ها

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

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

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

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

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

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