
BoltzEngine RPC インターフェイス
BoltzEngine が持つ RPC インターフェイスについて解説します。
インターフェイスの種類
BoltzEngine は gRPC と Go 言語の net/rpc インターフェイスを持ち、それぞれのメソッドを呼び出して動作します。RPC インターフェイスは、通常 BoltzEngine Master サービスが起動しているサーバーの 13009 ポート(gRPC) と 13010 ポート(net/rpc)で動作しています。
JSON-RPC を使用した BoltzEngine の呼び出しは、BoltzEngine v1.1 - v3.0 の間でサポートされていましたが、v3.1 以降では廃止されました。
gRPC
gRPC は Go, Java, Python, Ruby, PHP など複数の言語で利用可能な RPC フレームワークです。Protocol Buffers で記述された定義から各種言語のコードを生成し、それを使ってサーバとの通信を行います。
実装言語により詳細は異なりますが、基本となる処理の流れは同一です。ここでは Go を使った呼び出しを例示します。
|
|
Send メソッドから返却された stream から、通知時に発生したエラーをトークン毎に取得できます。 すべての通知を送り、発生したエラーをすべて取得し終わると、stream は EOF に到達します。
net/rpc
Go 言語で net/rpc パッケージ使用する場合、rpc.Dial で BoltzEngine と接続します。 その後、Call または Go メソッドの第1引数でサービスメソッドを指定して呼び出します。
|
|
gRPC メソッド一覧
BoltzEngine の gRPC インターフェイスが提供するメソッドについて、概要と使用方法について解説します。 メッセージオブジェクトの詳細は Protocol Buffers の定義または生成されたコードを参照ください。
以下の説明の中で、トークンとある表現は、BoltzEngine gRPC サービスで扱う形のトークンを意味します。 APNs のトークンは16進エンコーディングで文字列にして、その先頭に"1"を加えてください。 また、FCM の登録 ID (Registration ID)はそのまま、先頭に"2"を加えてください。
同じように、gRPC サービスから返却されるトークンも、同様のルールにより符号化されています。
FetchStatistics
BoltzEngine クラスタの状況を取得します。
- 導入バージョン:BoltzEngine v2.0
- リクエストオブジェクト:StatisticsQuery
- レスポンスオブジェクト:MasterStatistics
|
|
Send
APNs/FCM/WebPush/ADM などのプラットフォームへメッセージを送信します。 メソッドの戻り値としてストリームを返し、ストリームからは通知の結果なんらかの処理が必要になったトークンと理由(イベント)を取得できます。 何もエラーがなければストリームはすぐに EOF を返します。
ストリームから取得できる Event
は、
- 通知は成功したがトークンが更新された:
TokenRenewal
- FCM Legacy HTTP, FCM Legacy XMPP, ADMのみ発生
- 通知が失敗した:
DeliveryFailure
の2通り存在します。TokenRenewal
の場合は、次回からは更新後のトークンを使わなければなりません。
また、DeliveryFailure
の場合は
- 通信状況等の一時的なエラー:
FailureKind_TEMPORARY_ERROR
- 無効なトークン:
FailureKind_INVALID_TOKEN
- メッセージに不備がある:
FailureKind_INVALID_PAYLOAD
の3種類に分かれます。
- 導入バージョン:BoltzEngine v2.0
- リクエストオブジェクト:Message
- レスポンスオブジェクト:Event ストリーム
|
|
FetchFeedback [非推奨]
この方式は現在非推奨です。
Apple より APNs の legacy I/F ( binary I/F ) が 2020 年 11 月以降に廃止されることが告知されております。
Apple Push Notification Serviceのアップデート
追記
Apple より廃止期限が 2021 年 3 月 31 日に延長される旨が告知されています。
APNs Provider APIの期限の変更
APNs のフィードバックサービスから無効になったトークンを取得します。
- 導入バージョン:BoltzEngine v2.0
- リクエストオブジェクト:apns.Header
- レスポンスオブジェクト:UnavailableTokenEvent ストリーム
|
|
net/rpc メソッド一覧
BoltzEngine の RPC インターフェイスが提供するメソッドについて、概要と使用方法について解説します。
net/rpc で呼び出す際は、Call または Go メソッドの第1引数に文字列でメソッド名を指定、第2引数にリクエストオブジェクト、第3引数にレスポンスオブジェクトの戻り先の変数の参照を渡します。
BoltzEngine.BroadcastMessagesToAPNs
APNs へメッセージを送信します。これは Request.Addr
の値が http:// または https:// の場合は APNs HTTP/2 プロトコルを使って通知を行います。
host:port 形式の場合は Binary プロトコルを利用しますが、2020-11 以降 Apple より廃止が宣言されていますのでご注意ください。
Messages の内容は、APNs Notification format(Command=2)の Frame data で定義されている項目と一致します。
- 導入バージョン:BoltzEngine v1.0
- リクエストオブジェクト:apns.Request
- レスポンスオブジェクト:apns.Response
net/rpc
|
|
BoltzEngine.ReceiveFeedbackFromAPNs [非推奨]
この方式は現在非推奨です。
Apple より APNs の legacy I/F ( binary I/F ) が 2020 年 11 月以降に廃止されることが告知されております。
Apple Push Notification Serviceのアップデート
追記
Apple より廃止期限が 2021 年 3 月 31 日に延長される旨が告知されています。
APNs Provider APIの期限の変更
APNs のフィードバックサービスへアクセスし、無効になったトークンの一覧を取得します。このメソッドは Binary プロトコルでのみ有効です。 Body の内容は、APNs Feedback Service で定義されている項目と一致します。
- 導入バージョン:BoltzEngine v1.0
- リクエストオブジェクト:apns.FBRequest
- レスポンスオブジェクト:apns.FBResponse
net/rpc
|
|
BoltzEngine.BroadcastMessagesToGCM(HTTP)
FCM へのリクエストは、HTTP・XMPP・HTTP v1 の 3 通り存在します。
gcm.Request
の URL
によって、どのプロトコルを利用するかが変わります。
- http:// または https:// で開始し /v1/ を 含む 場合は HTTP v1 API
- http:// または **https://*8 で開始し /v1/ を 含まない 場合は Legacy HTTP
- host:port 形式の場合は Legacy XMPP
このメソッドは、HTTP v1 API または Legacy HTTP の場合に利用します。
Messages の内容は、FCM-HTTP リクエストフォーマットで定義されている項目とおおよそ一致しますが、
上記3つのうちどれを利用するかによって、利用可能なフィールドは一部異なります。
例えば HTTP v1 API の場合は Message.To
フィールドを参照しますが、Legacy HTTP の場合は Message.RegIDs
フィールドを参照します。
制限事項:Message 各個の RegIDs には 1000 個までのレジストレーション ID を含むことができます。
- 導入バージョン:BoltzEngine v1.0
- リクエストオブジェクト:gcm.Request
- レスポンスオブジェクト:gcm.Response
net/rpc
|
|
BoltzEngine.BroadcastMessagesToGCM(XMPP)
FCM へのリクエストは、HTTP・XMPP・HTTP v1 の 3 通り存在します。
gcm.Request
の URL
によって、どのプロトコルを利用するかが変わります。
- http:// または https:// で開始し /v1/ を 含む 場合は HTTP v1 API
- http:// または **https://*8 で開始し /v1/ を 含まない 場合は Legacy HTTP
- host:port 形式の場合は Legacy XMPP
このメソッドは、Legacy XMPP の場合に利用します。
Messages の内容は、FCM-XMPP リクエストフォーマットで定義されている項目と一致します。RegIDs
と To
の2つを定義していますが、Legacy XMPP プロトコルを使う場合は To
を利用する必要があります。
- 導入バージョン:BoltzEngine v2.1
- リクエストオブジェクト:gcm.Request
- レスポンスオブジェクト:gcm.Response
net/rpc
|
|
BoltzEngine.BroadcastMessagesToADM
net/rpc では、ADM への通知はサポートしていません。
BoltzEngine.BroadcastMessagesToWebPush
WebPush へメッセージを送信します。 Messages の内容は、WebPush 仕様 (RFC 8030) の Requesting Push Message Delivery で定義されている項目と一致します。
- 導入バージョン:BoltzEngine v2.2
- リクエストオブジェクト:webpush.Request
- レスポンスオブジェクト:webpush.Response
net/rpc
|
|
BoltzEngine.QueryActivities
BoltzEngine の性能情報を取得します。引数には空文字列を指定します。
- 導入バージョン:BoltzEngine v1.0
- リクエストオブジェクト:string
- レスポンスオブジェクト:boltz.MasterActivity
net/rpc
|
|