Trong ứng dụng của tôi, khi tôi đăng ký thiết bị, nó được lưu trữ dưới dạng dữ liệu liên tục để kiểm tra xem thiết bị đã được đăng ký chưa.Android-GCM: Cách chăm sóc người dùng đã đăng xuất?
Ở phía máy chủ, tôi lưu trữ chúng trong cơ sở dữ liệu cùng với user_id là id duy nhất cho người dùng.
[user_id] [gcm_registration_id]
Bây giờ tôi không thể giải quyết trường hợp này:
Nếu người dùng đăng xuất:
Các registration_id đó là được lưu trữ trong SharedPreferences phải được xóa vì người dùng khác có thể đăng nhập vào lần tiếp theo khi ứng dụng được khởi chạy.
Ngoài ra, tôi phải xóa hàng tương ứng với registration_id đó khỏi cơ sở dữ liệu của tôi vì thiết bị đó (hiện không có người dùng đã đăng nhập) không được nhận thêm bất kỳ thông báo nào nữa.
Vấn đề là cơ sở dữ liệu của tôi được cập nhật bằng cách sử dụng canonical_ids hoặc nói registration_ids mới nhất tôi nhận được khi gọi
https://android.googleapis.com/gcm/send
Vì vậy, có một cơ hội mà tôi không thể tìm thấy registration_id cũ của người dùng đã đăng xuất để xóa, điều này vẫn cho phép gửi thông báo tới người dùng không đăng nhập.
Ngoài ra tôi không thể xóa một hàng DB của tôi phù hợp với user_id vì một người dùng có thể đăng xuất khỏi chỉ 1 thiết bị và có rất ít thiết bị hơn mà anh/cô ấy vẫn đang đăng nhập.
Làm sao tôi biết cho người dùng và thiết bị cụ thể này, id đăng ký được thay đổi?
Tôi có nên lưu trữ tất cả id đăng ký cũ và canonical_ids tương ứng của chúng trong cơ sở dữ liệu của tôi không?
Hey .. bạn đang đi đúng hướng .. bạn không được xóa hoặc hủy đăng ký thiết bị khi người dùng đăng xuất. reg_id là thiết bị cụ thể không phải là user_specific. Trong logic DB nó phải là một giá trị duy nhất cho tất cả người dùng .. giống như quan hệ one_to_many ... –
Việc bạn nên làm là .. bạn nên theo dõi cờ cho người dùng đăng nhập hiện tại .. và gửi nhận dạng người dùng từ máy chủ vào thư. khi bạn sẽ nhận được tin nhắn từ máy chủ, bạn cần phải kiểm tra nhận dạng đó bằng cờ và hiển thị thông báo. –
'reg_id là thiết bị cụ thể không phải là user_specific' Đúng. Nhưng phía máy chủ tôi sẽ có thông báo cho một người dùng (ví dụ: user_id) sử dụng mà tôi sẽ nhận được một registration_id từ db và gửi thông báo. – user1537779