概览
确认送达跟踪设备是否真正接收到通过OneSignal发送的推送通知。当设备上的OneSignal SDK收到推送时,它会将包含通知ID和设备订阅ID的确认事件发送回OneSignal。这让您可以确切地看到哪些订阅收到了哪些通知。 在您的OneSignal仪表板中,确认送达在消息报告中显示为已确认(或已接收)。有关所有送达和参与指标,请参阅指标词汇表。
确认送达与”已送达”不同。平台推送服务(APNs、FCM、ADM、HMS)报告通知是否被服务接受——而不是设备是否实际收到了它。确认送达是设备端的确认。
要求
平台特定限制
iOS- 需要Notification Service Extension和App Group两者的设置。
- APNs在离线时每个应用仅保留一条消息。如果离线时发送了多条推送,则仅送达最新的一条。
- 仅支持
data华为消息类型。 - 对于
message类型,华为仅在其自己的仪表板中提供回执数据。
- Safari不支持确认送达。
确认送达故障排除
如果您根本没有收到推送通知,请先参阅通知未显示。iOS
iOS上的确认送达需要两件事协同工作:- 推送到达时运行OneSignal代码的Notification Service Extension(NSE)
- 在主应用目标和NSE目标之间共享的App Group,使它们能够交换数据
确认NSE目标存在并具有正确的代码
在Xcode中,检查项目目标下是否列出了OneSignalNotificationServiceExtension目标。如果不存在,请按照iOS SDK设置的第2步操作。打开NSE的
NotificationService.swift(或.m)文件。它必须在didReceive(_:withContentHandler:)内调用OneSignalExtension.didReceiveNotificationExtensionRequest。如果文件仍包含Apple的默认模板代码,请将其替换为OneSignal NSE代码。确认NSE具有OneSignalExtension包
选择您的NSE目标 > General > Frameworks and Libraries(或Build Phases > Link Binary With Libraries)。验证
OneSignalExtension已列出。主应用目标使用OneSignalFramework,但NSE目标必须使用OneSignalExtension——这些是不同的包。验证App Group在两个目标上都已正确配置
OneSignal SDK使用App Group在主应用和NSE之间共享数据。有两种配置方式——选择与您的设置匹配的一种。
- 选择您的主应用目标 > Signing & Capabilities > App Groups。
- 确认App Group。
group.YOUR_MAIN_APP_BUNDLE_ID.onesignal——其中YOUR_MAIN_APP_BUNDLE_ID是主应用目标的Bundle Identifier(在General > Identity下可找到),请按照默认App Group选项卡操作。否则,请按照自定义App Group选项卡操作。- 默认App Group - group.YOUR_MAIN_APP_BUNDLE_ID.onesignal
- 自定义App Group
- 选择您的NSE目标 > Signing & Capabilities > App Groups。
- 确认完全相同的App Group已列出。如果缺少,通过**+ Capability > App Groups**添加并选择相同的组。
- 正确:
group.YOUR_MAIN_APP_BUNDLE_ID.onesignal - 错误:
group.YOUR_MAIN_APP_BUNDLE_ID.OneSignalNotificationServiceExtension.onesignal
取消勾选"Copy only when installing"
选择您的主应用目标 > Build Phases > Embed App Extensions。确保取消勾选”Copy only when installing”。如果勾选,NSE在开发构建期间不会被嵌入,因此在测试时永远不会运行。
验证Info.plist中的NSExtension值
选择您的NSE目标 > Info选项卡并展开如果您的NSE是用Objective-C编写的,请使用
NSExtension键。确认它包含:NotificationService而不是$(PRODUCT_MODULE_NAME).NotificationService。验证mutable-content已设置
OneSignal自动在推送有效载荷中设置
mutable-content: 1,这告诉iOS调用NSE。如果您通过REST API发送推送,请验证您没有明确设置mutable_content: false。没有mutable-content,iOS不会运行NSE,确认送达就无法触发。测试NSE是否正在运行
在OneSignal调用之前,临时在向自己发送一条测试推送。如果通知正文以
didReceive内添加这一行:[Modified]开头,则NSE运行正常。如果没有,请重新检查上述步骤——NSE未被调用。测试后删除此行。有关使用Xcode Console日志进行高级NSE调试,请参阅调试iOS Notification Service Extension。Android
- 如果通知未显示:请参阅移动推送故障排除。
- 如果通知显示但确认送达缺失:自定义Android Service Extension可能正在阻止它。查看Android Service Extension指南。
Web
- Safari不受支持。
- 对于其他浏览器,确保迁移到v16 SDK已完成:
- 正确的SDK初始化:
- 正确的Service Worker引用:
- 正确的SDK初始化:
常见问题
为什么我的确认送达数量很低或没有显示?
最常见的原因是设置问题(尤其是iOS)、不活跃设备和平台限制。- iOS配置错误: Notification Service Extension或App Group缺失或不正确。请参阅上面的iOS确认送达故障排除。
- 不活跃或废弃的设备: 离线或不再使用的设备不会接收推送或发送确认送达事件。请参阅下面的如何处理不活跃设备?。
- 平台限制: 华为
message类型和Safari不支持确认送达。 - Android强制退出: 某些设备制造商将划走应用视为强制退出,这会停止SDK事件。请参阅移动推送未显示指南。
如何处理不活跃设备?
离线或废弃的设备不会接收推送通知或发送确认送达事件。这在用户更换或废弃设备时很常见。 要重新吸引不活跃用户:- 使用受众活动向未确认送达的用户重新发送。
- 基于最后会话创建细分(例如,90天以上不活跃)。
- 与重新参与Journey结合,将他们赢回。
- 定期针对不活跃用户以清除无法触达的设备。
为什么显示已确认但在我的设备上没有显示?
确认送达事件意味着设备收到了推送有效载荷。在极少数情况下,通知可能不会显示。 可能的原因:- 错过通知: 通过查找和设置测试订阅向自己发送测试推送来排除这种情况。
- iOS专注模式: “请勿打扰”、“睡眠”或其他专注模式会延迟或分组通知。您可能在没有看到的情况下解除了分组通知。
- 抑制显示的应用代码:
- 前台生命周期监听器或Notification Service Extension中的
event.preventDefault()会阻止通知显示。 - 调用
removeDeliveredNotifications(withIdentifiers:)或removeAllDeliveredNotifications()会在通知到达后将其删除。
- 前台生命周期监听器或Notification Service Extension中的
- 推送有效载荷设置:
- 确保
priority设置为高。请参阅推送优先级。 collapse_id使用相同ID将旧推送替换为新推送。
- 确保
需要帮助?与我们的支持团队聊天或发送邮件至
support@onesignal.com请包含以下信息:- 您遇到的问题详情以及复现步骤(如有)
- 您的 OneSignal 应用 ID
- 外部 ID 或订阅 ID(如适用)
- 您在 OneSignal 控制台中测试的消息 URL(如适用)
- 任何相关的日志或错误信息