Mã lỗi FCM

Mã lỗi REST cho API HTTP phiên bản 1

Phản hồi lỗi HTTP cho API HTTP phiên bản 1 chứa mã lỗi, thông báo lỗi và trạng thái lỗi. Phản hồi này cũng có thể chứa một mảng details với thông tin chi tiết hơn về lỗi.

Sau đây là 2 phản hồi lỗi mẫu:

Ví dụ 1: Phản hồi lỗi từ một yêu cầu API HTTP phiên bản 1 có giá trị không hợp lệ trong thông báo dữ liệu

{
  "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"
          }
        ]
      }
    ]
  }
}

Ví dụ 2: Phản hồi lỗi từ một yêu cầu API HTTP phiên bản 1 có mã thông báo đăng ký không hợp lệ

{
  "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"
      }
    ]
   }
}

Xin lưu ý rằng cả hai thông báo đều có cùng mã và trạng thái, nhưng mảng chi tiết chứa các giá trị thuộc nhiều loại khác nhau. Ví dụ đầu tiên có loại type.googleapis.com/google.rpc.BadRequest cho biết lỗi trong các giá trị yêu cầu. Ví dụ thứ hai có loại type.googleapis.com/google.firebase.fcm.v1.FcmError có lỗi cụ thể của FCM. Đối với nhiều lỗi, mảng chi tiết chứa thông tin bạn cần để gỡ lỗi và tìm giải pháp.

Bảng sau đây liệt kê các mã lỗi của FCM phiên bản 1 API REST và nội dung mô tả tương ứng.

