メルカリのプッシュ配信システムGaurun(オープンソース)を使ってプッシュ送信環境を構築する方法

スマホアプリへのプッシュ配信システムって色々ありますよね。よくあるのはSDKをアプリに組み込んで、Web上のダッシュボードからプッシュを一斉配信とかはよくみかける仕組みです。Googleの提供するFirebaseとかを使えば比較的簡単にプッシュ送信ができるようですが、iOS/Android両方のアプリを運用していたりしてSDKを入れ直すことができない状況とかもあると思います。そういうときはメルカリの提供するOSSのGaurun(ガウルンと読む?)を使うと、比較的簡単にプッシュサーバを構築することができるのでおすすめです。

Gaurunとは

Gaurun is a general push notification server written in Golang. It proxies push requests to APNs and GCM/FCM and asynchronously executes them via HTTP/2.

https://github.com/mercari/gaurun

こうあるように、AppleのプッシュシステムであるAPNsとGoogleのプッシュシステムであるGCM/FCMに対して非同期でプッシュ送信を行うことのできるプロダクトです。Goで書かれているようです。自前でバッチ作ってもここまでのパフォーマンスを出すことは難しいと思うので、こういうときは優れたプロダクトにお世話になるのがセオリーですね。

インストール手順

基本的にはインストールしてmakeすれば使えます。

iOS用のpemファイルを配置します

KEYファイルとCSRファイルが必要です。このあたりの証明書ファイルの作成方法はかなり厄介なので割愛します。必要な方は下記ページなどを参照して作ってみてください。
http://d.hatena.ne.jp/samril/20130902/1378198909

設定ファイルの編集

基本的にデフォルト設定で問題ないと思いますが、Androidのapikeyには、googleから取得したkeyを設定します。
またiOSのtopicにはアプリで使っているbundleIdを設定すれば問題なさそうです。

起動方法

こういう感じに使います。

通常バックグラウンド実行することのが多そうですね。

プッシュ配信の方法

curlから実行できます。localhostの1056ポート(デフォルト)に対して以下のフォーマットでリクエストするとプッシュが飛びます。なおtokenには配信対象のデバイストークンが必要です。

詳しい仕様はgithubに書いてあるので参照してください。
https://github.com/mercari/gaurun/blob/master/SPEC.md#post-push

プッシュのエラーが起こったら

まず一発でうまくいくことなんでそうそうないので、うまくいかなかったらログをみましょう。エラーコードをみれば大体の問題は解決できるはず。Appleのページにまとまっています。Androidの方も適宜調べればわかるはず。
https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/CommunicatingwithAPNs.html

実際の使い方の例

私の場合一斉配信というよりかは、アプリユーザ間のプッシュ処理を行うのにバッチと連携させて使っています。定期実行するバッチからプッシュ配信を管理するレコードを呼び出し、配信対象のデバイストークンを取得、gaurunに対してリクエストを送るようにしています。非常に高速に動作するので快適ですね。

ApnsPHPとかと比較するとバッチ実行しても非同期で処理されるので使い勝手がよいと思います。こういう優れたプロダクトを開発してくれるエンジニアに感謝の念が絶えません!やっぱメルカリすごい。

2件のコメント

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です