9

Tôi tạo notification_key s như được mô tả here.Thông báo của người dùng - Cách khôi phục thông báo bị mất_ID từ GCM?

Giả sử rằng do một số lỗi, tôi không lưu trữ được, vì vậy tôi cố gắng đăng ký lại.
Lần này tôi nhận được lỗi 400 với thông báo "notification_key already exists".
Điều này có vẻ lạ, đặc biệt so với registration of a device to GCM, nơi bạn có thể đăng ký bao nhiêu lần tùy ý và luôn nhận được cùng một ID đăng ký với trạng thái 200.
Bây giờ tôi không thể đăng ký lại và tôi cũng không thể hủy đăng ký, bởi vì tôi không có số notification_id.

Có cách nào để tạo notification_key trước đây từ GCM không?
Hoặc là cách duy nhất để đăng ký lại với notification_key_name khác?

Trả lời

4

Dựa trên tài liệu, không có cách nào để nhận được từ GCM notification_key của số notification_key_name hiện có. Nếu bạn nghĩ về điều đó, có nghĩa là cố gắng tạo một notification_key mới cho số notification_key_name hiện có sẽ cung cấp cho bạn một lỗi, vì nếu không phải vậy, bạn có thể vô tình ghi đè ID đăng ký của notification_key hiện tại nếu bạn xảy ra để cung cấp một số hiện tại notification_key_name do nhầm lẫn.

Bạn đang so sánh điều này để đăng ký thiết bị với GCM nhiều lần, mỗi lần nhận cùng một ID đăng ký nhưng không phải là tình huống tương tự. Khi bạn đăng ký thiết bị với GCM, GCM có cách xác định thiết bị và biết rằng thiết bị đã được đăng ký và trả lại cùng một ID đăng ký. Với thông báo người dùng, nó chỉ có notification_key_name mà bạn đã cung cấp và không có gì ngăn bạn sử dụng cùng một số notification_key_name cho nhiều người dùng. Đó là, có điều gì đó ngăn cản bạn - lỗi bạn gặp khi cố gắng tạo một notification_key với một số đã sử dụng trước đây notification_key_name.

Cách dễ dàng để khắc phục sự cố của bạn là xử lý notification_key_name làm số nhận dạng duy nhất được tạo bởi máy chủ của bạn. Nếu bạn không có notification_key cho một người dùng nhất định (vì đó là người dùng mới hoặc do bạn không lưu trữ được notification_key trước đó bạn đã nhận được từ Google), bạn tạo notification_key_name duy nhất mới và sử dụng nó để tạo notification_key mới. Bạn không cần phải quan tâm đến số notification_key cũ mà bạn không thể lưu trữ.

Cuối cùng, bạn lưu trữ cả số notification_keynotification_key_name trong bảng chứa id người dùng.

+3

Nó làm cho tinh thần để nhận được một lỗi, nhưng nó không có ý nghĩa mà bạn thì không thể lấy lại một họ đã biết về ... Nếu họ có thể xác định một bản sao, họ có thể cung cấp một giao diện để trả lại ...Như bạn đề xuất tạo 'notification_key_name' do máy chủ của tôi tạo ra, điều đó có nghĩa là' notification_key_name' được tạo sẽ không phải là một-một với tên người dùng của ứng dụng, điều này làm cho mọi thứ trở nên phức tạp một cách không cần thiết nếu tôi chỉ có thể truy xuất 'notification_key' .. – xbakesx

+0

@xbakesx Notification_key_name của bạn sẽ vẫn là một đối một với tên người dùng của ứng dụng. Nếu bạn tạo một notification_key_name để có được một notification_key từ Google, và không tồn tại notification_key, bạn sẽ không tồn tại notfiication_key_name. Sau đó, bạn sẽ tạo một notification_key_name mới (cho một tên người dùng đã cho) để lấy một notification_key mới và đó sẽ là notification_key_name duy nhất được liên kết với tên người dùng trong DB của bạn. – Eran

-1

Nếu bạn tình cờ biết tất cả các id đăng ký đã đăng ký trong nhóm thiết bị. Sau đó xóa tất cả và nhóm thiết bị cũng sẽ bị xóa. Sau đó, bạn có thể tạo nhóm thiết bị với thông báo trước được sử dụng_key_name.

+1

Chắc chắn bạn cần notification_key để xóa id đăng ký? https://firebase.google.com/docs/cloud-messaging/notifications#managing_device_groups – ColdLogic

7

tôi không thể tìm thấy bất kỳ tài liệu về nó nhưng nó bây giờ có thể phục hồi một notification_key cho một nhóm thiết bị bằng cách thực hiện một yêu cầu GET-https://android.googleapis.com/gcm/notification?notification_key_name=my_notification_key_name với các tiêu đề họ yêu cầu: Authorization: key=my_key, Content-Type: application/jsonproject_id: my_id.

Bạn sẽ nhận được một phản ứng như
{ "notification_key": "lost_key" }

+2

Điều này phù hợp với tôi, cảm ơn! Tôi không thể tin được tài liệu xấu như thế nào ... – knezmilos

+0

Việc áp dụng giải pháp này, hãy nhận thức được rằng 'Nội dung Kiểu: ứng dụng/json' thực sự là bắt buộc không có lý do rõ ràng, nó không có ý nghĩa trong ngữ cảnh đó. Mặt khác, nó hoạt động. –

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