Mobile Notification Push
Overview
モバイルのプッシュ通知についてまとめているセクション。
ターゲットデバイスに送信する仕組み
- Google Play Store
- Google Play 開発者サービスを搭載したAndroid デバイス向けの Android トランスポート レイヤ(ATL)
- App Store
- Apple デバイス向けの Apple Push Notification Service(APNs)
各プラットフォームにプッシュ通知を送るためのtransporterのようなものが存在する。
特にAPNsは後ほど証明書やら鍵を使用する必要がある。
iOSプッシュ通知の仕組み
iOS端末にプッシュ通知を送るにはApple Push Notification Service(APNs)を使用する。
そして外部サーバー(今回はFirebase Cloud Messaging)からAPNsを使ってプッシュ通知を送るためには、アプリに紐づけられたAPNs証明書、もしくはAPNsキーが必要になる。
そのためAPNs証明書、もしくはAPNsキーを外部サーバーに登録する必要がある。
iOSプッシュ通知の歴史
Apple Push Notification Authentication Keyを発行しよう
APNsの証明書が変わりました 以前に書いたエントリ(Golangで「プロバイダー認証トークン」を生成して、APNsにプッシュを送ろう)で触れたとおり、プッシュ通知に使用する証明書の種類が変わりました。以前のものは「Apple Push Notification Service SSL」、新しいものは「Apple Push Notification Authentication Key」です。 新しい証明書の特徴として、有効期限がなく、1つ作ればそのデベロッパーアカウントでビルドしたすべてのアプリにプッシュが送れるというメリットがあります。これからアプリを作るという場合は、新しい方を使わない手はないでしょう。
iOSでプッシュ通知を使うために必要なファイルは2種類ある
iOSアプリのPush通知を実現するには、**APNs(Apple Push Notification Service)**と連携する必要がある。
APNsを利用する際には、認証のために証明書やトークンが必要。
2種類の認証方法というのが「p12形式の証明書」と「p8形式の鍵」のこと
p12
- ファイル取得までの道のりが長くて複雑
- 有効期限は1年で、毎年更新する必要がある
- App ID単位で管理ができる
- 開発環境・本番環境と区別ができる
- 古いやり方
- 何度でもダウンロードできる
p8
- ファイル取得までの道のりが短くて簡単
- 有効期限は無期限
- App ID単位で管理ができない(Apple IDが保有している全てのアプリで使える)
- 開発環境・本番環境と区別がない
- 新しいやり方(Firebaseではp8が推奨されている)
- 同じkeyは1度しかダウンロードできない
- Apple IDのApple Developer Programに対して、2つまでしか認証キーが発行できない
p8 keyは「1度しかダウンロードできない」となっていますが、これは「1度失ったら2度とプッシュ通知を使えない」というわけではない。
Androidプッシュ通知の仕組み
AndroidはFCM(Firebase Cloud Messaging)から直接配信されるため、iOSとは違って他のサービスとの繋ぎ合わせは必要はない。
特定のデバイスにメッセージを送るためには
特定のデバイスにメッセージを送るにはデバイスを一意に識別できる「デバイストークン」が必要
アプリ上でプッシュ通知の登録(registerForRemoteNotifications())を行うと、デバイストークンを取得することができる。
- アプリ起動
- ユーザーのデバイスはAPNsからデバイストークン要求
- 取得したデバイストークンをFCMへ送信
- デバイストークンのコピーをFCMトークンとして作成し、ユーザーのデバイスへ返送
