این سند مرجعی برای نحو XMPP ارائه میدهد که برای ارسال پیامها بین سرور برنامه، برنامههای مشتری، و Firebase Cloud Messaging (FCM) استفاده میشود. سرور برنامه شما باید به این نقاط پایانی متصل شود:
// Production fcm-xmpp.googleapis.com:5235 // Testing fcm-xmpp.googleapis.com:5236
پارامترها و گزینه های موجود در این دسته بندی ها قرار می گیرند:
نحو پیام پایین دست
این بخش نحوی را برای ارسال پیام های پایین دستی ارائه می دهد.
پیامهای XMPP پاییندست (JSON)
جدول زیر اهداف، گزینهها و بارگذاری پیامهای XMPP JSON را فهرست میکند.
پارامتر | استفاده | توضیحات | |
---|---|---|---|
هدف | |||
to | اختیاری، رشته | این پارامتر گیرنده پیام را مشخص می کند. این مقدار می تواند نشانه ثبت نام دستگاه، کلید اعلان گروه دستگاه یا یک موضوع واحد (پیشوند با | |
condition | اختیاری، رشته | این پارامتر یک بیان منطقی از شرایط را مشخص می کند که هدف پیام را تعیین می کند. شرایط پشتیبانی شده: موضوع، قالببندی شده به عنوان «موضوع شما» در موضوعات. این مقدار به حروف بزرگ و کوچک حساس نیست. اپراتورهای پشتیبانی شده: | |
گزینه ها | |||
message_id | مورد نیاز، رشته | این پارامتر به طور منحصر به فرد پیامی را در یک اتصال XMPP شناسایی می کند. | |
collapse_key | اختیاری، رشته | این پارامتر گروهی از پیامها را شناسایی میکند (بهعنوان مثال، با هیچ تضمینی برای ترتیب ارسال پیام ها وجود ندارد. توجه: حداکثر 4 کلید کوچک کردن مختلف در هر زمان مجاز است. این بدان معناست که FCM می تواند به طور همزمان 4 پیام مختلف را در هر برنامه مشتری ذخیره کند. اگر از این تعداد تجاوز کنید، هیچ تضمینی وجود ندارد که FCM کدام 4 کلید جمع شدنی را حفظ کند. | |
priority | اختیاری، رشته | اولویت پیام را تعیین می کند. مقادیر معتبر «نرمال» و «بالا» هستند. در پلتفرمهای اپل، این موارد با اولویتهای 5 و 10 APN مطابقت دارند. به طور پیشفرض، پیامهای اعلان با اولویت بالا و پیامهای داده با اولویت عادی ارسال میشوند. اولویت عادی مصرف باتری برنامه مشتری را بهینه می کند و باید از آن استفاده کرد مگر اینکه تحویل فوری لازم باشد. برای پیامهایی با اولویت معمولی، برنامه ممکن است پیام را با تاخیر نامشخصی دریافت کند. هنگامی که پیامی با اولویت بالا ارسال می شود، بلافاصله ارسال می شود و برنامه می تواند یک اعلان نمایش دهد. | |
content_available | اختیاری، بولی | در پلتفرمهای اپل، از این فیلد برای نمایش | |
mutable_content | اختیاری، JSON boolean | در پلتفرمهای اپل، از این فیلد برای نمایش | |
time_to_live | اختیاری، شماره | این پارامتر مشخص می کند که در صورت آفلاین بودن دستگاه، چه مدت (بر حسب ثانیه) پیام باید در فضای ذخیره سازی FCM نگهداری شود. حداکثر زمان پشتیبانی زنده 4 هفته و مقدار پیش فرض آن 4 هفته است. برای اطلاعات بیشتر، به تنظیم طول عمر پیام مراجعه کنید. | |
dry_run | اختیاری، بولی | این پارامتر، وقتی روی مقدار پیش فرض | |
بار | |||
data | اختیاری، شی | این پارامتر جفت های کلید-مقدار محموله پیام را مشخص می کند. برای مثال، با در پلتفرمهای اپل، اگر پیام توسط APN تحویل داده شود، فیلدهای داده سفارشی را نشان میدهد. اگر توسط FCM تحویل داده شود، به عنوان یک فرهنگ لغت ارزش کلیدی در در Android، این منجر به یک کلید نباید یک کلمه رزرو شده باشد ("from"، "message_type" یا هر کلمه ای که با "google" یا "gcm" شروع می شود). از هیچ یک از کلمات تعریف شده در این جدول (مانند مقادیر در انواع رشته توصیه می شود. شما باید مقادیر موجود در اشیا یا سایر انواع داده های غیر رشته ای (مثلاً اعداد صحیح یا بولی) را به رشته تبدیل کنید. | |
notification | اختیاری، شی | این پارامتر جفتهای کلید-مقدار از پیش تعریفشده و قابل رویت کاربر از بار اعلان را مشخص میکند. برای جزئیات بیشتر به پشتیبانی بار بار اعلان مراجعه کنید. برای اطلاعات بیشتر درباره گزینههای پیام اعلان و پیام داده، به انواع پیام مراجعه کنید. اگر یک بار اعلان ارائه شود، یا گزینه content_available برای پیامی به دستگاه Apple روی true تنظیم شده باشد، پیام از طریق APN ارسال می شود، در غیر این صورت از طریق FCM ارسال می شود. |
پشتیبانی از بارگیری اعلان
جداول زیر کلیدهای از پیش تعریف شده موجود برای ایجاد پیام های اعلان برای پلتفرم های اپل و اندروید را فهرست می کنند.
پارامتر | استفاده | توضیحات |
---|---|---|
title | اختیاری، رشته | عنوان اطلاعیه این فیلد در گوشی ها و تبلت ها قابل مشاهده نیست. |
body | اختیاری، رشته | متن متن اعلان. |
sound | اختیاری، رشته | زمانی که دستگاه اعلان را دریافت می کند، صدایی پخش می شود. رشته ای که فایل های صوتی را در بسته اصلی برنامه کلاینت یا در پوشه |
badge | اختیاری، رشته | مقدار نشان در نماد برنامه صفحه اصلی. اگر مشخص نشده باشد، نشان تغییر نمی کند. اگر روی |
click_action | اختیاری، رشته | اقدام مرتبط با کلیک کاربر بر روی اعلان. مربوط به |
subtitle | اختیاری، رشته | زیرنویس اطلاعیه |
body_loc_key | اختیاری، رشته | کلید رشته بدنه در منابع رشته برنامه برای بومی سازی متن متن به محلی سازی فعلی کاربر. مربوط به برای اطلاعات بیشتر به مرجع کلید Payload و محلی سازی محتوای اعلان های راه دور خود مراجعه کنید. |
body_loc_args | اختیاری، آرایه JSON به عنوان رشته | مقادیر رشته متغیری که به جای مشخص کننده های قالب در مربوط به برای اطلاعات بیشتر به مرجع کلید Payload و محلی سازی محتوای اعلان های راه دور خود مراجعه کنید. |
title_loc_key | اختیاری، رشته | کلید رشته عنوان در منابع رشته برنامه برای بومی سازی متن عنوان در محلی سازی فعلی کاربر. مربوط به برای اطلاعات بیشتر به مرجع کلید Payload و محلی سازی محتوای اعلان های راه دور خود مراجعه کنید. |
title_loc_args | اختیاری، آرایه JSON به عنوان رشته | مقادیر رشته متغیری که به جای مشخص کننده های قالب در مربوط به برای اطلاعات بیشتر به مرجع کلید Payload و محلی سازی محتوای اعلان های راه دور خود مراجعه کنید. |
پارامتر | استفاده | توضیحات |
---|---|---|
title | اختیاری، رشته | عنوان اطلاعیه |
body | اختیاری، رشته | متن متن اعلان. |
android_channel_id | اختیاری، رشته | شناسه کانال اعلان (جدید در Android O). قبل از دریافت هر گونه اعلان با این شناسه کانال، برنامه باید کانالی با این شناسه کانال ایجاد کند. اگر این شناسه کانال را در درخواست ارسال نکنید، یا اگر شناسه کانال ارائهشده هنوز توسط برنامه ایجاد نشده باشد، FCM از شناسه کانال مشخصشده در مانیفست برنامه استفاده میکند. |
icon | اختیاری، رشته | نماد اعلان نماد اعلان را برای |
sound | اختیاری، رشته | زمانی که دستگاه اعلان را دریافت می کند، صدایی پخش می شود. از |
tag | اختیاری، رشته | شناسه برای جایگزینی اعلانهای موجود در کشوی اعلان استفاده میشود. اگر مشخص نشده باشد، هر درخواست یک اعلان جدید ایجاد می کند. اگر مشخص شده باشد و اعلانی با همان برچسب قبلاً نشان داده شده باشد، اعلان جدید جایگزین اعلان موجود در کشوی اعلان می شود. |
color | اختیاری، رشته | رنگ نماد اعلان، که در قالب |
click_action | اختیاری، رشته | اقدام مرتبط با کلیک کاربر بر روی اعلان. اگر مشخص شده باشد، زمانی که کاربر روی اعلان کلیک می کند، یک فعالیت با فیلتر هدف منطبق راه اندازی می شود. |
body_loc_key | اختیاری، رشته | کلید رشته بدنه در منابع رشته برنامه برای بومی سازی متن متن به محلی سازی فعلی کاربر. برای اطلاعات بیشتر به منابع رشته مراجعه کنید. |
body_loc_args | اختیاری، آرایه JSON به عنوان رشته | مقادیر رشته متغیری که به جای مشخص کننده های قالب در برای اطلاعات بیشتر به قالببندی و استایلسازی مراجعه کنید. |
title_loc_key | اختیاری، رشته | کلید رشته عنوان در منابع رشته برنامه برای بومی سازی متن عنوان در محلی سازی فعلی کاربر. برای اطلاعات بیشتر به منابع رشته مراجعه کنید. |
title_loc_args | اختیاری، آرایه JSON به عنوان رشته | مقادیر رشته متغیری که به جای مشخص کننده های قالب در برای اطلاعات بیشتر به قالببندی و استایلسازی مراجعه کنید. |
پارامتر | استفاده | توضیحات |
---|---|---|
title | اختیاری، رشته | عنوان اطلاعیه |
body | اختیاری، رشته | متن متن اعلان. |
icon | اختیاری، رشته | URL مورد استفاده برای نماد اعلان. |
click_action | اختیاری، رشته | اقدام مرتبط با کلیک کاربر بر روی اعلان. برای همه مقادیر URL، HTTPS مورد نیاز است. |
یک پاسخ پیام XMPP پایین دستی را تفسیر کنید
جدول زیر فیلدهایی را فهرست می کند که در پاسخ پیام XMPP پایین دستی ظاهر می شوند.
پارامتر | استفاده | توضیحات |
---|---|---|
from | مورد نیاز، رشته | این پارامتر مشخص می کند که چه کسی این پاسخ را ارسال کرده است. مقدار، نشانه ثبت نام برنامه مشتری است. |
message_id | مورد نیاز، رشته | این پارامتر به طور منحصر به فرد پیامی را در یک اتصال XMPP شناسایی می کند. مقدار رشته ای است که پیام مرتبط را به طور منحصر به فرد شناسایی می کند. |
message_type | مورد نیاز، رشته | این پارامتر یک پیام اگر مقدار روی |
error | اختیاری، رشته | این پارامتر خطای مربوط به پیام downstream را مشخص می کند. زمانی تنظیم می شود که message_type nack باشد. برای جزئیات به جدول 4 مراجعه کنید. |
error_description | اختیاری، رشته | این پارامتر اطلاعات توصیفی برای خطا فراهم می کند. زمانی تنظیم می شود که message_type nack باشد. |
کدهای پاسخ خطای پیام پایین دست
جدول زیر کدهای پاسخ خطا را برای پیام های پایین دستی فهرست می کند.
خطا | کد XMPP | اقدام توصیه شده |
---|---|---|
رمز ثبت نام وجود ندارد | INVALID_JSON | بررسی کنید که درخواست حاوی یک نشانه ثبت نام باشد (در registration_id در یک پیام متنی ساده، یا در قسمت to یا registration_ids در JSON). |
ثبت نام APN نامعتبر است | INVALID_JSON | برای ثبتنامهای iOS، بررسی کنید که درخواست ثبتنام از سوی مشتری حاوی یک رمز APN معتبر و شناسه برنامه باشد. |
رمز ثبت نام معتبر است | BAD_REGISTRATION | فرمت رمز ثبت نامی که به سرور ارسال می کنید را بررسی کنید. مطمئن شوید که با نشانه ثبتی که برنامه مشتری از ثبت نام در FCM دریافت می کند مطابقت دارد. از کوتاه کردن یا اضافه کردن کاراکترهای اضافی خودداری کنید. |
دستگاه ثبت نشده | DEVICE_UNREGISTERED | یک نشانه ثبت نام موجود ممکن است در تعدادی از سناریوها معتبر نباشد، از جمله:
|
فرستنده ناهماهنگ | SENDER_ID_MISMATCH | یک نشانه ثبت نام به گروه خاصی از فرستندگان گره خورده است. هنگامی که یک برنامه مشتری برای FCM ثبت نام می کند، باید مشخص کند که کدام فرستنده مجاز به ارسال پیام است. هنگام ارسال پیام به برنامه مشتری باید از یکی از آن شناسه های فرستنده استفاده کنید. اگر به فرستنده دیگری بروید، نشانههای ثبتنام موجود کار نمیکنند. |
JSON نامعتبر است | INVALID_JSON | بررسی کنید که پیام JSON به درستی قالب بندی شده باشد و حاوی فیلدهای معتبر باشد (به عنوان مثال، مطمئن شوید که نوع داده مناسب ارسال شده است). |
پیام خیلی بزرگ است | INVALID_JSON | بررسی کنید که حجم کل دادههای محموله موجود در یک پیام از محدودیتهای FCM تجاوز نکند: 4096 بایت برای بیشتر پیامها یا 2048 بایت در مورد پیامها به موضوعات. این شامل کلیدها و مقادیر می شود. |
کلید داده نامعتبر است | INVALID_JSON | بررسی کنید که دادههای محموله حاوی کلید (مانند from ، gcm یا هر مقداری که پیشوند google است) نباشد که به صورت داخلی توسط FCM استفاده میشود. توجه داشته باشید که برخی از کلمات (مانند collapse_key ) نیز توسط FCM استفاده می شوند اما در payload مجاز هستند، در این صورت مقدار payload با مقدار FCM لغو می شود. |
زمان نامعتبر برای زندگی | INVALID_JSON | بررسی کنید که مقدار استفاده شده در time_to_live یک عدد صحیح باشد که نشان دهنده مدت زمان در ثانیه بین 0 تا 2,419,200 (4 هفته) است. |
پیام ACK بد | BAD_ACK | قبل از تلاش مجدد بررسی کنید که پیام ack به درستی قالب بندی شده باشد. برای جزئیات به جدول 6 مراجعه کنید. |
تایم اوت | SERVICE_UNAVAILABLE | سرور نتوانست به موقع درخواست را پردازش کند. همان درخواست را دوباره امتحان کنید، اما باید:
توجه: فرستنده هایی که مشکل ایجاد می کنند در معرض خطر قرار گرفتن در لیست سیاه هستند. |
خطای سرور داخلی | INTERNAL_SERVER_ | سرور هنگام تلاش برای پردازش درخواست با خطایی مواجه شد. میتوانید با پیروی از شرایط ذکر شده در «Timeout»، همان درخواست را دوباره امتحان کنید (به ردیف بالا مراجعه کنید). |
نرخ پیام دستگاه بیش از حد است | DEVICE_MESSAGE_RATE | نرخ پیام به یک دستگاه خاص بسیار بالا است. تعداد پیام های ارسال شده به این دستگاه را کاهش دهید و فوراً ارسال مجدد به این دستگاه را تکرار نکنید. |
نرخ پیام موضوعات بیشتر شد | TOPICS_MESSAGE_RATE | نرخ پیام به مشترکین یک موضوع خاص بسیار زیاد است. تعداد پیام های ارسال شده برای این موضوع را کاهش دهید و بلافاصله ارسال مجدد را تکرار نکنید. |
تخلیه اتصال | CONNECTION_DRAINING | پیام پردازش نشد زیرا اتصال در حال تخلیه است. این به این دلیل اتفاق میافتد که بهطور دورهای، FCM باید یک اتصال را ببندد تا تعادل بار را انجام دهد. پیام را از طریق یک اتصال XMPP دیگر امتحان کنید. |
اعتبارنامه های APN نامعتبر | INVALID_APNS_CREDENTIAL | پیامی که برای یک دستگاه iOS هدف گذاری شده است ارسال نشد زیرا کلید احراز هویت APN های مورد نیاز آپلود نشده یا منقضی شده است. اعتبار اعتبارنامه توسعه و تولید خود را بررسی کنید. |
احراز هویت ناموفق بود | AUTHENTICATION_FAILED | احراز هویت با سرویسهای فشار خارجی انجام نشد. بررسی کنید که آیا از گواهینامه های فشار وب درست استفاده می کنید. |
نحو پیام بالادست
پیام upstream پیامی است که برنامه مشتری به سرور برنامه ارسال می کند. در حال حاضر فقط XMPP از پیام رسانی بالادستی پشتیبانی می کند. برای اطلاعات بیشتر درباره ارسال پیام از برنامههای سرویس گیرنده، به اسناد پلتفرم خود مراجعه کنید.
تفسیر یک پیام بالادستی XMPP
جدول زیر فیلدهای مصراع XMPP را که توسط FCM در پاسخ به درخواستهای پیام بالادستی از برنامههای کلاینت ایجاد شده است، توضیح میدهد.
پارامتر | استفاده | توضیحات |
---|---|---|
from | مورد نیاز، رشته | این پارامتر مشخص می کند که چه کسی پیام را ارسال کرده است. مقدار، نشانه ثبت نام برنامه مشتری است. |
category | مورد نیاز، رشته | این پارامتر نام بسته برنامه برنامه مشتری که پیام را ارسال کرده است را مشخص می کند. |
message_id | مورد نیاز، رشته | این پارامتر شناسه منحصر به فرد پیام را مشخص می کند. |
data | اختیاری، رشته | این پارامتر جفت های کلید-مقدار محموله پیام را مشخص می کند. |
ارسال پیام ACK
جدول زیر پاسخ ACK را توضیح می دهد که انتظار می رود سرور برنامه در پاسخ به پیامی که سرور برنامه دریافت کرده است به FCM ارسال کند.
پارامتر | استفاده | توضیحات |
---|---|---|
to | مورد نیاز، رشته | این پارامتر گیرنده پیام پاسخ را مشخص می کند. مقدار باید نشانه ثبت نام برنامه مشتری باشد که پیام بالادستی را ارسال کرده است. |
message_id | مورد نیاز، رشته | این پارامتر مشخص می کند که پاسخ برای کدام پیام در نظر گرفته شده است. مقدار باید مقدار message_id از پیام بالادستی مربوطه باشد. |
message_type | مورد نیاز، رشته | این پارامتر یک پیام ack از یک سرور برنامه به CCS را مشخص می کند. برای پیامهای بالادست، همیشه باید روی ack تنظیم شود. |
پیام های سرور FCM (XMPP)
این پیامی است که از FCM به سرور برنامه ارسال می شود. در اینجا انواع اصلی پیام هایی که FCM به سرور برنامه ارسال می کند آورده شده است:
- کنترل: این پیامهای تولید شده توسط CCS نشان میدهند که اقدامی از سرور برنامه لازم است.
جدول زیر فیلدهای موجود در پیامهایی را که CCS به سرور برنامه ارسال میکند، توضیح میدهد.
پارامتر | استفاده | توضیحات |
---|---|---|
میدان مشترک | ||
message_type | مورد نیاز، رشته | این پارامتر نوع پیام را مشخص می کند: control. هنگامی که روی |
control_type | اختیاری، رشته | این پارامتر نوع پیام کنترل ارسال شده از FCM را مشخص می کند. در حال حاضر، فقط |