接收重复推送通知ios9

时间:2015-09-29 09:51:19

标签: ios objective-c iphone apple-push-notifications

我在iOS9中收到两次相同的推送通知,虽然它在iOS8中运行良好。

我使用以下代码注册推送通知:

#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

5 个答案:

答案 0 :(得分:4)

我在多个应用中遇到此问题,如果您拨打registerUserNotificationSettings:次超过1次,则会显示重复项。

这个答案的更多细节: https://stackoverflow.com/a/35064911/4495995

答案 1 :(得分:2)

这显然是苹果问题。我跨应用程序多次遇到同样的问题。 https://forums.developer.apple.com/thread/13414

答案 2 :(得分:2)

每次卸载时,从iOS 9开始,再次重新安装应用程序时,会分配一个新设备令牌,这可能是您收到多次推送通知的原因。

实际上,我从一个论坛中读出,它们提供的解决方案是,当您生成有效负载时,会添加一个额外的自定义任意随机值,以便每个有效负载具有一些唯一值。在我的情况下,在vb.net中我使用DateTime.Now.ToString(“MMddyyyyHHmmssfff”)来添加一个毫秒的唯一时间戳。我希望它的工作我实现了这个,但到目前为止还没有测试过。

答案 3 :(得分:0)

我正在使用此功能,这也适用于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:@""];
}

答案 4 :(得分:0)

首先检查您的数据库并确保您没有获得两次设备令牌,很可能您有相同令牌的重复条目。

其次,如果您在3到4天内安装/卸载应用程序,则可能会收到两次甚至三次通知。

解决方案:如果可能,请将应用程序卸载一周,然后重新安装该应用程序。

谢谢。