プッシュAPI¶
プッシュAPIを使うと、プッシュ通知をReproの管理画面からではなく、自社サービスのサーバーや、アプリなどお好きなところから配信できます。
はじめに¶
プッシュAPIを使うには、APIエンドポイントとプッシュ通知用の Repro API トークンを生成する必要があります。
API エンドポイントとRepro API トークンの取得¶
- マーケティング > プッシュ通知 に行き、 新しいプッシュ通知を作成する をクリックしてください。
- デフォルトの本文を設定します。
- APIを利用して配信 を選択してください。必要な場合は負荷分散機能をご利用ください。
- プッシュ通知を公開してください。
- 次のページでAPIエンドポイントと Repro API トークンが発行されます。
API経由でプッシュ通知を配信する¶
プッシュAPIはHTTPの POST
メソッドをうけつける単一のエンドポイントとひもづいています。
POST https://marketing.reproio.com/v1/push/<push_id>/deliver
認証¶
取得した Repro API トークンをHTTPヘッダーの X-Repro-Token
フィールドに設定してください。
単位時間あたりのアクセス上限¶
プッシュAPIには、単位時間当たりのアクセス制限があります。
- アクセス上限設定値は、APIトークンごとに1分あたり1000件です。
- リクエストが正常に完了すると、レスポンスの
X-RateLimit-Limit
ヘッダーに単位時間あたりのリクエスト上限回数が記載されます。 - リクエスト数がアクセス上限数を超えると、
HTTP Status 429 (Too Many Requests)
が返ります。
レスポンスヘッダーの詳細は プッシュAPIのレスポンス をご覧ください。
警告
アクセス上限設定値は予告なく変動する場合があります。
- アクセス上限設定値は、機能単位でのAPIトークンごととなります。例えば、プッシュAPIとユーザープロフィールAPIは同じAPIトークンを利用していますが、別機能のため同時にリクエストしたとしても、それぞれ1件づつのカウントとなります。
APIフォーマット¶
メッセージをHTTP bodyにJSONフォーマットでセットします。 メッセージは 3MB 以内となります。それ以上の場合は user_ids を分割して複数回リクエストを行なってください。ユーザーIDを15バイトとした場合、設定できるユーザー数の上限はおよそ20万件ほどになります。
{
"audience": {
"user_ids": [
"user-1234"
]
},
"notification": {
"message": "Hello!",
"sound": "default.wav"
}
}
メッセージ¶
notification
:下記の スタンダード 、 カスタム (JSON) のいずれかを含めます。 フィールドが指定されていない場合、管理画面で作成したデフォルトのメッセージが配信されます。
スタンダード形式¶
message
:通知メッセージの本文です。
deeplink_url
:ディープリンクもしくはURLを設定すると、エンドユーザーが通知をタップしたときにそのアドレスをSDKが自動的に開きます。ディープリンクを指定した場合、アプリ内の特定のページを開きます(アプリ側の実装が必要です)。URLを指定した場合、ブラウザでWebページを開きます。未指定の場合は、アプリを通常起動します。
- 文字列長
- 最大: 255文字
- 文字列長
sound
:iOSアプリのサウンドファイルを指定します。ファイル名が指定されていない場合は、iOSのシステムサウンドが使われます。
カスタム (JSON)¶
下記のパラメータを使用する場合は、両方同時に指定してください。
片方の OS にのみカスタムペイロードを送信する場合は、不要な方のパラメータを {}
(空のJSON) で指定してください。
custom_payload_ios
:iOS 向けの JSON 文字列を String で指定する必要があります。
custom_payload_android
:Android 向けの JSON 文字列を String で指定する必要があります。
バッジやサイレントプッシュ通知、カスタムペイロードなど、デフォルトのメッセージでは対応していない内容のメッセージを配信する場合はカスタム (JSON) 形式を選択してください。
注釈
- Android: カスタム (JSON) 形式のメッセージをアプリケーションで受信するには FirebaseMessagingServiceのonMessageReceivedを実装 する必要があります。
- Android: Android向けの JSON で "data" の中に含める key-value については、文字列のみ指定することができます。詳細については FCMのドキュメント をご確認ください。
詳しくはこちらの内容も参照ください。
配信の予約¶
schedule
: 配信時刻を指定します。 (optional)パラメータに時刻を指定することで、配信の予約を行うことができます。指定しない場合は即時に配信されます。 ISO8601 フォーマットに準拠した文字列のみセットできます。
スケジュールに指定できるのは1ヶ月先までです。
スケジュールの登録上限数は1時間あたり1000件です。この制限はAPIエンドポイントごとではなく、ひとつのアプリに設定されているすべてのAPIエンドポイント共通で適用されます。
{
"audience": {
"user_ids": [
"user-1234"
]
},
"notification": {
"message": "Hello!",
"sound": "default.wav"
},
"schedule": "2018-06-20T13:00:00+09:00"
}
例¶
1人のユーザーにメッセージを配信する¶
{
"audience": {
"user_ids": [
"user-1234"
]
},
"notification": {
"message": "Hello!",
"sound": "default.wav"
}
}
複数のユーザーにメッセージを配信する¶
{
"audience": {
"user_ids": [
"user-1234",
"user-5678"
]
},
"notification": {
"message": "Hello!",
"sound": "default.wav"
}
}
カスタムペイロードを使う¶
{
"audience": {
"user_ids": [
"user-1234"
]
},
"notification": {
"custom_payload_ios": "{\"aps\":{\"alert\":{\"title\":\"hello\",\"body\":\"world\"},\"badge\":1}}",
"custom_payload_android": "{\"data\":{\"rpr_title\":\"hello\",\"rpr_body\":\"world\"}}"
}
}
リッチ通知を送る¶
プッシュAPIを利用してリッチ通知を送る場合、カスタムペイロードにリッチ通知に必要な情報を以下のように記載してください。
{
"audience": {
"user_ids": [
"user-1234"
]
},
"notification": {
"custom_payload_ios": "{\"aps\": {\"alert\": {\"title\": \"YOUR_NOTIFICATION_TITLE\", \"body\": \"YOUR_NOTIFICATION_BODY\"}, \"mutable-content\": 1}, \"rpr_attachment\": {\"url\": \"IMAGE_URL\", \"type\": \"jpg\"}}",
"custom_payload_android": "{\"data\":{\"rpr_title\":\"YOUR_NOTIFICATION_TITLE\",\"rpr_body\":\"YOUR_NOTIFICATION_BODY\", \"rpr_picture\":\"{\\\"type\\\": \\\"jpg\\\",\\\"url\\\": \\\"IMAGE_URL\\\"}\"}}"
}
}
注釈
リッチ通知を表示させるには、あらかじめ リッチ通知の受信準備の実装 がアプリ側で行われている必要があります。
cURLを使ってプッシュ通知を配信する¶
curl https://marketing.reproio.com/v1/push/xxxx/deliver \
--verbose \
--request POST \
--header "X-Repro-Token: MARKETING-TOKEN" \
--header "Accept: application/json" \
--header "Content-Type: application/json" \
--data-binary '{"audience": { "user_ids": ["user-1234", "user-5678"]}}'
警告
エンドポイントのドメインが repro.io から reproio.com に変更されます。 旧ドメインも引き続きご利用頂けますが、なるべく新しいドメインをご利用ください。
管理画面から通知を配信する¶
プッシュAPIを管理画面から使うこともできます。これは、開発者の助けを借りずにマーケター自身でキャンペーンを打つための機能です。
この機能には下記の制限があります。ご注意ください。
- 配信されるメッセージは通知の作成画面で設定したものです。
- 配信対象ユーザーは下記に示すフォーマットの、ユーザーIDのリストで指定する必要があります。
- 文字コード: UTF8
- 改行コード: LF または CRLF
- ファイルサイズ: 3MBまで
- ファイルフォーマット:
user-1234
user-5678
プッシュAPIのリクエスト¶
リクエストヘッダー
リクエストのヘッダーには、以下の値を設定します。
ヘッダー | 説明 | 必須 |
---|---|---|
Content-Type | application/jsonを指定します。 | 必須 |
X-Repro-Token | API エンドポイントとRepro API トークンの取得 で取得したトークンを指定します。 | 必須 |
リクエストボディ
メッセージをJSONフォーマットで設定します。
プッシュAPIのレスポンス¶
レスポンスヘッダー
レスポンスのヘッダーには、以下の値が含まれます。
ステータス | ヘッダー | 説明 |
---|---|---|
正常 | X-RateLimit-Limit |
単位時間あたりのアクセス上限 |
正常 | X-RateLimit-Remaining |
アクセスできる残り回数 |
正常 | X-RateLimit-Reset |
アクセス数がリセットされる時刻(unixtime) |
リクエスト制限 | Retry-After |
再実行可能になるまでの秒数 |
レスポンスボディ
プッシュAPIをコールした際の、レスポンスに含まれるステータスコードとエラーメッセージの一覧は下記になります。
401 Unauthorized¶
Repro API トークンが指定されていません。
レスポンスボディ:
{
"status": "unauthorized",
"error": {
"messages": [
"Please include your Repro API Token as \"X-Repro-Token\" HTTP header."
]
}
}
403 Forbidden¶
指定した Repro API トークンが間違っています。
レスポンスボディ:
{
"status": "forbidden",
"error": {
"messages": [
"Please check your Repro API Token as \"X-Repro-Token\" HTTP header."
]
}
}
404 Not Found¶
エンドポイントが存在しません。
レスポンスボディ:
{
"status": "not_found",
"error": {
"messages": [
"Not found."
]
}
}
422 Unprocessable Entity¶
指定したパラメータが間違っています。
レスポンスボディ:
{
"status": "unprocessable_entity",
"error": {
"messages": [
"audience is missing",
"audience[user_ids] is missing"
]
}
}
413 Payload Too Large¶
リクエストの内容が大きすぎます。
レスポンスボディ:
{
"status": "payload_too_large",
"error": {
"messages": [
"client intended to send too large body"
]
}
}
429 Too Many Requests¶
リクエスト数が多すぎます。 Retry-After
ヘッダーに記載された秒数待った後、リクエストを再開してください。
レスポンスボディ:
{
"status": "too_many_requests",
"error": {
"messages": [
"Too many requests hit the API too quickly."
]
}
}