2015-08-04 14 views
5

Tôi biết rằng GCM đánh dấu id đăng ký để xóa khi không thể gửi thông báo đẩy tiếp theo.GCM sẽ xóa id đăng ký cũ nếu người dùng cài đặt lại ứng dụng ngay sau khi gỡ cài đặt?

Nhưng trong trường hợp của tôi, tình huống sau xảy ra với người dùng của tôi.

Kịch bản:

1) người sử dụng tôi đã cài đặt ứng dụng và thiết bị của mình được đăng ký với GCM.

2) Cùng một người dùng gỡ cài đặt và cài đặt lại ứng dụng ngay lập tức. Lần thứ hai, một id đăng ký mới được tạo.

3) Hai id đăng ký này được lưu trữ trong cơ sở dữ liệu của tôi.

4) Bây giờ người dùng cụ thể này nhận được hai thông báo đẩy.

Bây giờ tôi có các câu hỏi sau:

Câu hỏi:

  1. Will GCM xóa id đăng ký cũ sau một thời gian?
  2. Vui lòng đề xuất cho tôi cách xử lý tình huống này?
+0

thể trùng lặp của [Làm thẻ GCM cũ sống trên ngay cả sau khi một uninstall?] (Http://stackoverflow.com/questions/17328654/do-old-gcm-tokens-live-on-even-after -an-uninstall) –

Trả lời

5

Từ các tài liệu chính thức:

How uninstalled client app unregistration works

Một ứng dụng khách hàng có thể được tự động đăng ký sau khi được gỡ cài đặt. Tuy nhiên, quá trình này không xảy ra ngay lập tức. Điều gì xảy ra trong trường hợp này là:

  1. Người dùng cuối gỡ cài đặt ứng dụng khách.
  2. Máy chủ ứng dụng sẽ gửi thư đến máy chủ kết nối GCM.
  3. Máy chủ kết nối GCM gửi tin nhắn đến máy khách GCM trên thiết bị.
  4. Ứng dụng khách GCM trên thiết bị nhận được thông báo và phát hiện thấy ứng dụng khách đã được gỡ cài đặt; chi tiết phát hiện phụ thuộc vào nền tảng mà ứng dụng khách đang chạy.
  5. Ứng dụng khách GCM trên thiết bị thông báo kết nối GCM máy chủ mà ứng dụng khách đã được gỡ cài đặt.
  6. Máy chủ kết nối GCM đánh dấu mã thông báo đăng ký để xóa.
  7. Máy chủ ứng dụng gửi thông báo tới GCM.
  8. GCM trả về thông báo lỗi Không được đăng ký cho máy chủ ứng dụng .
  9. Máy chủ ứng dụng phải xóa mã thông báo đăng ký.

Lưu ý có thể mất một thời gian để mã thông báo đăng ký hoàn toàn được xóa khỏi GCM. Do đó, có thể tin nhắn được gửi trong bước 7 ở trên nhận ID tin nhắn hợp lệ làm phản hồi, mặc dù thông báo sẽ không được gửi đến ứng dụng khách. Cuối cùng, mã thông báo đăng ký sẽ bị xóa và máy chủ sẽ gặp lỗi NotRegistered, mà không cần thêm bất kỳ hành động nào từ máy chủ ứng dụng.

Tuy nhiên, nó dường như có thể xảy ra mà bạn vẫn nhận được thông báo cho các ID đăng ký cũ, như người dùng nêu trong câu hỏi khác:

Đối với vấn đề này, có một chức năng gọi là "kinh điển ID":

Canonical IDs

Nếu một lỗi trong ứng dụng client gây nên nhiều đăng ký cho cùng một thiết bị , nó có thể khó hòa hợp trạng thái và ứng dụng khách có thể kết thúc với các thư trùng lặp.

Việc triển khai ID chính tắc có thể giúp bạn khôi phục dễ dàng hơn từ các tình huống này. ID đăng ký kinh điển là mã thông báo đăng ký của lần đăng ký cuối cùng do ứng dụng khách yêu cầu. Đây là ID mà máy chủ sẽ sử dụng khi gửi tin nhắn đến thiết bị.

Nếu bạn cố gắng gửi thư bằng mã thông báo đăng ký cũ, GCM sẽ xử lý yêu cầu như thường lệ, nhưng sẽ bao gồm ID chuẩn trong trường registration_id của phản hồi. Đảm bảo thay thế mã thông báo đăng ký được lưu trữ trong máy chủ của bạn bằng ID chính tắc này, dưới dạng cuối cùng mã thông báo đăng ký cũ sẽ ngừng hoạt động.

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