单推
先决条件¶
要与单推送 API 同步,请确保发出授权令牌(API 密钥)。如果您已经拥有密钥,请请求额外的权限。请参考 Hive 服务器 API > 通知 > 推送 v4 > 身份验证 以查看如何请求和发出授权令牌。
Note
单次 Puch API 是异步的,并按顺序处理,API 请求 > 令牌查找 > 发送。
- API请求:验证请求数据并返回请求的响应代码。
- 令牌查找:查找请求数据的推送令牌。可能会出现没有令牌的情况。
- 发送:将数据传输到各个市场的推送服务器(如ADM、APNS、FCM)。从市场收到的响应显示处理结果。
- 当在令牌查找和发送步骤中处理失败时,不会将响应传输给调用推送服务器的客户端。如果您在发送数据后10分钟内没有收到推送,请联系**解决方案架构师团队,Com2uS平台**。
按环境访问 URL¶
| 服务器 | URL |
|---|---|
| 生产环境 | https://notification.withhive.com |
| 沙盒 | https://sandbox-notification.withhive.com |
基本信息和请求参数¶
| 方法 | POST | ||||
|---|---|---|---|---|---|
| URL | /push/send | ||||
| 部分 | 字段名称 | 描述 | 类型 | 必填 | |
| 头部 | Content-Type | application/json;charset=utf-8 | |||
| Authorization | bearer {{API KEY}} | ||||
| 正文 | notice | 是否为通知警报(默认:false)。• true:作为通知警报发送。不会发送给未同意接收通知的收件人。如果在夜间(21:00~08:00)发送,则需要额外的夜间同意。有关详细信息,请参见通知警报工作流程。 • false:作为游戏警报发送(必需的操作警报)。无论是否同意接收通知,都会发送。※ 如果在设备/操作系统级别阻止通知,则可能无法送达警报,无论通知设置如何。 | 布尔值 | O | |
| identifiers | 标识符信息(最多100个) 标识符结构 和 示例 可以在下面找到 | identifier[] | O | ||
| game | gameid | 游戏ID | 字符串 | O | |
| appids | AppID 列表 如果映射到标识符的 AppID 无效,则不会发送 建议
| 字符串[] | X | ||
| enableLocale | 是否应用语言区域
true false | 布尔值 | O | ||
| payload | single | 如果 enableLocale=false,请求单个字段。 消息结构 如下。 | 消息 | O | |
| defaultLanguage | 如果 enableLocale=true,设置为默认语言 | 字符串 | |||
| locale {{LANGUAGE}} | 如果 enableLocale=true,通过区域字段设置。与单个字段中的消息信息相同 | 消息 | |||
| option | 选项信息 如下 | 选项 | X | ||
| actionInfo | android | ActionPayload 信息 如下 | ActionPayload | X | |
| ios | ActionPayload 信息 如下 | ActionPayload | X |
通知警报工作流程¶
通知警报仅发送给已同意接收的游戏应用用户。如果通知警报在 21:00~08:00 之间发送,则需要额外的夜间警报同意。
通知警报工作流的详细信息如下:
- 如果用户不同意接收通知提醒,则所有设置为通知的消息将不会发送。
- 只有同意接收通知提醒的用户才能同意夜间提醒。
Warning
向韩国用户的广告通知警报的规定
当向韩国用户发送通知警报时,这些警报被视为广告警报,必须遵守《信息与通信网络法》第50条。广告警报消息必须包含表明这是广告的短语以及退出的说明。
- 广告提醒消息示例: (广告) {message_body} (选择退出: 在设置中更改)
Note
- 为了顺利接收单次推送,建议在appids和identifiers字段中仅输入一个数据项。
- 如果请求中包含多个identifiers或appids,可能会导致推送延迟,因为无法指定搜索条件。
- 建议指定优先级最高的标识符值,并避免仅配置具有did值的标识符。
- 避免在游戏字段中仅指定gameid的请求。
- 如果appids字段中没有数据,将搜索gameid中包含的所有appids,这可能会导致推送延迟。
标识符结构¶
| 部门 | 字段名称 | 描述 | 类型 | 必需 | |
|---|---|---|---|---|---|
| identifier | identifier | 至少必须包含两个中的一个 优先级:playerId,然后是did | 长整型 | O | |
| playerId | |||||
| did |
标识符示例¶
消息结构¶
| 部门 | 字段名称 | 描述 | 类型 | 是否必需 | |
|---|---|---|---|---|---|
| 消息 | android | title | 标题 | 字符串 | 是 |
| message | 正文 | 字符串 | 是 | ||
| messageExpanded | 扩展正文 | 字符串 | 是 | ||
| imageUrl | 图片 URL | 字符串 | 否 | ||
| ticker | 票据 | 字符串 | 否 | ||
| summaryText | 摘要 | 字符串 | 否 | ||
| ios | title | 标题 | 字符串 | 是 | |
| message | 正文 | 字符串 | 是 | ||
| mediaUrl | 图片 URL | 字符串 | 否 |
选项信息¶
| 部分 | 字段名称 | 描述 | 类型 | 必需 | |
|---|---|---|---|---|---|
| 选项 | 徽章 | 接收推送时在应用图标上显示的数字(默认:1) | 整数 | X | |
| 覆盖 | 是否使用Android推送覆盖功能(默认:false) | 布尔值 | X | ||
| collapseKey | 使用推送覆盖时的键值(数字字符串:“123”) | 字符串 | X | ||
| 参与度 | 用户参与度 | 字符串 | X | ||
| 评论 | 评论 | 字符串 | X | ||
| 组键 | 用于在iOS和Android设备上分组通知的组键。有关更多详细信息,请参阅以下文档。 | 字符串 | X | ||
| 安卓 | 图标 | 当推送通知出现在用户设备上时显示的图标图像文件名。图像文件必须存在于/src/main/res/drawable中。有关支持的图像文件格式,请参见这里。 要从网络显示图像,请在此字段中输入图像URL,而不是文件名。如果此字段为空,将显示应用图标图像。 | 字符串 | X | |
| 声音 | 当推送通知出现在用户设备上时播放的声音文件名称。声音文件必须存在于/src/main/res/raw中。如果此字段为空,则使用系统默认声音。 | 字符串 | X | ||
| 优先级 | 发送到Android设备的消息优先级。这控制根据FCM的交付时机。可以是NORMAL或HIGH,默认是NORMAL。有关更多详细信息,请参见Firebase指南。
| 枚举(NORMAL, HIGH) | X | ||
| ios | 声音 | 当推送通知出现在用户设备上时播放的声音文件名称。声音文件必须存在于应用容器的Library/Sounds或主包中。如果为空,则使用“默认”,并播放系统默认声音。 | 字符串 | X | |
ActionPayload¶
ActionPayload 是在使用推送操作按钮时传递的数据格式,这是单一推送 API 的一个附加功能。
推送操作按钮是SDK中可用的通知功能,在长按推送通知时显示为系统按钮。
有关推送操作按钮的更多详细信息,请参阅以下指南。
Warning
请注意使用推送操作按钮时的以下事项:
- 仅在 SDK Android 和 iOS 4.25.5.0 或更高版本上可用。
identifiers字段中仅一个identifier是有效的,并且playerId是必需的。- 开发者负责通过推送操作按钮调用的 URL 的安全验证。
ActionPayload 数据结构¶
在请求单个推送 API 时,ActionPayload 中包含的数据如下。
| 字段名称 | 描述 | 类型 | 必需 |
|---|---|---|---|
| category | 推送操作按钮集的类别标识符,用于识别该集合。Hive SDK 提供了默认的推送操作按钮集。 查看默认推送操作按钮集 有关类别的更多详细信息,请参见 Apple 开发者网站。 iOS: 必需,Android: 可选且被忽略 | 字符串 | O iOS X Android |
| actions | 在推送通知中显示的系统按钮列表 (Android: 最多 3 个 / iOS: 取决于推送操作按钮集) 请参见下面的 操作信息 | Action[] | O |
动作¶
操作是 ActionPayload 中每个系统按钮的数据。Action 中包含的参数如下。
| 字段名称 | 描述 | 类型 | 必填 |
|---|---|---|---|
| actionId | 操作标识符,用于推送操作按钮集,用于识别推送通知中的系统按钮。有关更多详细信息,请参见Apple开发者指南。 iOS: 必填,Android: 可选且被忽略 | 字符串 | O iOS X Android |
| titles | 按钮多语言文本,根据enableLocale参数应用。如果未找到有效的语言代码,则使用default。key = 语言代码, default键是必需的,值 = 按钮名称如果按钮名称过长,可能会被截断。请设置适当的长度。 仅限Android | Map | O Android X iOS |
| actionType | 操作类型(CURL,CLOSE),默认值:CLOSECURL使用action字段的值执行URL调用。CLOSE关闭推送。 | enum(CURL, CLOSE) | O |
| action | 根据操作类型执行的操作 例如, https://....如果 actionType为CURL,则必填。 | 字符串 | X |
输出 > 响应参数结构¶
| 部分 | 字段名称 | 描述 |
|---|---|---|
| 头部 | 内容类型 | application/json;charset=utf-8 |
| UUID | {{UUID}} | |
| 主体 | - | 如果成功则为空 |
响应状态代码¶
| 键 | 值 | 描述 |
|---|---|---|
| 200 | 成功 | (主体为空) |
| 400 | 错误请求 | 缺少POST数据,JSON格式错误,缺少或无效的必需元素 |
| 401 | 未授权 | 授权头缺失或无效,API密钥未注册,无法访问此API |
| 403 | 禁止 | 授权头方案不是“Bearer”(仅支持Bearer) |
| 404 | 未找到 | 请求URL不正确 |
| 500 | 内部服务器错误 | 服务器内部错误 |
| 502 | 错误网关 | 推送网关服务器超载,网络尝试了错误的连接 |
| 503 | 服务不可用 | API服务器或认证服务器宕机 |
示例代码¶
-
请求 ("enableLocale":false)
POST /push/send HTTP/1.1 Host: sandbox-notification.qpyou.cn Content-Type: application/json Authorization: Bearer {API KEY} Content-Length: [auto calculated] { "notice": false, "identifiers": [ { "playerId": 200001358, "did": 300010915 } ], "game": { "gameid": "com.com2us.hivesdk", "appids": [ "com.com2us.hivesdk.normal.freefull.google.global.android.common", "com.com2us.hivesdk.normal.freefull.apple.global.ios.universal" ] }, "enableLocale": false, "payload": { "single": { "android": { "title": "安卓标题", "message": "安卓消息", "messageExpanded": "", "imageUrl": "", "ticker": "", "summaryText": "" }, "ios": { "title": "iOS标题", "message": "iOS消息", "mediaUrl": "" } }, "option": { "badge": "1", "overwrite": false, "collapseKey": "", "engagement": "", "groupKey": "", "android": { "icon": "", "sound": "", "priority": "normal" }, "ios": { "sound": "" } } }, "actionInfo": { "android": { "actions": [ { "titles": { "default": "确定" }, "actionType": "CURL", "action": "https://examplecurl.com" }, { "titles": { "default": "取消" }, "actionType": "CLOSE", "action": "" } ] }, "ios": { "category": "确认类别", "actions": [ { "actionId": "CONFIRM_ID", "actionType": "CURL", "action": "https://examplecurl.com" }, { "actionId": "CLOSE_ID", "actionType": "CLOSE", "action": "" } ] } } } -
请求 ("enableLocale":true)
POST /push/send HTTP/1.1 Host: sandbox-notification.qpyou.cn Content-Type: application/json Authorization: Bearer {API KEY} Content-Length: [auto calculated] { "notice": false, "identifiers": [ { "playerId": 200001358, "did": 300010915 } ], "game": { "gameid": "com.com2us.hivesdk", "appids": [ "com.com2us.hivesdk.normal.freefull.google.global.android.common", "com.com2us.hivesdk.normal.freefull.apple.global.ios.universal" ] }, "enableLocale": true, "payload": { "defaultLanguage": "en", "locale": { "ko": { "android": { "title": "测试_韩语标题", "message": "测试_韩语消息" }, "ios": { "title": "测试_韩语标题", "message": "测试_韩语消息" } }, "en": { "android": { "title": "test_English title", "message": "test_English message" }, "ios": { "title": "test_English title", "message": "test_English message" } } }, "option": { "badge": 1, "overwrite": true, "collapseKey": "99", "groupKey": "", "android": { "icon": "GoogleIcon", "sound": "GoogleSound", "priority": "normal" }, "ios": { "sound": "AppleSound" } } }, "actionInfo": { "android": { "actions": [ { "titles": { "default": "确定", "en": "OK", "ko": "확인" }, "actionType": "CURL", "action": "https://examplecurl.com" }, { "titles": { "default": "取消", "en": "Cancel", "ko": "취소" }, "actionType": "CLOSE", "action": "" } ] }, "ios": { "category": "CONFIRM_CATEGORY", "actions": [ { "actionId": "CONFIRM_ID", "actionType": "CURL", "action": "https://examplecurl.com" }, { "actionId": "CLOSE_ID", "actionType": "CLOSE", "action": "" } ] } } }
Note
建议将请求数据以单行发送,不要有换行,以便可以立即检查服务器日志。
- 响应