2013-07-27 38 views
5

Tôi đã phát triển một ứng dụng sử dụng công nghệ GCM và mọi thứ đều ổn.ID đăng ký GCM đã thay đổi

Tôi quan sát thấy ID đăng ký của thiết bị thay đổi sau một khoảng thời gian và điều này đã gây ra sự cố trong ứng dụng của tôi vì ứng dụng của tôi phụ thuộc vào ID Reg.

Vậy làm cách nào tôi có thể nhận ID Reg cố định cho khách hàng?

+0

bản sao có thể có của [Xử lý thay đổi ID đăng ký trong Google Cloud Messaging trên Android] (http://stackoverflow.com/questions/16838654/handling-registration-id-changes-in-google-cloud-messaging-on-android) – trante

+0

@trante rằng câu hỏi SO là tuổi già và lãng phí thời gian. – Micro

Trả lời

13

Tôi đọc 2 lý do trên here khi bạn GCM Id đăng ký có thể thay đổi:

  1. Bạn sẽ cần phải đăng ký lại mọi thiết bị mỗi khi bạn cập nhật ứng dụng của bạn.
  2. Bạn cũng sẽ cần phải đăng ký lại một thiết bị nếu phiên bản của Android nó chạy đã được cập nhật

PS: tài liệu tham khảo Câu trả lời già bên dưới đã bị xóa khỏi trang của Google, do đó có thể không có giá trị nữa

Nếu bạn nhìn thấy điểm thứ hai dưới tiêu đề Enable GCM trên Architectural Overview trang, nó nói:

Lưu ý rằng Google có thể định kỳ làm mới ID đăng ký, vì vậy bạn nên thiết kế ứng dụng Android của bạn với sự hiểu biết rằng mục đích của com.google.android.c2dm.intent.REGISTRATION có thể được gọi là nhiều lần. Ứng dụng Android của bạn cần có khả năng phản hồi tương ứng.

Vì vậy, để xử lý mà bạn nên có một Broadcast Listener mà có thể xử lý com.google.android.c2dm.intent.REGISTRATION ý định, mà Google gửi đến ứng dụng khi nó có để làm mới ID đăng ký. Bộ thu sóng sẽ có phương thức onReceive với Intent. Từ mục đích, bạn có thể nhận được Bundle bằng cách sử dụng mà bạn có thể trích xuất ID đăng ký mới từ Google. Bạn có thể lưu và gửi nó đến máy chủ phần thứ ba để thay thế ID đã đăng ký trước đó của bạn cho người dùng đó.

Bạn cũng có thể thấy this câu trả lời cho câu hỏi In GoogleCloudMessaging API, how to handle the renewal or expiration of registration ID?.

Thảo luận về Should applications call gcm.register() every seven days to ensure valid registration IDs? câu hỏi cũng có thể có một số cách sử dụng.

Hy vọng điều này sẽ giúp bạn hiểu cách xử lý.

+2

Tôi không nghĩ rằng báo giá của bạn hợp lệ nữa. Đoạn văn bản đó không tồn tại bên dưới tiêu đề Bật GCM. – Neil

12

Làm mới 'định kỳ' không bao giờ xảy ra và việc làm mới đăng ký không được bao gồm trong thư viện GCM mới.

Nguyên nhân duy nhất được biết để thay đổi ID đăng ký là lỗi cũ của các ứng dụng sẽ không được đăng ký tự động nếu chúng nhận được tin nhắn trong khi được nâng cấp. Cho đến khi lỗi này là ứng dụng cố định vẫn cần phải gọi đăng ký() sau khi nâng cấp và cho đến nay ID đăng ký có thể thay đổi trong trường hợp này. Việc hủy đăng ký() thường thay đổi ID đăng ký.

Đề xuất/giải pháp thay thế là tạo số nhận dạng ngẫu nhiên của riêng bạn, được lưu dưới dạng tùy chọn được chia sẻ chẳng hạn. Trên mỗi nâng cấp ứng dụng, bạn có thể tải lên số nhận dạng và ID đăng ký tiềm năng mới. Điều này cũng có thể giúp theo dõi và gỡ lỗi các thay đổi nâng cấp và đăng ký ở phía máy chủ.

+0

Ứng dụng của tôi có "AppUpdateReceiver" để nghe bản cập nhật ứng dụng, để khởi chạy "AppUpdateService" đồng bộ hóa đăng ký FCM để khắc phục sự cố. Lỗi này vẫn còn liên quan đến thư viện FCM mới nhất, tôi có thể xóa mã này hay không, bởi vì các dịch vụ bắt đầu như thế này rất khó với Oreo. – Singed

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