کدهای خطای REST برای HTTP v1 API
پاسخهای خطای HTTP برای HTTP v1 API شامل یک کد خطا، یک پیام خطا و وضعیت خطا هستند. همچنین ممکن است شامل یک آرایه details
با جزئیات بیشتر در مورد خطا باشند.
در اینجا دو نمونه پاسخ خطا آورده شده است:
مثال ۱: پاسخ خطا از یک درخواست HTTP v1 API با مقدار نامعتبر در یک پیام داده
{
"error": {
"code": 400,
"message": "Invalid value at 'message.data[0].value' (TYPE_STRING), 12",
"status": "INVALID_ARGUMENT",
"details": [
{
"@type": "type.googleapis.com/google.rpc.BadRequest",
"fieldViolations": [
{
"field": "message.data[0].value",
"description": "Invalid value at 'message.data[0].value' (TYPE_STRING), 12"
}
]
}
]
}
}
مثال ۲: پاسخ خطا از یک درخواست HTTP v1 API با یک توکن ثبت نام نامعتبر
{
"error": {
"code": 400,
"message": "The registration token is not a valid FCM registration token",
"status": "INVALID_ARGUMENT",
"details": [
{
"@type": "type.googleapis.com/google.firebase.fcm.v1.FcmError",
"errorCode": "INVALID_ARGUMENT"
}
]
}
}
توجه داشته باشید که هر دو پیام کد و وضعیت یکسانی دارند، اما آرایه details شامل مقادیری با انواع مختلف است. مثال اول دارای نوع type.googleapis.com/google.rpc.BadRequest
است که نشان دهنده خطا در مقادیر درخواست است. مثال دوم با نوع type.googleapis.com/google.firebase.fcm.v1.FcmError
دارای یک خطای خاص FCM است. برای بسیاری از خطاها، آرایه details شامل اطلاعاتی است که برای اشکال زدایی و یافتن راه حل نیاز دارید.
جدول زیر کدهای خطای FCM v1 REST API و توضیحات آنها را فهرست میکند.
کد خطا | مراحل شرح و حل مسئله |
---|---|
UNSPECIFIED_ERROR اطلاعات بیشتری در مورد این خطا در دسترس نیست. | هیچ کدام. |
INVALID_ARGUMENT (کد خطای HTTP = ۴۰۰) پارامترهای درخواست نامعتبر بودند. پسوندی از نوع google.rpc.BadRequest برگردانده میشود تا مشخص کند کدام فیلد نامعتبر بوده است. | دلایل احتمالی شامل ثبت نام نامعتبر، نام بسته نامعتبر، پیام خیلی بزرگ، کلید داده نامعتبر، TTL نامعتبر یا سایر پارامترهای نامعتبر است. ثبت نام نامعتبر : قالب توکن ثبت نامی که به سرور ارسال میکنید را بررسی کنید. مطمئن شوید که با توکن ثبت نامی که برنامه کلاینت از ثبت نام با FCM دریافت میکند، مطابقت دارد. توکن را کوتاه نکنید یا کاراکترهای اضافی اضافه نکنید. نام بسته نامعتبر : مطمئن شوید که پیام به توکن ثبتی ارسال شده است که نام بسته آن با مقدار ارسالی در درخواست مطابقت دارد. پیام خیلی بزرگ است : بررسی کنید که اندازه کل دادههای بار داده موجود در یک پیام از محدودیتهای FCM تجاوز نکند: ۴۰۹۶ بایت برای اکثر پیامها، یا ۲۰۴۸ بایت در مورد پیامهای مربوط به تاپیکها. این شامل کلیدها و مقادیر میشود. کلید داده نامعتبر : بررسی کنید که دادههای payload حاوی کلیدی (مانند from، یا gcm، یا هر مقداری که با پیشوند google مشخص شده است) که به صورت داخلی توسط FCM استفاده میشود، نباشند. توجه داشته باشید که برخی از کلمات (مانند collapse_key) توسط FCM نیز استفاده میشوند اما در payload مجاز هستند، که در این صورت مقدار payload توسط مقدار FCM لغو میشود. TTL نامعتبر : بررسی کنید که مقدار استفاده شده در ttl یک عدد صحیح باشد که نشان دهنده مدت زمان بر حسب ثانیه بین 0 تا 2,419,200 (4 هفته) باشد. پارامترهای نامعتبر : بررسی کنید که پارامترهای ارائه شده نام و نوع صحیحی داشته باشند. |
UNREGISTERED (کد خطای HTTP = 404) نمونه برنامه از FCM ثبت نشده است. این معمولاً به این معنی است که توکن استفاده شده دیگر معتبر نیست و باید از یک توکن جدید استفاده شود. | این خطا میتواند ناشی از فقدان توکنهای ثبت نام یا توکنهای ثبت نشده باشد. فقدان ثبت نام : اگر هدف پیام یک مقدار token است، بررسی کنید که درخواست حاوی یک توکن ثبت نام باشد.ثبت نشده : یک توکن ثبت موجود ممکن است در چندین سناریو از جمله موارد زیر اعتبار خود را از دست بدهد: - اگر برنامه کلاینت از FCM لغو ثبت شود. - اگر برنامه کلاینت به طور خودکار لغو ثبت شود، که این اتفاق میتواند در صورت حذف نصب برنامه توسط کاربر رخ دهد. برای مثال، در iOS، اگر سرویس بازخورد APNها، توکن APNها را نامعتبر گزارش کند. - اگر توکن ثبت نام منقضی شود (برای مثال، گوگل ممکن است تصمیم بگیرد توکنهای ثبت نام را بهروزرسانی کند، یا توکن APN برای دستگاههای iOS منقضی شده باشد). - اگر برنامه کلاینت بهروزرسانی شده باشد اما نسخه جدید برای دریافت پیامها پیکربندی نشده باشد. برای همه این موارد، این توکن ثبت نام را از سرور برنامه حذف کنید و استفاده از آن را برای ارسال پیام متوقف کنید. |
SENDER_ID_MISMATCH (کد خطای HTTP = 403) شناسه فرستنده احراز هویت شده با شناسه فرستنده برای توکن ثبت متفاوت است. | یک توکن ثبت به گروه خاصی از فرستندهها گره خورده است. وقتی یک برنامهی کلاینت برای FCM ثبت نام میکند، باید مشخص کند که کدام فرستندهها مجاز به ارسال پیام هستند. شما باید هنگام ارسال پیام به برنامهی کلاینت از یکی از آن شناسههای فرستنده استفاده کنید. اگر به فرستندهی دیگری تغییر دهید، توکنهای ثبت موجود کار نخواهند کرد. |
QUOTA_EXCEEDED (کد خطای HTTP = ۴۲۹) محدودیت ارسال برای پیام هدف بیش از حد مجاز است. پسوندی از نوع google.rpc.QuotaFailure برگردانده میشود تا مشخص کند کدام سهمیه بیش از حد مجاز بوده است. | این خطا میتواند ناشی از سهمیهی بیش از حد مجاز نرخ پیام، سهمیهی بیش از حد مجاز نرخ پیام دستگاه یا سهمیهی بیش از حد مجاز نرخ پیام موضوع باشد. نرخ ارسال پیام از حد مجاز فراتر رفته است : نرخ ارسال پیامها بسیار بالاست. شما باید نرخ کلی ارسال پیامها را کاهش دهید. برای امتحان مجدد پیامهای رد شده، از روش بازگشت نمایی با حداقل تأخیر اولیه ۱ دقیقه استفاده کنید. نرخ پیام دستگاه از حد مجاز فراتر رفته است : نرخ پیامها به یک دستگاه خاص بسیار بالا است. به محدودیت نرخ پیام برای یک دستگاه واحد مراجعه کنید . تعداد پیامهای ارسالی به این دستگاه را کاهش دهید و برای تلاش مجدد ارسال از روش کاهش نمایی استفاده کنید. نرخ پیامهای موضوعی از حد مجاز فراتر رفت : نرخ پیامها به مشترکین یک موضوع خاص بسیار بالاست. تعداد پیامهای ارسالی برای این موضوع را کاهش دهید و از روش بازگشت نمایی با حداقل تأخیر اولیه ۱ دقیقه برای تلاش مجدد ارسال استفاده کنید. |
UNAVAILABLE (کد خطای HTTP = 503) سرور بیش از حد بارگذاری شده است. | سرور نتوانست درخواست را به موقع پردازش کند. همان درخواست را دوباره امتحان کنید، اما باید: - اگر هدر Retry-After در پاسخ سرور اتصال FCM وجود دارد، آن را رعایت کنید. - در مکانیزم تلاش مجدد خود، بازگشت نمایی (exponential backoff) را پیادهسازی کنید. (مثلاً اگر قبل از اولین تلاش مجدد، یک ثانیه صبر کردهاید، حداقل دو ثانیه قبل از تلاش بعدی صبر کنید، سپس ۴ ثانیه و به همین ترتیب). اگر چندین پیام ارسال میکنید، اعمال لرزش (jittering) را در نظر بگیرید. برای اطلاعات بیشتر، به مدیریت تلاشهای مجدد مراجعه کنید ، یا داشبورد وضعیت FCM را بررسی کنید تا مشخص شود که آیا اختلالات سرویس مداومی وجود دارد که FCM را تحت تأثیر قرار میدهد یا خیر. فرستندگانی که مشکل ایجاد میکنند، در معرض خطر رد شدن در لیست هستند. |
INTERNAL (کد خطای HTTP = 500) یک خطای داخلی ناشناخته رخ داده است. | سرور هنگام تلاش برای پردازش درخواست با خطایی مواجه شد. میتوانید با دنبال کردن پیشنهادات موجود در بخش «مدیریت تلاشهای مجدد» یا بررسی داشبورد وضعیت FCM ، همان درخواست را دوباره امتحان کنید تا مشخص شود که آیا اختلالات سرویس مداومی وجود دارد که FCM را تحت تأثیر قرار میدهد یا خیر. اگر خطا همچنان ادامه داشت، لطفاً با پشتیبانی Firebase تماس بگیرید. |
THIRD_PARTY_AUTH_ERROR (کد خطای HTTP = ۴۰۱) گواهی APN یا کلید تأیید ارسال وب نامعتبر یا مفقود است. | پیامی که به دستگاه iOS یا ثبت نام در وب پوش ارسال شده باشد، قابل ارسال نیست. اعتبارنامههای توسعه و تولید خود را بررسی کنید. |
کدهای خطای SDK مدیریت
جدول زیر کدهای خطای API مربوط به Firebase Admin FCM و توضیحات آنها، از جمله مراحل پیشنهادی برای رفع آنها را فهرست میکند.
کد خطا | مراحل شرح و حل مسئله |
---|---|
messaging/invalid-argument | یک آرگومان نامعتبر به روش FCM ارائه شده است. پیام خطا باید حاوی اطلاعات اضافی باشد. |
messaging/invalid-recipient | گیرنده پیام مورد نظر نامعتبر است. پیام خطا باید حاوی اطلاعات اضافی باشد. |
messaging/invalid-payload | یک شیء payload پیام نامعتبر ارائه شده است. پیام خطا باید حاوی اطلاعات اضافی باشد. |
messaging/invalid-data-payload-key | بار داده پیام شامل یک کلید نامعتبر است. برای کلیدهای محدود شده به مستندات مرجع DataMessagePayload مراجعه کنید. |
messaging/payload-size-limit-exceeded | حجم پیام ارائه شده از محدودیتهای اندازه FCM فراتر میرود. این محدودیت برای اکثر پیامها ۴۰۹۶ بایت است. برای پیامهای ارسالی به تاپیکها، این محدودیت ۲۰۴۸ بایت است. اندازه کل حجم پیام شامل کلیدها و مقادیر میشود. |
messaging/invalid-options | یک شیء گزینههای پیام نامعتبر ارائه شده است. پیام خطا باید حاوی اطلاعات اضافی باشد. |
messaging/invalid-registration-token | توکن ثبت نام نامعتبر ارائه شده است. مطمئن شوید که با توکن ثبت نامی که برنامه کلاینت از ثبت نام در FCM دریافت میکند، مطابقت دارد. آن را کوتاه یا کاراکترهای اضافی به آن اضافه نکنید. |
messaging/registration-token-not-registered | توکن ثبت نام ارائه شده ثبت نشده است. یک توکن ثبت نام معتبر قبلی میتواند به دلایل مختلفی از جمله موارد زیر لغو ثبت شود:
|
messaging/invalid-package-name | این پیام به یک توکن ثبت نام ارسال شده است که نام بسته آن با گزینه restrictedPackageName ارائه شده مطابقت ندارد. |
messaging/message-rate-exceeded | سرعت ارسال پیام به یک مخاطب خاص بسیار بالاست. تعداد پیامهای ارسالی به این دستگاه یا موضوع را کاهش دهید و بلافاصله ارسال به این مخاطب را دوباره امتحان نکنید. |
messaging/device-message-rate-exceeded | سرعت ارسال پیام به یک دستگاه خاص خیلی زیاد است. تعداد پیامهای ارسالی به این دستگاه را کاهش دهید و بلافاصله ارسال به این دستگاه را دوباره امتحان نکنید. |
messaging/topics-message-rate-exceeded | نرخ پیامها به مشترکین یک موضوع خاص بسیار بالاست. تعداد پیامهای ارسالی برای آن موضوع را کاهش دهید و بلافاصله ارسال به آن موضوع را دوباره امتحان نکنید. |
messaging/too-many-topics | یک توکن ثبت نام در حداکثر تعداد تاپیکها مشترک شده است و دیگر نمیتوان در هیچ تاپیک دیگری مشترک شد. |
messaging/invalid-apns-credentials | پیامی که به یک دستگاه اپل اختصاص داده شده بود، به دلیل آپلود نشدن یا منقضی شدن گواهی SSL مربوط به APN های مورد نیاز، قابل ارسال نبود. اعتبار گواهیهای توسعه و تولید خود را بررسی کنید. |
messaging/mismatched-credential | اعتبارنامهای که برای احراز هویت این SDK استفاده میشود، مجوز ارسال پیام به دستگاه مربوط به توکن ثبت نام ارائه شده را ندارد. مطمئن شوید که اعتبارنامه و توکن ثبت نام هر دو متعلق به یک پروژه Firebase هستند. برای مستندات مربوط به نحوه احراز هویت Firebase Admin SDK به بخش «افزودن Firebase به برنامه خود» مراجعه کنید. |
messaging/authentication-error | SDK نتوانست برای سرورهای FCM احراز هویت شود. مطمئن شوید که Firebase Admin SDK با اعتبارنامهای که مجوزهای مناسب برای ارسال پیامهای FCM را دارد، احراز هویت میکنید. برای مشاهده مستندات مربوط به نحوه احراز هویت Firebase Admin SDK به بخش «افزودن Firebase به برنامه خود» مراجعه کنید. |
messaging/server-unavailable | سرور FCM نتوانست درخواست را به موقع پردازش کند. شما باید همان درخواست را دوباره امتحان کنید، اما باید:
|
messaging/internal-error | سرور FCM هنگام تلاش برای پردازش درخواست با خطایی مواجه شد. میتوانید همان درخواست را با رعایت الزامات ذکر شده در ردیف messaging/server-unavailable قبلی دوباره امتحان کنید. اگر خطا همچنان ادامه داشت، لطفاً مشکل را به کانال پشتیبانی گزارش اشکال ما گزارش دهید. |
messaging/unknown-error | خطای ناشناختهای از سمت سرور گزارش شد. برای جزئیات بیشتر، به پاسخ خام سرور در پیام خطا مراجعه کنید. در صورت دریافت این خطا، لطفاً متن کامل پیام خطا را به کانال پشتیبانی گزارش اشکال ما گزارش دهید. |