Khi câu hỏi cho biết Cách tìm hiểu khi nào thì registration ID đã trở thành không hợp lệ trong API GoogleCloudMessaging? Tôi đã đọc câu trả lời cho một số câu hỏi về chủ đề tương tự: Do GCM registration id's expire? và Google Coud Mesaging (GCM) and registration_id expiry, how will I know?. Vấn đề với câu hỏi đó là câu trả lời có cho C2DM
hoặc API GCM cũ sử dụng GCMRegistrar thay vì API GoogleCloudMessaging. Hai phương thức trước đã bị khấu hao.Trong API GoogleCloudMessaging, cách xử lý gia hạn hoặc hết hạn ID đăng ký?
tôi sẽ cố gắng phá vỡ sự nhầm lẫn của tôi/câu hỏi từng bước:
1) Bên dưới tiêu đề Enable GCM, trong điểm thứ hai nó nói:
Google may periodically refresh the registration ID, so you should design your Android application with the understanding that the com.google.android.c2dm.intent.REGISTRATION intent may be called multiple times. Your Android application needs to be able to respond accordingly.
The registration ID lasts until the Android application explicitly unregisters itself, or until Google refreshes the registration ID for your Android application. Whenever the application receives a com.google.android.c2dm.intent.REGISTRATION intent with a registration_id extra, it should save the ID for future use, pass it to the 3rd-party server to complete the registration, and keep track of whether the server completed the registration. If the server fails to complete the registration, it should try again or unregister from GCM.
2) Bây giờ, nếu đó là trường hợp thứ vi Tôi nên xử lý ý định trong BroadcastReceiver và gửi lại yêu cầu register() để nhận ID đăng ký mới. Nhưng vấn đề là trên cùng một trang dưới tiêu đề ERROR_MAIN_THREAD, nó nói rằng: GCM methods are blocking. You should not run them in the main thread or in broadcast receivers
.
3) Tôi cũng hiểu rằng có hai kịch bản khác khi thay đổi ID đăng ký (như đã đề cập dưới Chủ đề Advanced thuộc nhóm Keeping the Registration State in Sync): cập nhật Ứng dụng và sao lưu & khôi phục. Tôi đã xử lý chúng khi mở ứng dụng.
4) Trong GCMRegistrar API, bên GCMBaseIntentService, có từng là một phương pháp gọi lại onRegistered(), mà đã gọi là khi thiết bị đã đăng ký. Ở đây tôi đã sử dụng để duy trì ID đăng ký và gửi tới máy chủ của bên thứ ba.
Nhưng, bây giờ Tôi nên xử lý việc cập nhật hoặc gia hạn ID đăng ký, lưu giữ và gửi nó đến máy chủ của bên thứ ba như thế nào?
Có thể là tôi đang bối rối khi đọc tất cả hoặc tôi đang thiếu thứ gì đó. Tôi sẽ rất biết ơn sự giúp đỡ của bạn.
Cập nhật
Ngay cả trên Handling registration ID changes in Google Cloud Messaging on Android chủ đề, không có đề cập về cách xử lý làm mới định kỳ các ID của Google?
Có thể trùng lặp điều này - http://stackoverflow.com/questions/16838654/handling-registration-id-changes-in-google-cloud-messaging-on-android/16839326#16839326 – Eran