静默推送通知不起作用

Posted

技术标签:

【中文标题】静默推送通知不起作用【英文标题】:Silent push notification is not working 【发布时间】:2015-01-15 09:16:39 【问题描述】:

我正在尝试实现静默推送通知。我需要将静默推送通知数据保存在应用程序的数据库中,以便在用户使用该应用程序时向用户显示看不见的通知及其计数。 我正在使用 Xcode 6.1 并针对 ios 7 及更高版本的设备。目前,我正在使用开发证书进行推送通知。 我已经在目标项目功能的后台模式下检查了远程通知,并且信息列表的后台模式在所需的后台模式下具有“应用程序下载内容以响应推送通知”。

在我的AppDelegate.m 中,我可以注册远程通知并获得设备令牌。现在,当我发送推送通知时,当应用程序处于前台时会调用我的委托方法,但当应用程序处于后台/未运行时,尽管我在横幅中收到推送通知,但不会调用它。

我已经在AppDelegate.m实现了这个方法

-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
    NSLog(@"Received push notification");

我发送的有效载荷如下所示:

 
  aps:  
          content-available: 1 
       

我尝试添加优先级、声音等。但没有任何帮助。 当应用程序在后台运行或未运行时,有人可以帮我弄清楚如何在应用程序中保存静默推送通知数据吗? 请帮我解决这个问题。

【问题讨论】:

【参考方案1】:

因此,您绝对应该能够在后台接收它们,但请注意,如果用户故意从任务切换器中终止您的应用程序,那么它将不再获取它们。

iOS 7 及更高版本的回调如你所说,但在此之前是

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken

您似乎不太可能针对 iOS 6,所以我会选择格式错误的推送数据包或后台推送设置不完全正确。

【讨论】:

【参考方案2】:

您是否将应用程序 info.plistUIBackgroundModes 设置为 remote-notificiton?

那也加这个方法帮你调试

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))handler

   //Success
   handler(UIBackgroundFetchResultNewData);

【讨论】:

【参考方案3】:

静默推送通知不同于面向用户的通知。它们被视为低优先级,并且受到 APNS 和 iOS 的速率限制。在实践中,这意味着静默通知只能不经常发送,并且在将它们传递给应用程序之前可能会有很长的延迟。

您所描述的行为可能是设备上的唤醒速率限制器。 iOS 限制启动应用程序以执行后台工作的频率。这是为了防止滥用行为 - 某些应用程序可能希望在后台保持活动状态,从而永远耗尽电池电量。

连接 Xcode 时唤醒速率限制器未激活,这使得静默通知似乎立即传递。

我的iOS Notifications book 有一章很长,描述了速率限制器以及如何使用它们。

【讨论】:

以上是关于静默推送通知不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Nodejs 静默推送通知在 iOS 13 中不起作用

iOS的FCM静默推送通知结构?

当应用程序在 iOS 11.4.1 中处于后台时,静默通知不起作用

在 iOS 中处理静默推送通知的最佳方法是啥

推送通知不起作用

生成新证书后推送通知不起作用