コンテンツにスキップ

シングルプッシュ

前提条件

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が無効な場合、送信されません

推奨事項

  • デバイスベースの識別子(did)の場合: マッピングされたAppIDを追加してください
  • アカウントベースの識別子(playerId)の場合: すべてのマッピングされたAppIDを追加してください
  • 様々な識別子が存在する場合: 識別子構造の優先順位を確認してください
String[] X
enableLocale 言語ロケールを適用するかどうか

    true

  • プッシュ受信者によって設定された言語でメッセージを送信します。トークン情報に保存された言語コードに基づきます
  • トークンを保存する際の言語を決定する基準
  • 1番目: ゲーム言語
  • 2番目: デバイス言語(ゲーム言語が提供されていない場合)

  • 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

識別子の例

    [
        {
            "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
コラプスキー プッシュ上書きを使用する際のキー値(数字の文字列:"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 = データメッセージのデフォルト優先度。デバイスがDozeモードでないときに通常は即座に配信されます。デバイスがスリープしている場合、バッテリーを節約するために遅延されることがあります。タイミングが重要でないメッセージに使用します。
  • HIGH = FCMは即座に配信しようとし、デバイスをDozeモードから起こすことがあります。ユーザーの操作が必要なメッセージに使用します。
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)デフォルト: CLOSE
CURLactionフィールドの値を使って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: [自動計算]
    
    
      {
          "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行で送信することをお勧めします。これにより、サーバーログをすぐに確認できます。

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