宗教上の理由でAndroid端末を持っていなかったのですが、Kindle Fire(第5世代)が手に入りましたので、push通知を確認してみました。
公式ドキュメントの記述も結構分散しているので、簡単にまとめておきます。
需要があるか正直わかりませんが、皆様の世知辛いMattermost生活の一助になれば幸いです。
はじめに
Mattermost(v2.1.0)のpush通知は以下の2パターンを想定しているようです。
http://docs.mattermost.com/deployment/push.html#configuration-options-for-push-notifications
A. 自分でビルドしたiOS/Androidアプリと、自分で設置したpush通知サーバ(push-proxy)を利用
- iOS端末
2. APNs証明書を取得
3. 1.を使ってpush通知が使えるようにmattermost/iosをビルド
4. iOS端末に配布/インストール - Android端末
- Google Cloud ConsoleからGoogle Cloud Messaging(GCM)のAPIキーを取得
- 1.を使ってpush通知が使えるようにmattermost/androidをビルド
- Android端末に配布/インストール
- push通知サーバ(push-proxy)
- サーバを用意し、mattermost/push-proxyをダウンロード
-
config/config-push-proxy.json
にAPNsの証明書/AndroidのAPIキーを設定 - 起動、動作確認
正直かなりハードルが高いと感じたので、今回はこちらの方法では確認しておりません。
ネイティブアプリ関係の開発をされていて興味がある方、ぜひ試してみて知見を共有いただければ…
メリット
- 基本料金無料
- Mattermost本体/push通知サーバ/各ネイティブアプリ のバージョンを完全にコントロールできる
- Mattermostのように若いプロダクトの場合、特に魅力的かもしれません
デメリット
- ネイティブアプリのビルド、および配布作業が大変
- iOS/Androidをソースコードからビルドできる技術と、push通知関係についても充分な知識が必要
- 僕はこっち側がさっぱりなので諦めました…
- アプリ開発をメインでやっていて、既に環境がそろっているとかでないと正直厳しいのでは…
- iOS端末で利用する場合、APNs証明書の取得にAppleへのお布施(Apple Developer Networkへの加入)が必要なので、完全無料にはならない
- iOS/Androidをソースコードからビルドできる技術と、push通知関係についても充分な知識が必要
- push通知サーバ(mattermost-proxy)の管理も必要
- Mattermostサーバをverupした場合、 通知サーバ(mattermost-proxy)もあわせてverupする必要がある
- ある程度後方互換はありそうなんですが、まだ若いプロダクトなのでなんとも…
B. 公式から提供されているiOS/Androidアプリと、公式の提供するpush通知サービス(MHPNS)を利用
A.の1~3を、Mattermost公式が提供しているものを利用して代替する方法です。
- iOS端末
- Android端末
- push通知サーバ
- MHPNSの利用申込をして発行してもらう?
- 今回はテスト用urlを利用
- MHPNSの利用申込をして発行してもらう?
メリット
- 楽
- push通知用サーバのセットアップやバージョン管理をしなくていい
- 各ネイティブアプリのビルドやバージョン管理をしなくていい(ストア経由で自動更新できる)
デメリット
- 無課金厨に不評(世知辛い)
-
MHPNSの値段がいくらなのかわからない
- MLに加入しないとわからない? ので確認するのも二の足踏んでしまいました…
- お仕事で利用される方は、ぜひ知見を展開いただきたく…
- というか本当に商用ローンチされてるのかな…
- MLに加入しないとわからない? ので確認するのも二の足踏んでしまいました…
- MHPNSがMattermostの最新版にしか対応しない方針の場合、運用しているMattermostのバージョンを常に最新に保つ必要がある
- Mattermostのリリーススケジュールが毎月16日で更新もかなり活発なので、追従するとなると結構大変かも…
というわけで、本記事では B. の方法で確認していきます。
ちなみに、Mattermostサーバ自体は直接インターネットからアクセスできない環境でも問題ありません。
確認手順
事前準備
Mattermostサーバは terukizm/mattermost-vagrant を利用して構築したものです。
仮想マシン上で動いているので、以下のようにして
config.vm.network "forwarded_port", guest: 80, host: 38080
WiFi接続してあるiOS/Android端末から、LAN経由でアクセスできるようにしてあります。
Mattermostサーバ
ブラウザ経由で以下の作業を行っておきます。
- teamを作成、teamURLをメモ
- push通知テスト用のchannelを作成(「テストPush通知部屋」)
- ios用アカウント(@iosnative)、android用アカウントを作成(@android)
iOS端末
au iPhone 6S(iOS 9.2.1)で確認。
Apple Store経由でMattermostクライアントを導入。
Android端末
Kindle Fire(Android 5.1.1)で確認。
Play Store経由でMattermostクライアントを導入。
作業手順
1. Mattermostサーバにpush通知の設定を行う
「System Console」 → 「Email Settings」 から以下のように設定します。
- 「Send Push Notifications」: true
- 「Push Notification Server」 : http://push-test.mattermost.com
- 確認用に用意されているサーバなので叩き過ぎると怒られるかもしれません… テスト時はご配慮ください…

2. 各端末からログイン
特に 太字部分 に気をつけてください。ドキュメントに書いてあったのですが、完全に読み飛ばしていてハマりました…
3. 各端末のアカウントに向けてDirect Messageを送る
他のユーザ3からDirectMessageを送信します。このDM以後、push通知が行われるようになるみたいです。

こんな感じで通知がくればOK。 4

Androidの場合はこんな感じ。

4. 各端末のアカウントに向けてReplyを送る
ここでは「テストPush通知部屋」の中からReplyを送ってみます。

こんな感じで通知がくればOKです。


遅延についてはほとんど感じられず、ほぼリアルタイムで通知されている印象でした。
メッセージの中身が表示されないのは、閉じた環境から使われることを想定し、情報が流出しないように、という配慮なんですかね。 5
実際の内容はアプリを起動して確認する感じになります。
以上、皆様の世知辛く充実したMattermost生活に潤いがもたらされることを、心よりお祈り申し上げます。
-
端末からのMattermostサーバへの接続が生きているとpush通知が飛んでこないようです。(バックグラウンドでアプリが起動していたり、モバイルブラウザからログインしているとNG) ↩
-
ログイン時に端末IDをNotification Serverにひも付けており、そのタスクが5分毎で処理されているとかなんですかね。 ↩
-
ここではたまたまrootを使っていますが、Admin権限のユーザである必要はありません。 ↩
-
スクリーンショットが取りづらかったので通知形式は変更してあります。デフォルトはバナー方式です。 ↩
-
Mattermostからpush通知サーバへのリクエストにメッセージの内容は含まれない仕様なのではないかと思います。ソースコード読んだわけではないので、実際にお仕事で使われる場合はあらかじめご確認ください。 ↩