跳轉至

单次推送

先決條件

要與單一推送 API 同步,請確保發出授權令牌(API KEY)。如果您已經擁有該密鑰,請請求額外的權限。請參考 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):添加所有映射的AppID
  • 如果存在多种标识符:检查标识符结构中的优先级
字符串[] 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 欄位中僅輸入一個數據項目。
  • 如果請求中包含多個識別碼或 appids,可能會導致推送交付延遲,因為無法指定搜索條件。
  • 建議指定優先級最高的識別碼值,並避免僅配置具有 did 值的識別碼。
  • 避免在遊戲欄位中僅指定 gameid 的請求。
  • 如果 appids 欄位中沒有數據,則將搜索所有包含在 gameid 中的 appids,這可能會導致推送交付延遲。

標識結構

欄位名稱 描述 類型 必需
identifier identifier 至少必須包含兩者之一
優先順序:playerId,然後是did
長整數 O
playerId
did

標識範例

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

訊息結構

部分 字段名称 描述 类型 必需
消息 android title 标题 字符串 O
message 正文 字符串 O
messageExpanded 扩展正文 字符串 O
imageUrl 图片 URL 字符串 X
ticker 票据 字符串 X
summaryText 摘要 字符串 X
ios title 标题 字符串 O
message 正文 字符串 O
mediaUrl 图片 URL 字符串 X

選項資訊

部分 字段名称 描述 类型 必需
选项 徽章 接收推送时在应用图标上显示的数字(默认值:1) 整数 X
覆盖 是否使用 Android 推送覆盖功能(默认值:false) 布尔值 X
collapseKey 使用推送覆盖时的键值(数字字符串:“123”) 字符串 X
参与度 用户参与度 字符串 X
评论 评论 字符串 X
组键 用于在 iOS 和 Android 设备上分组通知的组键。有关更多详细信息,请参阅以下文档。 字符串 X
android 图标 当推送通知出现在用户设备上时显示的图标图像文件名。图像文件必须存在于/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 動作類型 (CURL, CLOSE) 默認: 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 KEY 未註冊,無法訪問此 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: [自動計算]
    
    
      {
          "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": "android title",
                      "message": "android message",
                      "messageExpanded": "",
                      "imageUrl": "",
                      "ticker": "",
                      "summaryText": ""
                  },
                  "ios": {
                      "title": "ios title",
                      "message": "ios message",
                      "mediaUrl": ""
                  }
              },
              "option": {
                  "badge": "1",
                  "overwrite": false,
                  "collapseKey": "",
                  "engagement": "",
                  "groupKey": "",
                  "android": {
                      "icon": "",
                      "sound": "",
                      "priority": "normal"
                  },
                  "ios": {
                      "sound": ""
                  }
              }
          },
          "actionInfo": {
              "android": {
                  "actions": [
                      {
                          "titles": {
                              "default": "OK"
                          },
                          "actionType": "CURL",
                          "action": "https://examplecurl.com"
                      },
                      {
                          "titles": {
                              "default": "Cancel"
                          },
                          "actionType": "CLOSE",
                          "action": ""
                      }
                  ]
              },
              "ios": {
                  "category": "CONFIRM_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