OneSignal 并非为实时通信而设计。推送通知最适合在用户没有活跃在应用中时用作备用方案。对于实时应用内消息,请使用应用现有的消息层,仅当接收者离线或不活跃时才触发 OneSignal 通知。
社交活动
当有人点赞、评论、提及、标记或关注用户时通知他们。
私信
通过防抖和会话深度链接提醒用户有新的收到的消息。
游戏提醒
发送具有时效性的竞技事件,如基地被攻击、挑战和公会活动。
前提条件
在开始之前,请确保您已具备:- 已在您的应用中安装 OneSignal SDK。参见移动 SDK 设置或 Web SDK 设置。
- 为每个用户设置了
external_id,以便您可以通过自己的标识符定向他们。参见用户与别名。 - 一个可以检测社交操作并调用 OneSignal API 的后端。参见 REST API 概览。
- 如果您计划使用
custom_data进行个性化,需在仪表板中创建模板。使用custom_data必须提供template_id。
社交活动通知
当用户参与社交操作时发送推送通知。使用custom_data 在发送时将发送者的姓名、头像和相关上下文注入消息中。不会有任何数据存储在 OneSignal 中。
常见社交操作
设置
1
在您的后端检测操作
当发生社交操作时,您的后端识别发送者和接收者,以及帖子 ID 或内容等任何相关上下文:
JSON
2
创建推送模板
在仪表板中,前往 Messages > Templates > New Push Template。使用 Liquid 语法引用 消息:图片(可选,显示发送者的头像):保存模板并记下它的
custom_data 字段:标题:Liquid
Liquid
Liquid
template_id。3
调用 Create Message API
从您的后端向接收者发送通知:OneSignal 在发送时使用
JSON
custom_data 的值渲染模板。发送者的姓名和头像会出现在通知中,但不会存储在 OneSignal 中。4
可选:添加邮件和短信备用方案
要触达已禁用推送或通知未送达的用户,请参见下方的邮件和短信备用方案。
限制高频操作
一个爆火的帖子每秒可能产生数千个like 事件。不要为每个事件都发送推送——那会淹没接收者,并导致您的应用被静音或卸载。正确的模式是:
- 在您的后端累积计数(例如,以接收者 + 帖子为键的 Redis 计数器)。
- 在一段静默窗口后(10 分钟是合理的默认值),发送一条汇总推送:“12 人点赞了你的帖子。”
- 如果汇总后又有新的点赞到来,开始一个新的窗口——不要立即再次推送。
直接(用户对用户)消息
当用户收到新私信时通知他们,并通过深度链接直接带他们进入会话。仅当接收者没有活跃在聊天中时才发送推送。通知一个正在阅读该会话的人会造成糟糕的体验。请使用您应用自己的逻辑,在触发通知前检查接收者当前是否活跃。OneSignal 不会跟踪用户当前是否正在使用您的应用。
设置
1
检测消息发送并检查活跃状态
当用户 A 向用户 B 发送消息时,检查用户 B 当前是否活跃在该会话中。如果用户 B 离线或不在会话中,则继续发送推送。
2
避免为每条消息发送一条推送
如果用户 A 连续发送了多条消息,请在最后一条消息之后等待一小段时间再触发通知。以下是在您的后端实现的方法:
- 当第一条消息到达时,启动一个计时器(例如 60 秒)。
- 如果在计时器结束前又有消息到达,则重置计时器。
- 当计时器结束且没有新消息时,发送一条汇总未读数量的推送。
3
发送推送通知
4
可选:添加邮件和短信备用方案
要触达已禁用推送或通知未送达的用户,请参见下方的邮件和短信备用方案。
游戏:竞技和社交提醒
竞技类游戏受益于能制造紧迫感的时效性提醒。使用custom_data 让这些通知显得具体且个人化。一条指名攻击者或显示确切资源数量的通知远比通用提醒更有吸引力。
常见竞技事件
设置
1
在您的后端检测游戏事件
当竞技事件发生时,您的游戏后端识别受影响的玩家并捕获相关上下文:
JSON
2
创建推送模板
在仪表板中,创建带有 Liquid 引用的推送模板:标题:消息:保存模板并记下它的
Liquid
Liquid
template_id。3
发送通知
从您的游戏后端调用 Create Message API:
JSON
url 通过深度链接将玩家直接带到防御屏幕。data 对象将上下文传递给您应用的通知处理程序,以便加载正确的战斗状态。4
可选:添加邮件和短信备用方案
要触达已禁用推送或通知未送达的玩家,请参见下方的邮件和短信备用方案。
更多游戏提醒示例
- Leaderboard overtake
- Guild event
- Challenge invite
模板消息:API 请求:
Liquid
JSON
邮件和短信备用方案
为任何通知类型添加邮件或短信备用方案,以触达已禁用推送或通知未送达的用户。使用 View Message API 检查是否有确认送达或点击记录。如果在您的延迟窗口内没有记录,则使用相同的custom_data 方法通过邮件或短信模板发送后续消息。
- Email
- SMS
社交活动最适合提及和直接回复等高价值操作。邮件模板示例(主题):私信最适合作为未读会话的每日汇总,而不是按条消息提醒。邮件模板示例(主题):邮件模板示例(正文,迭代 conversations 数组):有关完整的数组迭代参考,包括嵌套对象和条件渲染,请参见使用 API custom_data 个性化消息。游戏最适合非紧急回顾,如每周排行榜总结、公会战结果或里程碑解锁。邮件模板示例(主题):
JSON
Liquid
JSON
Liquid
Liquid
JSON
Liquid
常见问题
OneSignal 能像聊天应用一样实时发送通知吗?
不能。推送通知通过 Apple(APNs)和 Google(FCM)的基础设施投递,投递时间不固定且没有送达保证。请使用应用现有的消息层进行实时应用内通信,并在接收者没有活跃在应用中时将 OneSignal 用作备用方案。如何避免通知已经在应用中的用户?
OneSignal 不会跟踪用户当前是否活跃在您的应用中。您自己的后端逻辑必须决定是否触发通知。只有在确认接收者离线或不在相关屏幕上时才调用 OneSignal API。如何防止连续快速发送的消息产生多条通知?
在您的后端发送通知前添加一个短暂延迟。当第一条消息到达时,启动一个计时器。如果在计时器结束前又有消息进来,则重置它。当计时器结束时,发送一条包含未读数量的推送。OneSignal 不会自动合并多次 API 调用,因此如果您调用 API 五次,就会发送五条通知。消息发送后 custom_data 会保存到用户的资料中吗?
不会。custom_data 是临时的,仅在 API 请求期间存在,用于在发送时渲染模板。它不会存储在 OneSignal 中,也无法在未来的消息或 Journeys 中重复使用。对于持久化用户数据,请使用标签。
可以在一次 API 调用中定向多个接收者吗?
可以。在include_aliases 数组中传递多个 external_id 值。如果每个接收者需要不同的个性化内容(例如不同的攻击者名称),请使用 custom_data 中的批量个性化模式。完整方法请参见使用 API custom_data 个性化消息。每次调用的确切接收者上限和速率限制记录在 Create Message API 参考中——对于非常大的受众,基于细分的定向比每次调用传递数千个 external_id 值更高效。
我需要为国际用户本地化消息吗?
对于任何跨语言的受众,需要。headings 和 contents 字段接受多个语言代码(例如 { "en": "...", "es": "...", "fr": "..." }),OneSignal 会根据每个订阅的语言选择正确的变体。同样的模式也适用于模板字段。完整参考(包括备用语言行为)请参见多语言消息。
相关页面
使用 API custom_data 个性化消息
使用 custom_data 和 Liquid 语法将动态的、特定于消息的数据注入模板。
消息个性化
OneSignal 中所有个性化选项的概览,包括标签、用户属性和细分。
深度链接
当用户点击通知时将他们带到应用中的特定屏幕。
创建活动动态
使用 OneSignal 的通知收件箱在您的应用内显示社交提醒历史记录。
模板
为推送、邮件和短信创建和管理可重用的消息模板。
Create Message API
发送消息的完整 API 参考,包括 custom_data、定向和所有可用字段。