シングルプッシュ
前提条件¶
Single Push APIと同期するには、認証トークン(API KEY)を発行する必要があります。すでにキーをお持ちの場合は、追加の権限をリクエストしてください。認証トークンのリクエストと発行方法については、Hive Server API > Notification > Push v4 > Authenticationを参照してください。
Note
シングルプッシュAPIは非同期であり、次のように処理されます: APIリクエスト > トークンルックアップ > 送信。
- APIリクエスト: リクエストデータを検証し、リクエストに対するレスポンスコードを返します。
- トークンルックアップ: リクエストデータに対するプッシュトークンを検索します。トークンがない状況もあり得ます。
- 送信: 各マーケットのプッシュサーバー(ADM、APNS、FCM、Facebookなど)にデータを転送します。マーケットから受け取ったレスポンスは処理結果を示します。
- トークンルックアップと送信のステップで処理が失敗した場合、プッシュサーバーを呼び出したクライアントにレスポンスは転送されません。データを送信してから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 false 発表および夜間通知は、ユーザーの同意を得るために必要な項目です。
| Boolean | O | |
identifiers | 識別子情報(最大100)識別子構造および例を確認してください。 | identifier[] | O | ||
ゲーム | gameid | ゲームID | String | O | |
appids | AppIDのリスト マッピングされたAppIDが無効な場合は何も送信されません。 推奨事項
| String[] | X | ||
enableLocale | 各言語のロケールを有効にするかどうか
true
false | Boolean | O | ||
ペイロード | single | enableLocale=false の場合の単一フィールドへのリクエストメッセージ構造を確認してください。 | メッセージ | O | |
defaultLanguage | enableLocale=true の場合のデフォルト言語の値を設定します。 | String | |||
locale {{LANGUAGE}} | enableLocale=true の場合のロケールフィールドの値を設定します。単一フィールドのメッセージ情報と同じデータです。 | メッセージ | |||
option | オプション情報を参照してください。 | オプション | X |
Note
- 適切な単一プッシュ受信のためには、appidsおよびidentifiersフィールドには1つのデータのみを入力することをお勧めします。
- 検索条件を指定できないため、リクエストに複数のidentifiersおよびappidsが含まれている場合、プッシュ配信が遅れる可能性があります。
- identifier値には優先度の高い値を指定することをお勧めし、did値のみでidentifierを構成することは避けてください。
- gameフィールドにgameidのみが指定されたリクエストは避けるべきです。
- gameidに含まれるすべてのappidsが検索されるため、appidsフィールドに情報がない場合、プッシュ配信が遅れる可能性があります。
- optionフィールドはFacebookには適用されません。
識別子の構造¶
区分 | フィールド名 | 説明 | タイプ | 必須 | |
---|---|---|---|---|---|
識別子 | 識別子 | playerId | 4つの識別子のうちの1つを含める必要があります。優先順位はplayerId、vid、uid、didの順です。 | 長整数 | O |
vid | |||||
uid | |||||
did |
識別子の例¶
メッセージ構造¶
iostitleタイトル文字列Ofacebooktitleタイトル (1~30文字以内)文字列O
部門 | フィールド名 | 説明 | タイプ | 必須 | |
---|---|---|---|---|---|
メッセージ | android | タイトル | タイトル | 文字列 | O |
メッセージ | メッセージ | 文字列 | O | ||
展開メッセージ | 展開されたメッセージ | 文字列 | O | ||
画像URL | 画像のURL | 文字列 | X | ||
ティッカー | ティッカー | 文字列 | X | ||
要約テキスト | 要約されたメッセージ | 文字列 | X | ||
メッセージ | メッセージ | 文字列 | O | ||
メディアURL | 画像パス | 文字列 | X | ||
本文 | 本文(10〜180文字以内) | 文字列 | O | ||
メディア | 画像のURL | 文字列 | O |
オプション情報¶
カテゴリ | フィールド名 | 説明 | タイプ | 必須 | |
---|---|---|---|---|---|
オプション | badge | プッシュ通知を受信したときにアプリアイコンに表示される数値(デフォルト: 1) | 整数 | X | |
overwrite | Androidでプッシュ上書き機能を使用するかどうか(デフォルト: false) | ブール値 | X | ||
collapseKey | プッシュ上書き機能が有効なときに使用されるキー値(数値の文字列形式: "123") | 文字列 | X | ||
engagement | ユーザーエンゲージメント | 文字列 | X | ||
comment | テキスト | 文字列 | X | ||
groupKey | これは、iOSおよびAndroidデバイスで受信した通知をグループ化するために使用されるグループキーの値です。デバイスOSに設定された通知オプションは、デフォルトで適用されます。オプションの詳細については、以下の文書を参照してください。 | String | X | ||
android | アイコン | ユーザーのデバイスにプッシュ通知が受信されたときに表示されるアイコン画像のファイル名。この画像ファイルは/src/main/res/drawableに存在する必要があります。サポートされている画像ファイル形式はこちらで確認できます。 ウェブから画像を表示したい場合は、ファイル名の代わりにこのフィールドに画像のURLを入力してください。このフィールドが空の場合、アプリアイコン画像が表示されます。 | 文字列 | X | |
サウンド | ユーザーのデバイスにプッシュ通知が受信されたときに再生される通知音のファイル名。アプリバンドルに含まれるサウンドファイルを指定でき、サウンドファイルは/src/main/res/rawに存在する必要があります。このフィールドが空の場合、システムのデフォルトサウンドが使用されます。 | 文字列 | X | ||
優先度 | Androidデバイスに送信されるメッセージの優先度。この優先度はメッセージ配信のタイミングを制御し、FCMの概念です。NORMALまたはHIGHの値を持ち、デフォルトはNORMALです。詳細については、Firebaseガイドを参照してください。
| enum(NORMAL, HIGH) | X | ||
ios | sound | プッシュ通知がユーザーのデバイスに受信されたときに再生される通知音のファイル名。この音声ファイルはアプリコンテナのLibrary/Soundsまたはメインアプリバンドルに存在する必要があります。このフィールドが空の場合、自動的に「default」に設定され、ユーザーのAppleデバイスでのシステムデフォルト音が使用されます。 | String | X |
出力結果¶
部門 | フィールド名 | 説明 |
---|---|---|
ヘッダー | コンテンツタイプ | application/json;charset=utf-8 |
UUID | {{UUID}} | |
本文 | - | 成功した場合、本文は空です |
応答ステートコード¶
キー | 値 | 説明 |
---|---|---|
200 | 成功 | (ボディは空です。) |
400 | 不正なリクエスト | POSTデータが省略されています。JSON形式エラー必須要素が省略されているか無効です。 |
401 | 認証されていません | リクエストメッセージのAuthorizationヘッダーが省略されているか無効です。Authorizationキー(API KEY)が登録されていません。関連APIへのアクセス権がありません。 |
403 | 禁止されています | Authorizationヘッダーの認証方式が「Bearer」ではありません。(Bearerのみサポート) |
404 | 見つかりません | リクエストURLが間違っています。 |
500 | サーバー内部エラー | サーバー上の内部エラー |
502 | 不正なゲートウェイ | プッシュゲートウェイサーバーが過負荷です。ネットワーク接続が誤っています。 |
503 | サービス利用不可 | APIサーバーまたは認証サーバーがフリーズしています。 |
サンプルコード¶
-
Call ("enableLocale":false)
curl -L -v > -d '{"notice":false,"identifiers":[{"vid":19239,"did":300010915}],"game":{"gameid":"com.com2us.hivesdk","appids":["com.com2us.hivesdk.normal.freefull.google.global.android.common"]},"enableLocale":false,"payload":{"single":{"android":{"title":"TEST","message":"TEST","messageExpanded":"","imageUrl":"","ticker":"","summaryText":""},"ios":{"title":"","message":"","mediaUrl":""},"facebook":{"title":"TEST", "body":"TEST MESSAGE BODY", "media": "https://image.newdaily.co.kr/site/data/img/2022/05/13/2022051300019_0.jpg"}},"option":{"badge":"1","overwrite":false,"collapseKey":"","engagement":"","groupKey": "", "android":{"icon":"","sound":"", "priority": "normal"},"ios":{"sound":""}}}}' > -d '{"notice":false,"identifiers":[{"vid":19239,"did":300010915}],"game":{"gameid":"com.com2us.hivesdk","appids":["com.com2us.hivesdk.normal.freefull.google.global.android.common"]},"enableLocale":false,"payload":{"single":{"android":{"title":"TEST","message":"TEST","messageExpanded":"","imageUrl":"","ticker":"","summaryText":""},"ios":{"title":"","message":"","mediaUrl":""},"facebook":{"title":"TEST", "body":"TEST MESSAGE BODY", "media": "https://image.newdaily.co.kr/site/data/img/2022/05/13/2022051300019_0.jpg"}},"option":{"badge":"1","overwrite":false,"collapseKey":"","engagement":"","groupKey": "", "android":{"icon":"","sound":"", "priority": "normal"},"ios":{"sound":""}}}}' > -H "Content-Type: application/json" > -H "Authorization: Bearer {API KEY}" > https://sandbox-notification.qpyou.cn/push/send
-
コール ("enableLocale":true)
{ "notice": false, "identifiers": [ { "playerId": 30000028045 } ], "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": "test_Korean_title", "message": "test_Korean_message" }, "ios": { "title": "test_Korean_title", "message": "test_Korean_message" }, "facebook": { "title": "test_Korean_title", "body": "test_Korean_message", "media": "https://image.newdaily.co.kr/site/data/img/2022/05/13/2022051300019_0.jpg" } }, "en": { "android": { "title": "test_English title", "message": "test_English message" }, "ios": { "title": "test_English title", "message": "test_English message" }, "facebook": { "title": "test_English title", "body": "test_English message", "media": "https://image.newdaily.co.kr/site/data/img/2022/05/13/2022051300019_0.jpg" } } }, "option": { "badge": 1, "overwrite": true, "collapseKey": "99", "groupKey: "", "android": { "icon": "GoogleIcon", "sound": "GoogleSound", "priority": "normal" }, "ios": { "sound": "AppleSound" } } } }
Note
サーバーがログをすぐに確認できるように、スペースを空けずに連続してコールデータを送信することをお勧めします。
- リクエスト
> POST /push/send HTTP/1.1
> User-Agent: curl/7.29.0
> Host: sandbox-notification.qpyou.cn
> Accept: */*
> Content-Type: application/json
> Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpYXQiOjE1NDE1NzMyOTcsImp0aSI6ImFkbWluaXN0cmF0b3IifQ.23nG9RnbuOwnMbRSebBi2i-Qt_fOfqU_vUKUZ2JJlWU
> Content-Length: 502
- 応答