我正在使用 APNS 发送远程推送通知。要求是当通知发送给应用程序用户时(即使用户没有点击通知甚至没有看到通知),根据通知 id i 将发送收据发送到 Web 服务器(即调用 Web 服务)已收到。
APNS 没有提供交付报告。他们是 APNS 的反馈服务,但也不提供交付报告。
所以我想知道有哪些可能的方法来获取远程推送通知的传递报告。如果我能够在远程推送通知到达时在 APP deligate 或任何其他应用程序中执行自定义方法,即使应用程序处于后台或被用户终止,那么它将解决我的问题。
任何帮助将不胜感激。
下面是我当前使用的代码,当应用程序处于后台时它不起作用。
我在
中编写了一个自定义方法-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
向服务器发送收到通知的确认。当应用程序位于前台时,所有功能都可以完美执行。但是当应用程序处于后台时就会出现问题。
中编写的自定义方法 -(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
在用户通过点击通知栏打开应用程序之前不会执行,如果用户通过点击应用程序图标而不是通过通知栏打开应用程序,则永远不会执行。
因为 Apple 没有提供任何方法来了解推送通知何时发送到用户的设备。这是你可以做的,
1) 将 “通知服务扩展” 添加到您的应用程序。
2) 现在在 didReceiveNotificationRequest 中添加调用 Web 服务的代码,以向服务器报告收到的通知。
3) 现在转到应用程序的功能,并在“后台模式”中启用“后台获取”。
4) 现在,在您发送的通知中,传递 “content-available = 1”,这将唤醒您的应用程序 30 秒,并且它可以执行 didReceiveNotificationRequest 中编写的代码。
它对我有用。
为什么你需要知道这一点?了解他们是否确实在其设备上收到了通知有什么用处?
它将在后台唤醒您的应用程序 30 秒来处理它。您需要添加 RemoteNotifications 后台功能。
如果每小时发送的邮件过多,Apple 会对其进行限制或干脆不发送。
不再需要添加通知服务扩展!
Apple 在 2023 年推出了 推送通知控制台,其中包含大量功能和 API。其中之一是“监控交付指标”,您可以通过提供“apns-unique-id”来获取通知的不同状态。 这是有关此内容的 WWDC 视频片段。 通过此功能,您甚至可以在某些情况下(例如,当低功耗模式打开时)
找出未交付的原因。所有传输日志(包括控制台和 API)都可以在控制台的“传输日志”选项卡中找到:
此功能也适用于通过常规 APNs API 发送的通知。您需要从 APNs 响应中记录
“apns-unique-id”才能查询此信息。 ⚠️ 请注意,对于从控制台发送的通知,无需切换到“发送日志”选项卡,发送页面本身也提供相同的信息: