Ответ 1
У меня была эта проблема в нескольких приложениях, и похоже, что дубликаты появляются, если вы вызываете registerUserNotificationSettings:
более одного раза.
Подробнее в этом ответе: fooobar.com/questions/240241/...
Я получаю одно и то же push-уведомление дважды в iOS9, хотя он отлично работает в iOS8.
Я использовал следующий код для регистрации с помощью push-уведомлений:
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000
if ([application respondsToSelector:@selector(registerUserNotificationSettings:)])
{
// use registerUserNotificationSettings
UIUserNotificationSettings *setting = [UIUserNotificationSettings settingsForTypes:( UIUserNotificationTypeSound | UIUserNotificationTypeAlert|UIUserNotificationTypeBadge) categories:nil];
[[UIApplication sharedApplication] registerUserNotificationSettings:setting];
[[UIApplication sharedApplication] registerForRemoteNotifications];
}
else
{
// use registerForRemoteNotifications
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert |UIRemoteNotificationTypeBadge)];
}
#else
// use registerForRemoteNotifications
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];
#endif
У меня была эта проблема в нескольких приложениях, и похоже, что дубликаты появляются, если вы вызываете registerUserNotificationSettings:
более одного раза.
Подробнее в этом ответе: fooobar.com/questions/240241/...
Это, по-видимому, проблема Apple. Я сталкивался с такой же проблемой много раз в приложениях. https://forums.developer.apple.com/thread/13414
Из iOS 9 каждый раз при удалении и повторной установке приложения снова назначается новый токен устройства, это может быть причиной того, что вы получаете несколько push-уведомлений.
На самом деле, я читаю с одного форума, они предоставляют решение, которое при создании полезной нагрузки добавляет один дополнительный пользовательский случайный случайный случай, чтобы каждая полезная нагрузка имела какое-то уникальное значение. в моем случае в vb.net я использую DateTime.Now.ToString( "MMddyyyyHHmmssfff" ), чтобы добавить уникальную отметку времени с миллисекундами. Я надеюсь, что его работа я реализовал, но не проверял до сих пор.
Я использую это, и это отлично работает в Ios9, пожалуйста, попробуйте. Добавьте это в свой didFinishLaunchingWithOptions
:
if ([[UIApplication sharedApplication] respondsToSelector:@selector(registerUserNotificationSettings:)])
{
[[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge) categories:nil]];
[[UIApplication sharedApplication] registerForRemoteNotifications];
}
else
{
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:
(UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert)];
}
Метод вызова
- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken{
NSString *token = [[deviceToken description] stringByTrimmingCharactersInSet: [NSCharacterSet characterSetWithCharactersInString:@"<>"]];
self.AppDeviceToken=[token stringByReplacingOccurrencesOfString:@" " withString:@""];
}
Сначала проверьте свою базу данных и убедитесь, что вы не получили токен устройства дважды, вполне возможно, что у вас есть повторяющиеся записи одного и того же токена.
Во-вторых, если вы устанавливаете/удаляете приложение в течение 3-4 дней, возможно, вы получите уведомление дважды или даже три раза.
Решение. Пожалуйста, удалите приложение за неделю, если это возможно, чем установить приложение еще раз.
Спасибо.