シングルプッシュ
前提条件¶
Single Push APIと同期するには、認証トークン(API KEY)を発行する必要があります。すでにキーを持っている場合は、追加の権限をリクエストしてください。認証トークンのリクエストと発行方法については、Hive Server API > Notification > Push v4 > Authenticationを参照してください。
Note
シングルプッシュ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: ゲームアラート(必須の運用アラート)として送信されます。通知を受け取ることに同意しているかどうかに関係なく送信されます。※ デバイス/OSレベルで通知がブロックされている場合、通知設定に関係なくアラートが配信されない場合があります。 | Boolean | O | |
| identifiers | 識別子情報(最大100)識別子構造および例は以下にあります。 | identifier[] | O | ||
| game | gameid | ゲームID | String | 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 |
お知らせアラートワークフロー¶
お知らせアラートは、それを受け取ることに同意したゲームアプリのユーザーにのみ送信されます。お知らせアラートが21:00~08:00の間に送信される場合、夜間アラートの追加の同意が必要です。
通知アラートワークフローの詳細は以下の通りです:
- ユーザーが通知アラートを受け取ることに同意しない場合、通知として設定されたすべてのメッセージは送信されません。
- 通知アラートを受け取ることに同意したユーザーのみが、夜間アラートの同意を与えることができます。
Warning
韓国ユーザーへの広告通知アラートに関する規則
韓国のユーザーに通知アラートを送信する際、それは広告アラートと見なされ、「情報通信網法」第50条に準拠する必要があります。広告アラートメッセージには、広告であることを示すフレーズと、オプトアウトの手順を含める必要があります。
- 広告警告メッセージの例: (広告) {message_body} (オプトアウト: 設定で変更)
Note
- スムーズな単一プッシュ受信のためには、appidsおよびidentifiersフィールドには1つのデータ項目のみを入力することを推奨します。
- リクエストに複数のidentifiersまたはappidsが含まれている場合、検索条件を指定できないため、プッシュ配信に遅延が生じる可能性があります。
- 最優先のidentifier値を指定し、did値のみのidentifierの設定は避けることを推奨します。
- gameフィールドにgameidのみが指定されているリクエストは避けてください。
- appidsフィールドにデータがない場合、gameidに含まれるすべてのappidsが検索されるため、プッシュ配信に遅延が生じる可能性があります。
識別子の構造¶
| セクション | フィールド名 | 説明 | タイプ | 必須 | |
|---|---|---|---|---|---|
| identifier | identifier | 2つのうち少なくとも1つを含める必要があります 優先順位: playerId、次に did | Long | 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 | ||
| コラプスキー | プッシュ上書きを使用する際のキー値(数字の文字列:"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ガイドを参照してください。
| enum(NORMAL, HIGH) | X | ||
| ios | サウンド | プッシュ通知がユーザーのデバイスに表示されるときに再生するサウンドファイルの名前。サウンドファイルはアプリコンテナのLibrary/Soundsまたはメインバンドルに存在する必要があります。空の場合は「default」が使用され、システムのデフォルトサウンドが再生されます。 | 文字列 | X | |
ActionPayload¶
ActionPayloadは、シングルプッシュAPIの追加機能であるプッシュアクションボタンを使用する際に配信されるデータ形式です。
プッシュアクションボタンは、SDKで利用可能な通知機能であり、プッシュ通知を長押しするとシステムボタンとして表示されます。
プッシュアクションボタンの詳細については、以下のガイドを参照してください。
Warning
プッシュアクションボタンを使用する際は、以下の点にご注意ください:
- SDK Android & iOS 4.25.5.0以上でのみ利用可能です。
identifiersフィールドには1つのidentifierのみが有効で、playerIdが必要です。- 開発者はプッシュアクションボタンによって呼び出されるURLのセキュリティ検証に責任を持ちます。
ActionPayload データ構造¶
シングルプッシュAPIをリクエストする際、ActionPayloadに含まれるデータは次のとおりです。
| フィールド名 | 説明 | タイプ | 必須 |
|---|---|---|---|
| category | プッシュアクションボタンセットのカテゴリ識別子で、セットを識別するために使用されます。Hive SDKはデフォルトのプッシュアクションボタンセットを提供します。デフォルトのプッシュアクションボタンセットを参照 カテゴリの詳細については、Apple開発者サイトを参照してください。 iOS: 必須, Android: 任意で無視されます | 文字列 | O iOS X Android |
| actions | プッシュ通知に表示するシステムボタンのリスト (Android: 最大3 / iOS: プッシュアクションボタンセットに依存) 以下のアクション情報を参照 | Action[] | O |
アクション¶
アクションは、ActionPayload内の各システムボタンのデータです。アクションに含まれるパラメータは以下の通りです。
| フィールド名 | 説明 | タイプ | 必須 |
|---|---|---|---|
| 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: [自動計算] { "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": "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
リクエストデータは改行なしの1行で送信することをお勧めします。これにより、サーバーログをすぐに確認できます。
- 応答