Chúng tôi đang triển khai Hệ thống thông báo đẩy cho iOS & Android bằng cách sử dụng Trung tâm thông báo Azure.Thông báo đẩy trùng lặp bằng cách sử dụng thông báo đẩy của Azure
Đăng ký ứng dụng mỗi lần trong khi khởi chạy ứng dụng. Các thiết bị được đăng ký để thông báo đẩy với các thẻ được xác định bởi appname_userid. Ví dụ: Android_1122 trong đó 1122 là id người dùng duy nhất. Tương tự trong một thiết bị iPhone sẽ là iPhone_1122. Người dùng có thể có nhiều thiết bị, trong đó thông báo đẩy sẽ được phân phối tới tất cả các thiết bị có cùng một thẻ.
Tuy nhiên, có một vấn đề mà chúng tôi đang gặp phải khi gửi thông báo đẩy trùng lặp cho một vài người dùng. Mỗi khi người dùng gỡ cài đặt & cài đặt lại ứng dụng, mã thông báo mới sẽ được trả lại. Vì vậy, đối với thẻ đã cho đó, nhiều đăng ký được thực hiện dẫn đến các lần đẩy trùng lặp được phân phối tới cùng một thiết bị.
Cũng đã trải qua các liên kết tương tự như bên dưới. Nhưng, không hoàn toàn rõ ràng về những gì chính xác có nghĩa là bằng cách sử dụng API tạo đăng ký REST API trả về một RegistrationId mà không thực sự tạo một đăng ký. azure notification hubs - app uninstall
Vui lòng cung cấp một số cách để tránh đăng ký trùng lặp cho cùng một thiết bị.
Dưới đây là mã chúng tôi đang sử dụng để đăng ký.
iOS Devices
NSString *mobileServicesURL = @"Endpoint=sb://mobilepushnotificationhub.servicebus.windows.net/;SharedAccessKeyName=DefaultListenSharedAccessSignature;SharedAccessKey=XXXXXXXXXXXXXXXXX=";
SBNotificationHub *hub = [[SBNotificationHub alloc] initWithConnectionString:mobileServicesURL notificationHubPath:@"notificationhubname"];
[hub registerNativeWithDeviceToken:token tags:[NSSet setWithObjects:[NSString stringWithFormat:@"iphoneapp_%@", [self getUserID]], nil] completion:^(NSError* error) {
completion(error);
}];
Thiết bị Android
private void gcmPush() {
NotificationsManager.handleNotifications(this, SENDER_ID, MyHandler.class);
gcm = GoogleCloudMessaging.getInstance(this);
String connectionString = "Endpoint=sb://mobilepushnotificationhub.servicebus.windows.net/;SharedAccessKeyName=DefaultListenSharedAccessSignature;SharedAccessKey=XXXXXXXXXXXXXXXXXXXXXXXXXXXX=";
hub = new NotificationHub("notificationhubname", connectionString, this);
registerWithNotificationHubs();
// completed Code
}
// Added Method
@SuppressWarnings("unchecked")
private void registerWithNotificationHubs() {
new AsyncTask() {
@Override
protected Object doInBackground(Object... params) {
try {
String regid = gcm.register(SENDER_ID);
Log.e("regid RECEIVED ", regid);
hub.register(regid, "androidapp_" + WhatsOnIndiaConstant.USERId);
WhatsOnIndiaConstant.notificationHub = hub;
WhatsOnIndiaConstant.gcmHub = gcm;
} catch (Exception ee) {
Log.e("Exception ", ee.getMessage().toString());
return ee;
}
return null;
}
}.execute(null, null, null);
}
Tuyệt vời - bạn đã thực hiện một ngày của tôi. Không biết rằng GCM sử dụng nhiều thiết bị hoạt độngTokens! Bây giờ dịch vụ đẩy của tôi hoạt động! – Freddy