跳转至

单推

先决条件

要与单推送 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 无效,则不会发送

建议

  • 对于基于设备的标识符(did):添加映射的 AppID
  • 对于基于账户的标识符(playerId):添加所有映射的 AppIDs
  • 如果存在多种标识符:检查 标识符 结构中的优先级
字符串[] X
enableLocale 是否应用语言区域

    true

  • 以推送接收者设置的语言发送消息。基于与令牌信息保存的语言代码
  • 保存令牌时确定语言的标准
  • 第1: 游戏语言
  • 第2: 设备语言(如果没有提供游戏语言)

  • 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

标识符示例

    [
        {
            "playerId":51234,
            "did":1234
        }
    ]

消息结构

部门 字段名称 描述 类型 是否必需
消息 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 = FCM尝试立即交付,可能会唤醒设备以退出待机模式。用于需要用户交互的消息。
枚举(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 操作类型(CURLCLOSE),默认值:CLOSE
CURL使用action字段的值执行URL调用。
CLOSE关闭推送。
enum(CURL, CLOSE) O
action 根据操作类型执行的操作
例如,https://....
如果actionTypeCURL,则必填。
字符串 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

建议将请求数据以单行发送,不要有换行,以便可以立即检查服务器日志。

  • 响应
    HTTP/1.1 200 OK
    Content-length: 0
    Content-Type: application/json
    UUID: 3bc6b414-e2df-40d6-8006-9d2308a6edf9