每个推送通知横幅在 iOS9 上显示两次
Every Push Notification Banner is shown twice on iOS9
几个小时后,我们的 iOS 应用程序出现了一个奇怪的问题:iOS 的主屏幕上收到的每个推送通知都会 trigger/show 相同的通知横幅两次它们之间延迟 2 秒。
- 它只发生在 iOS 9.x 的设备上。在 iOS 8.x 设备上,一切仍在按预期工作。
- 如果我在 -[AppDelegate application:didReceiveRemoteNotification:fetchCompletionHandler:] 中设置一个断点,它只会为每个推送通知调用一次。
此外,我们最近没有对后端进行任何更改(至少是一个较弱的更改),它也发生在已经发布的客户端上,我们 100% 确定我们之前没有看到这个问题。
但是,我们确实更改了当前开发应用程序 Xcode 中的功能,并且必须生成新的配置文件作为标记为 "Invalid" 的旧配置文件。
所以对我们来说,这看起来像是 Apple 方面的问题。还有什么建议 try/check 或做什么?
我向 Apple (Ticket# 23569779) 提交了一份错误报告,该问题似乎已在 iOS 9.2.1 beta(内部版本:13D11)
中得到纠正
我在 iOS9.1(内部版本:13B143)和 iOS9.2(内部版本:13c75)上遇到了跨多个应用程序的本地和远程通知的相同问题。
我重现该问题的最简单方法是在应用程序后台运行时在我的应用程序委托中安排本地通知。
- (void)applicationDidEnterBackground:(UIApplication *)application {
UILocalNotification *notification = [[UILocalNotification alloc] init];
notification.repeatInterval = NSDayCalendarUnit;
[notification setAlertBody:@"My test."];
[notification setFireDate:[NSDate dateWithTimeIntervalSinceNow:1]];
[notification setTimeZone:[NSTimeZone defaultTimeZone]];
[application setScheduledLocalNotifications:[NSArray arrayWithObject:notification]];
}
这将导致通知横幅出现两次:
看来我遇到的问题与 完全相同:我打了两次 [registerUserNotificationSettings:]
。
请注意,如果您调用该方法一次或两次,它可能并不像您想的那么明显:
我在特定的 UIViewController 中特意调用了一次。不幸的是,我也每次都在 didFinishLauchingWithOptions:
中调用它。 不要让自己被愚弄,因为您只看到一次对话框。
如果您想确保在 -[AppDelegate application:didRegisterUserNotificationSettings:]
中添加日志输出。在我的例子中,在我点击权限对话框中的确定后回调被调用了两次。
自从我删除了 didFinishLauchingWithOptions:
中的错位调用后,我再也没有看到双重通知。
几个小时后,我们的 iOS 应用程序出现了一个奇怪的问题:iOS 的主屏幕上收到的每个推送通知都会 trigger/show 相同的通知横幅两次它们之间延迟 2 秒。
- 它只发生在 iOS 9.x 的设备上。在 iOS 8.x 设备上,一切仍在按预期工作。
- 如果我在 -[AppDelegate application:didReceiveRemoteNotification:fetchCompletionHandler:] 中设置一个断点,它只会为每个推送通知调用一次。
此外,我们最近没有对后端进行任何更改(至少是一个较弱的更改),它也发生在已经发布的客户端上,我们 100% 确定我们之前没有看到这个问题。
但是,我们确实更改了当前开发应用程序 Xcode 中的功能,并且必须生成新的配置文件作为标记为 "Invalid" 的旧配置文件。
所以对我们来说,这看起来像是 Apple 方面的问题。还有什么建议 try/check 或做什么?
我向 Apple (Ticket# 23569779) 提交了一份错误报告,该问题似乎已在 iOS 9.2.1 beta(内部版本:13D11)
中得到纠正我在 iOS9.1(内部版本:13B143)和 iOS9.2(内部版本:13c75)上遇到了跨多个应用程序的本地和远程通知的相同问题。
我重现该问题的最简单方法是在应用程序后台运行时在我的应用程序委托中安排本地通知。
- (void)applicationDidEnterBackground:(UIApplication *)application {
UILocalNotification *notification = [[UILocalNotification alloc] init];
notification.repeatInterval = NSDayCalendarUnit;
[notification setAlertBody:@"My test."];
[notification setFireDate:[NSDate dateWithTimeIntervalSinceNow:1]];
[notification setTimeZone:[NSTimeZone defaultTimeZone]];
[application setScheduledLocalNotifications:[NSArray arrayWithObject:notification]];
}
这将导致通知横幅出现两次:
看来我遇到的问题与 [registerUserNotificationSettings:]
。
请注意,如果您调用该方法一次或两次,它可能并不像您想的那么明显:
我在特定的 UIViewController 中特意调用了一次。不幸的是,我也每次都在 didFinishLauchingWithOptions:
中调用它。 不要让自己被愚弄,因为您只看到一次对话框。
如果您想确保在 -[AppDelegate application:didRegisterUserNotificationSettings:]
中添加日志输出。在我的例子中,在我点击权限对话框中的确定后回调被调用了两次。
自从我删除了 didFinishLauchingWithOptions:
中的错位调用后,我再也没有看到双重通知。