2013-12-17 16 views
12

Tôi có một ứng dụng máy chủ gửi thông báo đẩy GCM. Mỗi lần gửi 1000 người nhận trả lại một thông báo cho tôi biết trạng thái của từng ID đăng ký. Một số sẽ có mã lỗi. Có tài liệu nào đó từ Google cho tôi biết cách tôi dự kiến ​​xử lý các mã này và tất cả các mã lỗi có thể là gì? Google foo của tôi không bật lên bất cứ thứ gì.Mã lỗi GCM

Trả lời

36

Bạn không đủ cứng. Tất cả các mã được giải thích here dưới Interpreting an error response.

Tôi cố gắng để sao chép và dán nó để cho nó không phải là một liên kết chỉ trả lời, nhưng định dạng là một chút off:

Giải thích một phản ứng lỗi

Sau đây là các các đề xuất để xử lý các loại lỗi khác nhau có thể xảy ra khi cố gắng gửi thư đến một thiết bị:

ID đăng ký bị thiếu Kiểm tra xem yêu cầu có chứa ID đăng ký không (trong tham số registration_id trong một tin nhắn văn bản thuần túy hoặc trong trường registration_ids bằng JSON). Xảy ra khi mã lỗi là MissingRegistration.

ID đăng ký không hợp lệ Kiểm tra định dạng ID đăng ký mà bạn chuyển đến máy chủ. Đảm bảo nó khớp với ID đăng ký mà điện thoại nhận được trong mục đích mục đích com.google.android.c2dm.intent.REGISTRATION và bạn đang không cắt xén hoặc thêm ký tự bổ sung. Xảy ra khi mã lỗi là InvalidRegistration.

Tên người gửi không khớp ID đăng ký được gắn với một nhóm người gửi nhất định. Khi ứng dụng đăng ký sử dụng GCM, ứng dụng phải chỉ định người gửi nào được phép gửi thư. Đảm bảo bạn đang sử dụng một trong số đó khi cố gắng gửi tin nhắn đến thiết bị. Nếu bạn chuyển sang một người gửi khác, các ID đăng ký hiện tại sẽ không hoạt động. Xảy ra khi mã lỗi là MismatchSenderId.

Khách Device Một ID đăng ký hiện tại có thể hết hiệu lực trong một số kịch bản, bao gồm:

  • Nếu ứng dụng bằng tay sẽ hủy đăng ký bằng cách phát hành một com.google.android.c2dm.intent. Ý định của UNREGISTER.
  • Nếu ứng dụng được tự động hủy đăng ký, điều này có thể xảy ra (nhưng không được bảo đảm) nếu người dùng gỡ cài đặt ứng dụng.
  • Nếu ID đăng ký hết hạn. Google có thể quyết định làm mới ID đăng ký.
  • Nếu ứng dụng được cập nhật nhưng phiên bản mới không có bộ thu phát sóng được định cấu hình để nhận được ý định com.google.android.c2dm.intent.RECEIVE.

Đối với tất cả các trường hợp này, bạn nên xóa ID đăng ký này khỏi máy chủ của bên thứ ba và ngừng sử dụng nó để gửi tin nhắn. Xảy ra khi mã lỗi là NotRegistered.

Thông báo quá lớn Tổng kích thước của dữ liệu tải trọng được bao gồm trong thư không thể vượt quá 4096 byte. Lưu ý rằng điều này bao gồm cả kích thước của các phím cũng như các giá trị. Xảy ra khi mã lỗi là MessageTooBig.

Dữ liệu không hợp lệ chính Các dữ liệu tải trọng chứa một chìa khóa (chẳng hạn như từ hoặc bất kỳ giá trị bắt đầu bằng google.) Được sử dụng trong nội bộ của GCM trong Ý định com.google.android.c2dm.intent.RECEIVE và không thể được sử dụng. Lưu ý rằng một số từ (chẳng hạn như collapse_key) cũng được GCM sử dụng nhưng được cho phép là trong tải trọng, trong trường hợp đó giá trị tải trọng sẽ là ghi đè bằng giá trị GCM. Xảy ra khi mã lỗi là InvalidDataKey.

Thời gian không hợp lệ để sống Giá trị cho trường Thời gian phát trực tiếp phải là số nguyên đại diện cho thời lượng tính bằng giây giữa 0 và 2,419,200 (4 tuần). Xảy ra khi mã lỗi là InvalidTtl.

