Мы внедряем систему push-уведомлений для iOS и Android с помощью Центра уведомлений Azure.
Приложение регистрируется каждый раз при запуске приложения. Устройства регистрируются для push-уведомлений с помощью тегов, идентифицируемых appname_userid. Например, Android_1122, где 1122 - уникальный идентификатор пользователя. То же самое в устройстве iPhone будет iPhone_1122. У пользователя может быть несколько устройств, при этом push-сообщение будет доставлено на все устройства с одним и тем же тегом.
Однако есть проблема, с которой мы сталкиваемся, когда повторяющиеся push-уведомления доставляются нескольким пользователям. Каждый раз, когда пользователь удаляет и повторно устанавливает приложение, возвращается новый токен. Таким образом, для этого тега выполняется несколько регистраций, что приводит к дублированию отправки на одно и то же устройство.
Также прошли похожие ссылки, подобные приведенной ниже. Но не совсем понятно, что именно подразумевается под использованием REST API для создания идентификатора регистрации, который возвращает registrationId без фактического создания регистрации. концентраторы уведомлений Azure - удаление приложения
Предоставьте способ избежать дублирования регистраций для одного и того же устройства.
Ниже приведен код, который мы используем для регистрации.
Устройства iOS
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);
}];
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);
}