Je reçois deux fois la même notification Push dans iOS9, bien que cela fonctionne correctement sous iOS8.
J'ai utilisé le code suivant pour m'inscrire avec les notifications 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
J'ai eu ce problème dans plusieurs applications, et on dirait que les doublons apparaissent si vous appelez registerUserNotificationSettings:
plus d'une fois.
Plus de détails dans cette réponse: https://stackoverflow.com/a/35064911/4495995
C'est apparemment un problème Apple. J'ai rencontré le même problème plusieurs fois dans les applications. https://forums.developer.Apple.com/thread/13414
Depuis iOS 9, chaque fois que vous désinstallez et que vous réinstallez l’application à un nouveau jeton de périphérique, c’est peut-être pour cette raison que vous recevez plusieurs notifications Push.
En fait, je lis sur un forum, ils fournissent la solution que lorsque vous générez une charge utile qui ajoute une valeur supplémentaire personnalisée toute valeur aléatoire afin que chaque charge utile a une valeur unique. Dans mon cas, sur vb.net, j'utilise DateTime.Now.ToString ("MMddyyyyHHmmssfff") pour ajouter un horodatage unique en millisecondes. J'espère que son travail j'ai mis en œuvre cela, mais pas testé jusqu'à présent.
J'utilise ceci et cela fonctionne bien dans Ios9 également, veuillez l'essayer Ajoutez ceci dans votre 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)];
}
La méthode d'appel est
- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken{
NSString *token = [[deviceToken description] stringByTrimmingCharactersInSet: [NSCharacterSet characterSetWithCharactersInString:@"<>"]];
self.AppDeviceToken=[token stringByReplacingOccurrencesOfString:@" " withString:@""];
}
Commencez par vérifier votre base de données et assurez-vous que vous n'avez pas reçu le jeton de périphérique deux fois, il est fort possible que vous ayez des entrées en double du même jeton.
Deuxièmement, si vous installez/désinstallez l'application dans les 3 à 4 jours, il est possible que vous receviez la notification deux fois, voire trois fois.
Solution: Veuillez désinstaller l'application pendant une semaine, si possible, puis l'installer à nouveau.
Je vous remercie.