概述
通知服务扩展允许您在向用户显示推送通知之前拦截和修改推送通知。这使得以下功能成为可能:- 后台数据处理
- 自定义样式(颜色、图标、振动)
- 富媒体附件(图像、视频)
- 确认递送/分析
- 操作按钮选项
您可以通过 OSNotification 类 访问从 OneSignal 发送的推送通知中的数据
Android 通知服务扩展
允许您在向用户显示通知之前处理通知。常见用例包括:- 在后台接收数据,可以显示或不显示通知。
- 根据客户端应用逻辑覆盖特定的通知设置,例如自定义强调色、振动模式或任何其他可用的
NotificationCompat
选项。
1. 为服务扩展创建一个类
创建一个扩展INotificationServiceExtension
的类并实现 onNotificationReceived
方法。
onNotificationReceived
方法参数是类型为 INotificationReceivedEvent 的 event
。
2. 示例用例
以下是您可以在上述模板通知服务扩展类中实现的常见示例。- 阻止通知显示
- 添加自定义字段
- 更改通知颜色和图标
3. 将服务扩展添加到您的 AndroidManifest.xml
在应用程序标签内的 AndroidManifest.xml
文件中添加类名和值作为 meta-data
。忽略任何”未使用”的警告。
XML
iOS 通知服务扩展
UNNotificationServiceExtension 允许您在向用户显示推送通知之前修改推送通知的内容,并且对于以下其他重要功能是必需的:- Images & Rich Media.
- Confirmed Delivery
- Badges
- Action Buttons
- Influenced Opens with Firebase Analytics
获取 iOS 推送载荷
当按照移动 SDK 设置进行操作时,您会找到向 OneSignalNotificationServiceExtension 添加代码的部分。 在该代码中,有一个方法OneSignalExtension.didReceiveNotificationExtensionRequest
。这是我们在向用户显示通知之前将通知的 bestAttemptContent
传递给应用的地方。在调用此方法之前,您可以获取通知载荷并(如果需要)在向用户显示之前更新它。
在此示例中,我们发送一个包含以下数据的通知:
JSON
a
参数的 custom
对象访问这些附加的 data
。
iOS 通知服务扩展故障排除
本指南用于调试 iOS 移动应用上图像、操作按钮或确认递送不显示的问题。 检查您的 Xcode 设置 在 General > Targets 中,确保您的主应用目标和 OneSignalNotificationServiceExtension 目标具有相同且正确的”Supported Destinations”,并且您的”Minimum Deployment”设置为 iOS 14.5 或更高版本。 如果您使用 Cocoapods,请确保这些与 Podfile 中的主目标匹配,以避免构建错误。
在 Xcode 中配置通知服务扩展

示例显示 OneSignalNotificationServiceExtension 目标与 iOS 14 具有相同的最低部署要求
NSExtension
键。确保您能看到:

示例显示查看 Info 选项卡而非 XML
XML
如果使用 Objective-C,请使用
NotificationService
而不是 $(PRODUCT_MODULE_NAME).NotificationService
。
嵌入应用扩展构建阶段设置
如何调试通知服务扩展不运行的问题
1. 更新 OneSignalNotificationServiceExtension 代码
打开NotificationService.m
或 NotificationService.swift
并用以下代码替换整个文件内容。(代码与我们原始的设置代码相同,只是添加了一些额外的日志记录。
确保将 YOUR_BUNDLE_ID
替换为您的实际 Bundle ID。
2. 更改您的活动方案
将您的活动方案设置为OneSignalNotificationServiceExtension
。

Xcode 活动方案选择
3. 构建并运行项目
在 Xcode 中在真实设备上构建并运行项目。4. 打开控制台
在 Xcode 中,选择 窗口 > 设备和模拟器。
Xcode 设备和模拟器窗口

设备控制台访问按钮
5. 检查控制台
在控制台中:- 选择操作 > 包含调试消息
- 搜索
OneSignalNotificationServiceExtension
作为类别 - 选择 开始

控制台调试配置
contents
属性)。在此示例中,载荷为:
cURL

控制台调试输出示例