单次推送
先決條件¶
要與單一推送 API 同步,請確保發出授權令牌(API KEY)。如果您已經擁有該密鑰,請要求額外的權限。請參考 Hive 伺服器 API > 通知 > 推送 v4 > 認證 以檢查如何請求和發出授權令牌。
Note
單一 Puch API 是非同步的,並按順序處理,API 請求 > 令牌查找 > 發送。
- API 請求:驗證請求數據並返回請求的響應代碼。
- Token 查詢:查詢請求數據的推送令牌。可能會出現沒有令牌的情況。
- 發送:將數據傳輸到各市場的推送伺服器(例如 ADM、APNS、FCM)。從市場收到的響應顯示處理結果。
- 當在令牌查詢和發送步驟中處理失敗時,不會將響應傳輸給調用推送伺服器的客戶端。 如果您在發送數據後 10 分鐘內未收到推送,請聯繫 解決方案架構師團隊,Com2uS 平台。
依環境訪問 URL¶
伺服器 | URL |
---|---|
生產環境 | https://notification.withhive.com |
沙盒環境 | https://sandbox-notification.withhive.com |
基本信息和请求参数¶
方法 | POST | ||||
---|---|---|---|---|---|
網址 | /push/send | ||||
區段 | 欄位名稱 | 描述 | 類型 | 必填 | |
標頭 | Content-Type | application/json;charset=utf-8 | |||
Authorization | bearer {{API KEY}} | ||||
主體 | notice | 是否設置為通知警報(默認:false )
true false 同意項目包括通知警報和夜間警報 | 布林值 | O | |
identifiers | 識別符信息(最多100個)識別符結構和示例可以在下面找到 | identifier[] | O | ||
game | gameid | 遊戲ID | 字串 | O | |
appids | AppID 列表 如果映射到标识符的 AppID 无效,则不会发送 建议
| String[] | X | ||
enableLocale | 是否应用语言区域
true false | Boolean | O | ||
payload | single | 如果 enableLocale=false ,请求单个字段。 消息结构 如下。 | Message | O | |
defaultLanguage | 如果 enableLocale=true ,设置为默认语言 | String | |||
locale {{LANGUAGE}} | 如果 enableLocale=true ,通过区域字段设置。与单个字段中的消息信息相同 | Message | |||
option | 选项信息 如下 | Option | X | ||
actionInfo | android | ActionPayload 信息 如下 | ActionPayload | X | |
ios | ActionPayload 信息 如下 | ActionPayload | X |
Note
- 為了順利接收單次推送,建議在 appids 和 identifiers 欄位中僅輸入一個數據項目。
- 如果請求中包含多個 identifiers 或 appids,可能會導致推送交付延遲,因為無法指定搜索條件。
- 建議指定優先級最高的標識符值,並避免僅配置 did 值的標識符。
- 避免在遊戲欄位中僅指定 gameid 的請求。
- 如果 appids 欄位中沒有數據,則會搜索所有包含在 gameid 中的 appids,這可能會導致推送交付延遲。
識別符結構¶
區段 | 欄位名稱 | 描述 | 類型 | 必填 | |
---|---|---|---|---|---|
identifier | identifier | 至少必須包含兩者之一 優先順序:playerId,然後是did | 長整數 | O | |
playerId | |||||
did |
標識範例¶
訊息結構¶
區段 | 欄位名稱 | 描述 | 類型 | 必需 | |
---|---|---|---|---|---|
訊息 | 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) | 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://.... 如果 actionType 為CURL ,則為必填項。 | 字串 | 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": "確定" }, "actionType": "CURL", "action": "https://examplecurl.com" }, { "titles": { "default": "取消" }, "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": "OK", "en": "OK", "ko": "확인" }, "actionType": "CURL", "action": "https://examplecurl.com" }, { "titles": { "default": "Cancel", "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
建議將請求數據以單行發送,無需換行,以便立即檢查伺服器日誌。
- 回應