Mã lỗi Nội dung mô tả và các bước giải quyết
UNSPECIFIED_ERROR Không có thêm thông tin về lỗi này. Không có.
INVALID_ARGUMENT (Mã lỗi HTTP = 400) Các tham số yêu cầu không hợp lệ. Một phần mở rộng thuộc loại google.rpc.BadRequest được trả về để chỉ định trường không hợp lệ. Các nguyên nhân có thể bao gồm đăng ký không hợp lệ, tên gói không hợp lệ, thông báo quá lớn, khoá dữ liệu không hợp lệ, thời gian tồn tại không hợp lệ hoặc các tham số không hợp lệ khác.
Đăng ký không hợp lệ: Kiểm tra định dạng của mã thông báo đăng ký mà bạn chuyển đến máy chủ. Đảm bảo mã này khớp với mã thông báo đăng ký mà ứng dụng khách nhận được khi đăng ký với FCM. Không được cắt bớt mã thông báo hoặc thêm ký tự bổ sung.
Tên gói không hợp lệ: Đảm bảo thông báo được gửi đến một mã thông báo đăng ký có tên gói khớp với giá trị được chuyển trong yêu cầu.
Thông báo quá lớn: Kiểm tra để đảm bảo tổng kích thước của dữ liệu tải trọng có trong một thông báo không vượt quá giới hạn của FCM: 4096 byte đối với hầu hết các thông báo hoặc 2048 byte trong trường hợp thông báo gửi đến các chủ đề. Giới hạn này bao gồm cả khoá và giá trị.
Khoá dữ liệu không hợp lệ: Kiểm tra để đảm bảo dữ liệu tải trọng không chứa khoá (chẳng hạn như from, gcm hoặc bất kỳ giá trị nào có tiền tố google) được FCM sử dụng nội bộ. Xin lưu ý rằng một số từ (chẳng hạn như collapse_key) cũng được FCM sử dụng nhưng được phép có trong tải trọng. Trong trường hợp đó, giá trị tải trọng sẽ bị ghi đè bởi giá trị FCM.
Thời gian tồn tại không hợp lệ: Kiểm tra để đảm bảo giá trị được sử dụng trong thời gian tồn tại là một số nguyên biểu thị khoảng thời gian tính bằng giây từ 0 đến 2.419.200 (4 tuần).
Tham số không hợp lệ: Kiểm tra để đảm bảo các tham số được cung cấp có đúng tên và loại.
UNREGISTERED (Mã lỗi HTTP = 404) Phiên bản ứng dụng đã bị huỷ đăng ký khỏi FCM. Điều này thường có nghĩa là mã thông báo được sử dụng không còn hợp lệ và bạn phải sử dụng mã thông báo mới. Lỗi này có thể là do thiếu mã thông báo đăng ký hoặc mã thông báo chưa đăng ký.
Thiếu thông tin đăng ký: Nếu mục tiêu của thông báo là giá trị token, hãy kiểm tra để đảm bảo yêu cầu chứa mã thông báo đăng ký.
Chưa đăng ký: Mã thông báo đăng ký hiện có có thể ngừng hợp lệ trong một số trường hợp, bao gồm:
– Nếu ứng dụng khách huỷ đăng ký với FCM.
– Nếu ứng dụng khách tự động bị huỷ đăng ký. Điều này có thể xảy ra nếu người dùng gỡ cài đặt ứng dụng. Ví dụ: trên iOS, nếu Dịch vụ phản hồi APNs báo cáo mã thông báo APNs là không hợp lệ.
– Nếu mã thông báo đăng ký hết hạn (ví dụ: Google có thể quyết định làm mới mã thông báo đăng ký hoặc mã thông báo APNs đã hết hạn đối với thiết bị iOS).
– Nếu ứng dụng khách được cập nhật nhưng phiên bản mới không được định cấu hình để nhận thông báo.
Đối với tất cả các trường hợp này, hãy xoá mã thông báo đăng ký này khỏi máy chủ ứng dụng và ngừng sử dụng mã này để gửi thông báo.
SENDER_ID_MISMATCH (Mã lỗi HTTP = 403) Mã người gửi đã xác thực khác với mã người gửi cho mã thông báo đăng ký. Mã thông báo đăng ký được liên kết với một nhóm người gửi nhất định. Khi đăng ký FCM, ứng dụng khách phải chỉ định những người gửi được phép gửi thông báo. Bạn nên sử dụng một trong những mã người gửi đó khi gửi thông báo đến ứng dụng khách. Nếu bạn chuyển sang một người gửi khác, thì các mã thông báo đăng ký hiện có sẽ không hoạt động.
QUOTA_EXCEEDED (Mã lỗi HTTP = 429) Đã vượt quá hạn mức gửi cho mục tiêu thông báo. Một phần mở rộng thuộc loại google.rpc.QuotaFailure được trả về để chỉ định hạn mức đã vượt quá. Lỗi này có thể là do vượt quá hạn mức tốc độ thông báo, vượt quá hạn mức tốc độ thông báo trên thiết bị hoặc vượt quá hạn mức tốc độ thông báo theo chủ đề.
Vượt quá tần suất gửi tin nhắn: Tần suất gửi tin nhắn quá cao. Bạn phải giảm tốc độ gửi thông báo tổng thể. Sử dụng thuật toán đợi luỹ tiến với độ trễ ban đầu tối thiểu là 1 phút để thử lại các thông báo bị từ chối.
Vượt quá tốc độ thông báo trên thiết bị: Tốc độ thông báo gửi đến một thiết bị cụ thể quá cao. Xem giới hạn tốc độ thông báo gửi đến một thiết bị. Giảm số lượng thông báo gửi đến thiết bị này và sử dụng thuật toán đợi luỹ tiến để thử gửi lại.
Vượt quá tốc độ thông báo theo chủ đề: Tốc độ thông báo gửi đến người đăng ký một chủ đề cụ thể quá cao. Giảm số lượng thông báo gửi cho chủ đề này và sử dụng thuật toán đợi luỹ tiến với độ trễ ban đầu tối thiểu là 1 phút để thử gửi lại.
UNAVAILABLE (Mã lỗi HTTP = 503) Máy chủ bị quá tải. Máy chủ không thể xử lý yêu cầu kịp thời. Hãy thử lại cùng một yêu cầu, nhưng bạn phải:
- Tuân thủ tiêu đề Thử lại sau nếu tiêu đề này có trong phản hồi từ Máy chủ kết nối FCM.
– Triển khai thuật toán đợi luỹ tiến trong cơ chế thử lại. (ví dụ: nếu bạn đợi 1 giây trước lần thử lại đầu tiên, hãy đợi ít nhất 2 giây trước lần thử lại tiếp theo, sau đó là 4 giây, v.v.). Nếu bạn gửi nhiều thông báo, hãy cân nhắc việc áp dụng phương pháp làm trễ. Để biết thêm thông tin, hãy xem Xử lý các lần thử lại, hoặc kiểm tra trang tổng quan về trạng thái FCM để xác định xem có dịch vụ nào đang bị gián đoạn ảnh hưởng đến FCM hay không. Những người gửi gây ra vấn đề có nguy cơ bị đưa vào danh sách từ chối.
INTERNAL (Mã lỗi HTTP = 500) Đã xảy ra lỗi nội bộ không xác định. Máy chủ gặp lỗi khi cố gắng xử lý yêu cầu. Bạn có thể thử lại cùng một yêu cầu theo các đề xuất trong bài viết Xử lý các lần thử lại hoặc kiểm tra trang tổng quan về trạng thái FCM. để xác định xem có dịch vụ nào đang bị gián đoạn ảnh hưởng đến FCM hay không. Nếu lỗi vẫn tiếp diễn, vui lòng liên hệ với nhóm hỗ trợ Firebase.
THIRD_PARTY_AUTH_ERROR (Mã lỗi HTTP = 401) Chứng chỉ APNs hoặc khoá xác thực thông báo đẩy trên web không hợp lệ hoặc bị thiếu. Không gửi được thông báo nhắm đến thiết bị iOS hoặc thông báo đẩy trên web. Kiểm tra tính hợp lệ của thông tin xác thực phát triển và sản xuất.

Mã lỗi SDK quản trị

Bảng sau đây liệt kê các mã lỗi của Firebase Admin FCM API và nội dung mô tả tương ứng, bao gồm cả các bước giải quyết được đề xuất.

Mã lỗi Nội dung mô tả và các bước giải quyết
messaging/invalid-argument Một đối số không hợp lệ đã được cung cấp cho phương thức FCM. Thông báo lỗi phải chứa thông tin bổ sung.
messaging/invalid-recipient Người nhận thông báo dự kiến không hợp lệ. Thông báo lỗi phải chứa thông tin bổ sung.
messaging/invalid-payload Một đối tượng tải trọng thông báo không hợp lệ đã được cung cấp. Thông báo lỗi phải chứa thông tin bổ sung.
messaging/invalid-data-payload-key Tải trọng thông báo dữ liệu chứa một khoá không hợp lệ. Hãy xem tài liệu tham khảo về DataMessagePayload để biết các khoá bị hạn chế.
messaging/payload-size-limit-exceeded Tải trọng thông báo được cung cấp vượt quá giới hạn kích thước FCM. Giới hạn là 4096 byte đối với hầu hết các thông báo. Đối với thông báo gửi đến các chủ đề, giới hạn là 2048 byte. Tổng kích thước tải trọng bao gồm cả khoá và giá trị.
messaging/invalid-options Một đối tượng tuỳ chọn thông báo không hợp lệ đã được cung cấp. Thông báo lỗi phải chứa thông tin bổ sung.
messaging/invalid-registration-token Mã thông báo đăng ký được cung cấp không hợp lệ. Đảm bảo mã này khớp với mã thông báo đăng ký mà ứng dụng khách nhận được khi đăng ký với FCM. Không được cắt bớt hoặc thêm ký tự bổ sung vào mã này.
messaging/registration-token-not-registered Mã thông báo đăng ký được cung cấp chưa được đăng ký. Mã thông báo đăng ký hợp lệ trước đó có thể bị huỷ đăng ký vì nhiều lý do, bao gồm:
  • Ứng dụng khách tự huỷ đăng ký khỏi FCM.
  • Ứng dụng khách tự động bị huỷ đăng ký. Điều này có thể xảy ra nếu người dùng gỡ cài đặt ứng dụng hoặc trên các nền tảng của Apple, nếu Dịch vụ phản hồi APNs báo cáo mã thông báo APNs là không hợp lệ.
  • Mã thông báo đăng ký đã hết hạn. Ví dụ: Google có thể quyết định làm mới mã thông báo đăng ký hoặc mã thông báo APNs có thể đã hết hạn đối với các thiết bị của Apple.
  • Ứng dụng khách được cập nhật nhưng phiên bản mới không được định cấu hình để nhận thông báo.