Lỗi xác thực Tài khoản người gửi mà bạn đang cố sử dụng để gửi thư không thể được xác thực. Nguyên nhân có thể là:

  • Thiếu tiêu đề cấp phép hoặc có cú pháp không hợp lệ.
  • Số dự án không hợp lệ được gửi dưới dạng khóa.
  • Khóa hợp lệ nhưng đã tắt dịch vụ GCM.
  • Yêu cầu bắt nguồn từ máy chủ không có trong danh sách trắng trong IP máy chủ khóa.

Kiểm tra mã thông báo bạn đang gửi bên trong tiêu đề Cấp quyền là khóa API chính xác được liên kết với dự án của bạn. Bạn có thể kiểm tra tính hợp lệ của khóa API của bạn bằng cách chạy lệnh sau:

API_KEY = YOUR_API_KEY

--header curl "Authorization: key = $ API_KEY" --header Content-Type: "application/json "https://android.googleapis.com/gcm/send -d" {\ "registration_ids \": [\ "ABC \"]} "

Nếu bạn nhận được mã trạng thái HTTP 401, khóa API của bạn không hợp lệ. Nếu không, bạn sẽ thấy nội dung như sau:

{"multicast_id": 6782339717028231855, "thành công": 0, "lỗi": 1, "canonical_ids": 0, "results": [{"error": "InvalidRegistration" }]}

Nếu bạn muốn xác nhận tính hợp lệ của ID đăng ký, bạn có thể làm như vậy bằng cách thay thế "ABC" bằng ID đăng ký. Xảy ra khi mã trạng thái HTTP là 401.

Timeout Máy chủ không thể xử lý yêu cầu kịp thời. Bạn nên thử lại yêu cầu tương tự, nhưng bạn PHẢI tuân thủ các yêu cầu sau:

Tiêu đề tiêu đề Thử lại sau khi được đưa vào phản hồi từ máy chủ GCM. Thực hiện quay số theo hàm mũ trong cơ chế thử lại của bạn. Điều này có nghĩa là độ trễ tăng theo cấp số nhân sau mỗi lần thử lại không thành công (ví dụ: nếu bạn đợi một giây trước lần thử đầu tiên, đợi ít nhất hai giây trước lần tiếp theo, sau đó 4 giây và tiếp tục). Nếu bạn đang gửi nhiều thư, hãy trì hoãn từng thư một cách độc lập theo số số ngẫu nhiên bổ sung để tránh đưa ra yêu cầu mới cho tất cả thư cùng một lúc. Người gửi gây ra sự cố có nguy cơ bị liệt vào danh sách đen. Xảy ra khi mã trạng thái HTTP nằm trong khoảng từ 501 đến 599 hoặc khi trường lỗi của đối tượng JSON trong mảng kết quả là Không khả dụng.

Lỗi máy chủ nội bộ Máy chủ gặp lỗi khi cố gắng xử lý yêu cầu. Bạn có thể thử lại yêu cầu tương tự (tuân theo các yêu cầu được liệt kê trong phần Thời gian chờ), nhưng nếu lỗi vẫn còn, hãy báo cáo sự cố trong nhóm android-gcm. Xảy ra khi mã trạng thái HTTP là 500 hoặc khi trường lỗi của đối tượng JSON trong mảng kết quả là InternalServerError.

Tên gói không hợp lệ Thư được gửi tới ID đăng ký có tên gói không khớp với giá trị được chuyển trong yêu cầu. Xảy ra khi mã lỗi là InvalidPackageName.

EDIT (2015/06/06):

Một bảng mã phản ứng lỗi mới đã được đăng here.

Các phản ứng lỗi mới:

Device nhắn Rate Vượt Tỷ lệ các tin nhắn đến một thiết bị cụ thể là quá cao. Giảm số lượng tin nhắn được gửi đến thiết bị này và không thử gửi lại ngay thiết bị này ngay lập tức.

Chủ đề tỷ lệ tin nhắn vượt quá Tỷ lệ tin nhắn cho người đăng ký một chủ đề cụ thể quá cao. Giảm số lượng tin nhắn được gửi cho chủ đề này và không ngay lập tức thử gửi lại.

+0

Cảm ơn, Eran! Tôi xấu hổ khi nói rằng tôi đã nhìn thẳng vào phần đó của trang nhiều lần. Tôi nghĩ định dạng của nó đã ném tôi đi. –

+2

@Eran Liên kết trong câu trả lời không có nội dung nữa: http://developer.android.com/google/gcm/http.html#error_codes Tuần trước tôi có thể xem các nội dung đó. Tôi không chắc điều gì đã xảy ra vào cuối tuần. –

+0

@TamilVendhanKanagaraju Vâng, trong trường hợp đó, nó là một điều tốt nội dung là ở đây. – Eran

Các vấn đề liên quan