iOS端末にプッシュ配信するCLIツールを作った

Icon

70_10

pusherという iOS 端末にプッシュ配信を行うツールを作りました。
使い方や作った背景などをまとめます。

どういうツールなのか

iOS 端末にプッシュ配信をする、Go 言語製の CLI ツールです。
このツールでできるのは、自分で定義した payload を指定の端末にプッシュすることです。
証明書ファイルの生成やデバイストークンの取得など、プッシュ配信に必要なものは事前に揃えておきます。

使い方

インストール

go getでインストールします。

$ go get github.com/70-10/pusher

config ファイルの設定

プッシュ配信をする際に必要な設定を、~/.config/pusher/config.tomlに設定します。

config.toml の設定はサブコマンドの config から行えます。

$ pusher config

設定する値について

p12 = "/path/to/file.p12"
password = ""
devicetoken = ""
topic = ""
payload = "/Users/your_name/.config/pusher/payload.json"
env = "production"

config.tomlの中身

設定値内容
p12プッシュ配信を行うための証明書のパス。p12 形式。
password証明書のパスワード
devicetokenプッシュを配信する iOS 端末のデバイストークン
topicプッシュ通知のトピック。アプリの Bundle ID を設定すれば OK
payloadpayload.jsonのパス
envAPNs の環境(Production or Sandbox)

payload.json の設定

配信する内容を~/.config/pusher/payload.jsonに設定します。
設定はサブコマンドの payload から行えます。

$ pusher config

以下の JSON がデフォルト値として設定されています。
※設定値の詳細はApple のドキュメントを参照してください。

{
  "aps": {
    "alert": "Alert",
    "badge": 10,
    "sound": "sound-file"
  },
  "custom-key": "custom-value"
}

プッシュの配信

プッシュのコマンドを実行するのみです。

$ pusher push

開発の背景

新 OS の検証やアプリの動作確認をする際は、いつもプッシュサービスを使ってプッシュ配信を行っています。
プッシュ配信が届かない場合、以下のように原因切り分けで 3 つ目の選択肢が増えてしまいます。

  1. プッシュを受信するアプリ(または端末、OS)がおかしい
  • APNs から端末へプッシュするところがおかしい
  • プッシュサービスから APNs へのリクエストがおかしい

プッシュサービスが自前でない限り、ブラックボックスが 2 つ(プッシュサービスと APNs)になり、問題箇所がかなり見つけづらくなります。
問題箇所が特定しづらくなるのを少しでも軽減するために、このツールを作りました。
(自分が作ったツールであれば、ツールに問題があっても調査がしやすいはず)

また、同じ payload 設定のプッシュを手軽にできるようにするというのも目的でした。
(Web からは毎回手動で項目を埋める必要がありました)

今後のこと

APNs のトークン認証や Android のプッシュ配信など、追加したい機能を時間を見つけて対応していきたいです。