Đối với tất cả các trường hợp này, hãy xoá mã thông báo đăng ký này và ngừng sử dụng mã này để gửi thông báo.
messaging/invalid-package-name Thông báo được gửi đến một mã thông báo đăng ký có tên gói không khớp với tuỳ chọn restrictedPackageName được cung cấp.
messaging/message-rate-exceeded Tốc độ thông báo gửi đến một mục tiêu cụ thể quá cao. Giảm số lượng thông báo gửi đến thiết bị hoặc chủ đề này và không thử gửi lại ngay đến mục tiêu này.
messaging/device-message-rate-exceeded Tốc độ thông báo gửi đến một thiết bị cụ thể quá cao. Giảm số lượng thông báo gửi đến thiết bị này và không thử gửi lại ngay đến thiết bị này.
messaging/topics-message-rate-exceeded Tốc độ thông báo gửi đến người đăng ký một chủ đề cụ thể quá cao. Giảm số lượng thông báo gửi cho chủ đề đó và không thử gửi lại ngay đến chủ đề đó.
messaging/too-many-topics Một mã thông báo đăng ký đã đăng ký số lượng chủ đề tối đa và không thể đăng ký thêm.
messaging/invalid-apns-credentials Không gửi được thông báo nhắm đến thiết bị Apple vì chứng chỉ SSL APNs bắt buộc chưa được tải lên hoặc đã hết hạn. Kiểm tra tính hợp lệ của chứng chỉ phát triển và sản xuất.
messaging/mismatched-credential Thông tin xác thực dùng để xác thực SDK này không có quyền gửi thông báo đến thiết bị tương ứng với mã thông báo đăng ký được cung cấp. Đảm bảo cả thông tin xác thực và mã thông báo đăng ký đều thuộc cùng một dự án Firebase. Hãy xem Thêm Firebase vào ứng dụng để biết tài liệu về cách xác thực Firebase Admin SDKs.
messaging/authentication-error SDK không thể xác thực với các máy chủ FCM. Đảm bảo bạn xác thực Firebase Admin SDK bằng thông tin xác thực có các quyền thích hợp để gửi FCM tin nhắn. Hãy xem Thêm Firebase vào ứng dụng để biết tài liệu về cách xác thực Firebase Admin SDKs.
messaging/server-unavailable Máy chủ FCM không thể xử lý yêu cầu kịp thời. Bạn nên thử lại cùng một yêu cầu, nhưng bạn phải:
  • Tuân thủ tiêu đề Retry-After nếu tiêu đề này có trong phản hồi từ FCM Connection Server.
  • Triển khai thuật toán đợi luỹ tiến trong cơ chế thử lại. Ví dụ: nếu bạn đợi 1 giây trước lần thử lại đầu tiên, hãy đợi ít nhất 2 giây trước lần thử lại tiếp theo, sau đó là 4 giây và tiếp tục tăng khoảng thời gian tính bằng giây. Nếu bạn gửi nhiều thông báo, hãy trì hoãn từng thông báo một cách độc lập thêm một khoảng thời gian ngẫu nhiên để tránh gửi yêu cầu mới cho tất cả thông báo cùng một lúc.
Những người gửi gây ra vấn đề có nguy cơ bị đưa vào danh sách chặn.
messaging/internal-error Máy chủ FCM gặp lỗi khi cố gắng xử lý yêu cầu. Bạn có thể thử lại cùng một yêu cầu theo các yêu cầu được liệt kê trong hàng messaging/server-unavailable trước đó. Nếu lỗi vẫn tiếp diễn, vui lòng báo cáo vấn đề này cho kênh hỗ trợ Báo cáo lỗi của chúng tôi.
messaging/unknown-error Đã trả về lỗi máy chủ không xác định. Hãy xem phản hồi thô của máy chủ trong thông báo lỗi để biết thêm chi tiết. Nếu bạn nhận được lỗi này, vui lòng báo cáo toàn bộ thông báo lỗi cho kênh hỗ trợ Báo cáo lỗi của chúng tôi.