使用APNS-IOS发送远程推送通知的送达报告

问题描述 投票:0回答:3

我正在使用 APNS 发送远程推送通知。要求是当通知发送给应用程序用户时(即使用户没有点击通知甚至没有看到通知),根据通知 id i 将发送收据发送到 Web 服务器(即调用 Web 服务)已收到。

APNS 没有提供交付报告。他们是 APNS 的反馈服务,但也不提供交付报告。

所以我想知道有哪些可能的方法来获取远程推送通知的传递报告。如果我能够在远程推送通知到达时在 APP deligate 或任何其他应用程序中执行自定义方法,即使应用程序处于后台或被用户终止,那么它将解决我的问题。

任何帮助将不胜感激。

下面是我当前使用的代码,当应用程序处于后台时它不起作用。

我在

中编写了一个自定义方法
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo

向服务器发送收到通知的确认。当应用程序位于前台时,所有功能都可以完美执行。但是当应用程序处于后台时就会出现问题。

中编写的自定义方法
 -(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo

在用户通过点击通知栏打开应用程序之前不会执行,如果用户通过点击应用程序图标而不是通过通知栏打开应用程序,则永远不会执行。

ios objective-c iphone push-notification apple-push-notifications
3个回答
20
投票

因为 Apple 没有提供任何方法来了解推送通知何时发送到用户的设备。这是你可以做的,

1) 将 “通知服务扩展” 添加到您的应用程序。

2) 现在在 didReceiveNotificationRequest 中添加调用 Web 服务的代码,以向服务器报告收到的通知。

3) 现在转到应用程序的功能,并在“后台模式”中启用“后台获取”。

4) 现在,在您发送的通知中,传递 “content-available = 1”,这将唤醒您的应用程序 30 秒,并且它可以执行 didReceiveNotificationRequest 中编写的代码。

它对我有用。


2
投票

为什么你需要知道这一点?了解他们是否确实在其设备上收到了通知有什么用处?

在任何情况下,请使用:https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/CreatingtheNotificationPayload.html#//apple_ref/doc/uid/TP40008194-CH10-SW8

它将在后台唤醒您的应用程序 30 秒来处理它。您需要添加 RemoteNotifications 后台功能。

如果每小时发送的邮件过多,Apple 会对其进行限制或干脆不发送。


0
投票

不再需要添加通知服务扩展!

✅ 从 2023 年开始,这本身就是可能的,现在有工具可以实现这一点

Monitor Delivery Metrics

Apple 在 2023 年推出了 推送通知控制台,其中包含大量功能和 API。其中之一是“监控交付指标”,您可以通过提供“apns-unique-id”来获取通知的不同状态。 这是有关此内容的 WWDC 视频片段 通过此功能,您甚至可以在某些情况下(例如,当低功耗模式打开时

找出未交付的原因

。所有传输日志(包括控制台和 API)都可以在控制台的“传输日志”选项卡中找到:

此功能也适用于通过

常规 APNs APIConsole Demo 发送的通知。您需要从 APNs 响应中记录

“apns-unique-id”

才能查询此信息。 ⚠️ 请注意,对于从控制台发送的通知,无需切换到“发送日志”选项卡,发送页面本身也提供相同的信息:

Console Demo 2

© www.soinside.com 2019 - 2024. All rights reserved.