深入解析argon/node-apn中的Notification类:构建iOS推送通知
node-apn 项目地址: https://gitcode.com/gh_mirrors/nod/node-apn
概述
在iOS应用开发中,推送通知是与用户保持联系的重要方式。argon/node-apn项目提供了一个强大的Node.js模块,用于向苹果设备发送推送通知。本文将重点介绍其中的核心组件——apn.Notification
类,它负责封装要发送到设备的数据并处理JSON编码。
Notification类基础
apn.Notification
类是构建推送通知的核心,它封装了所有必要的数据和配置选项。通过这个类,开发者可以轻松创建符合苹果推送通知服务(APNS)规范的推送内容。
初始化Notification
创建Notification实例时,可以选择传入一个配置对象来预填充属性:
let notification = new apn.Notification({
alert: "您好,世界!",
sound: "chime.caf",
mutableContent: 1,
payload: {
"sender": "node-apn",
},
});
这种方式可以一次性设置多个属性,代码更加简洁。
有效载荷(Payload)详解
推送通知的核心是有效载荷,它决定了通知在设备上的表现形式和行为。
标准payload属性
notification.payload
属性是一个对象,会被JSON编码并作为通知的有效载荷发送。当设置了notification.aps
属性后,这些值会在发送前被添加到payload中:
let notification = new apn.Notification();
notification.payload = {
from: "node-apn",
source: "web",
};
notification.body = "您好,世界!";
输出结果:
{
"from":"node-apn",
"source":"web",
"aps":{
"alert":"您好,世界!"
}
}
rawPayload属性
如果需要完全控制有效载荷,可以使用rawPayload
属性。设置此属性后,便利设置器将不会影响最终的JSON输出:
let notification = new apn.Notification();
notification.rawPayload = {
from: "node-apn",
source: "web",
aps: {
"content-available": 1
}
};
便利设置器(Convenience Setters)
Notification类提供了一系列便利设置器,简化了APNS标准属性的设置。这些设置器实际上是在操作aps
对象下的各个属性。
常用设置器示例
let notification = new apn.Notification();
// 设置通知正文
notification.body = "您好,世界!";
// 设置通知标题
notification.title = "node-apn";
// 设置应用角标
notification.badge = 10;
// 使用链式调用
notification.setAction("查看详情")
.setMutableContent(1);
完整设置器对照表
| 设置器名称 | 目标属性 | 类型 | 说明 | |-------------------|---------------------|---------------------|-------------------------| | alert
| aps.alert
| 字符串或对象 | 通知内容 | | body
| aps.alert.body
| 字符串 | 通知正文 | | title
| aps.alert.title
| 字符串 | 通知标题 | | badge
| aps.badge
| 数字 | 应用角标数字 | | sound
| aps.sound
| 字符串 | 播放的声音文件 | | contentAvailable
| aps.content-available
| 1 | 静默通知标志 | | mutableContent
| aps.mutable-content
| 1 | 允许通知修改标志 |
重要配置属性
除了有效载荷外,Notification还提供了一些重要的配置属性,这些属性不会计入有效载荷大小限制。
主题(topic)
notification.topic
属性是必需的,它指定了通知的目标主题,通常是应用的bundle ID。
通知ID(id)
notification.id
是一个UUID,用于标识通知。如果不提供,APNS会自动生成一个。当发生错误时,响应中会包含此ID。
过期时间(expiry)
notification.expiry
是一个UNIX时间戳,指定通知何时过期。如果通知无法送达设备,APNS会重试直到过期。值为0表示立即过期,不会重试。
优先级(priority)
优先级决定了APNS如何处理通知:
10
:立即发送(默认值),通知必须触发警报、声音或角标5
:在省电时发送
推送类型(pushType)
对于iOS 13及更高版本,必须指定推送类型:
alert
:显示警报、播放声音或更新角标background
:静默通知,不与用户交互
折叠ID(collapseId)
具有相同折叠ID的多个通知会被合并显示。该值不应超过64字节。
最佳实践
-
合理设置优先级:对于需要用户立即注意的通知使用高优先级,对于后台更新使用低优先级。
-
控制有效载荷大小:APNS对有效载荷有大小限制(目前为4KB),避免包含不必要的数据。
-
使用折叠ID:对于同一事件的多个更新,使用相同的折叠ID可以提供更好的用户体验。
-
正确处理静默通知:静默通知(content-available)不应包含alert、sound或badge,且优先级应为5。
-
设置适当的过期时间:根据通知的重要性设置合理的过期时间,避免不必要的重试。
通过合理使用apn.Notification
类的各项功能,开发者可以构建出既符合苹果规范又能提供优秀用户体验的推送通知系统。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考