メモ > 技術 > サービス: AmazonSNS > AmazonSNS: プッシュ通知用のキーや証明書の登録
AmazonSNS: プッシュ通知用のキーや証明書の登録
■概要
AndroidとiOSにプッシュ通知を送信できるようになったら、AmazonSNSから一括して送信できるようにする。
プッシュ通知を送信するための鍵ファイルや証明書を、AmazonSNSに登録することで可能になる。
以下で「アプリケーション(Android)」「アプリケーション(iOS)」「トピック」を作成するが、大まかに
・Androidの場合、端末のデバイストークンを「アプリケーション(Android)」に追加すると、デバイストークンに対応したエンドポイントが発行される。
・iOSの場合、端末のデバイストークンを「アプリケーション(iOS)」に追加すると、デバイストークンに対応したエンドポイントが発行される。
・AndroidもiOSも、AmazonSNS経由ではエンドポイントを指定してプッシュ通知を送信できる。
・エンドポイントは「トピック」に追加できる。
・「トピック」を指定してプッシュ通知を送信すると、容易に一斉送信を実現できる。
という関係になっている。
なお、上記の操作はAWSコンソールから手動で行えるが、SDKを使用してプログラムから行なうこともできる。
■AmazonSNSアプリケーションの作成(Android)
Amazon SNS → プッシュ通知 →プラットフォームアプリケーションの作成
アプリケーション名: PushTest1-FCM-Dev(開発版想定。本番なら「PushTest1-FCM」などとする。iOS用にも作る可能性があるので、単に「PushTest1」ではなく「FCM」の文字を含めておくのが無難そう。)
プッシュ通知プラットフォーム: Firebase Cloud Messaging (FCM)
認証方法: トークン
Service Json: (「Android: Firebaseの鍵ファイルを取得」で取得したJsonファイル。)
★この時点では「Dev」を付けない方がいいような。(上の手順では本番用に作成しているので。)
「アプリケーションエンドポイントの作成」をクリック。
アプリケーション一覧に追加されたことを確認する。
■AmazonSNSアプリケーションの作成(iOS)
Amazon SNS → プッシュ通知 →プラットフォームアプリケーションの作成
アプリケーション名: PushTest1-APNS-Dev(開発版想定。本番なら「PushTest1-APNS」などとする。Android用にも作る可能性があるので、単に「PushTest1」ではなく「APNS」の文字を含めておくのが無難そう。)
プッシュ通知プラットフォーム: Apple iOS/VoIP/Mac
サンドボックスでの開発に使用されます: 開発用(Development SSL Certificate)の場合、チェックを入れる。
プッシュサービス: iOS
認証方法: 証明書(p8ファイルの場合は「トークン」にする。詳細は後述の「iOS: p8証明書」を参照。)
証明書: PushTest1-Dev.p12(先の手順で作成したファイル。)
パスワードの入力: (p12ファイル作成時、パスワードをカラで作成したなら空欄。)
「認証情報をファイルから読み込み」をクリック。
証明書の情報が表示されたことを確認して「アプリケーションエンドポイントの作成」をクリック。
※「認証情報をファイルから読み込み」をクリックしたとき。
「Apple の認証情報をファイルから読み込んでいるときにエラーが発生しました」
というエラーになる場合、p12のファイル名に日本語を含めていないか、証明書作成時に通称に日本語を含めていないか、などを確認する。
その他、原則として半角英数字に統一しておくほうが無難。
※Apple Developer Program での作業は、MacのSafariで行うことが推奨されているみたい。
どうしても意図した操作ができなければ、MacのSafariで試す。
※証明書が壊れていないかなどは、以下のコマンドで確認できる。
パスワード入力後、ファイルの情報が表示されることを確認する。
$ openssl pkcs12 -in PushTest1-Dev.p12 -info -noout
Enter Import Password:
MAC Iteration 1
MAC verified OK
PKCS7 Encrypted data: pbeWithSHA1And40BitRC2-CBC, Iteration 2048
Certificate bag
PKCS7 Data
Shrouded Keybag: pbeWithSHA1And3-KeyTripleDES-CBC, Iteration 2048
OpenSSL
https://sehermitage.web.fc2.com/crypto/openssl.html
PKCS #12 個人情報交換ファイルフォーマットについて - Qiita
https://qiita.com/kunichiko/items/3e2ec27928a95630a73a
APNsで使うp12形式の証明書、秘密鍵からpem形式の証明書、公開鍵を作成する方法がかなりわかりづらいのでまとめてみました - lineocean.com
https://lineocean.com/2017/10/31/499/
■AmazonSNSトピックの作成(すべてのデバイスへ一斉送信するトピックを作成する場合)
トピックを作成してそこに端末を登録しておけば、
トピックを指定するだけでトピックに属する端末すべてにプッシュ通知を送信できる。
左メニューから「トピック」を開く。
「トピックの作成」ボタンを押すとトピックの作成画面が開く。
タイプ: スタンダード
名前: PushTest1-Dev-All
表示名: (SMS用の項目なので空欄)
「トピックの作成」をクリック。
トピック一覧に追加されたことを確認する。
(表示されるARNの値は、後ほどPHPプログラムに設定する。)
トピックのARNを指定するだけで一斉送信ができるので、運用の際は「全端末配信用」のトピックを作っておくと良さそう。
後からトピックを追加すると、トピックに対して端末を登録する必要があるので注意。
トピックを気軽に増減する設計は避けるほうがいいかもしれない。要検証。
■アクセスキーの作成
画面右上のアカウント名 → セキュリティ認証情報 → ユーザー → ユーザーを追加
ユーザー名: pushtest1-dev
AWSマネジメントコンソールへのユーザーアクセス: 提供しない
ポリシー: AmazonSNSFullAccess
以下のとおりアクセスキーを発行。
ユースケース: コマンドラインインターフェイス (CLI)
Access key ID: XXXXXXXXXX
Secret access key: YYYYYYYYYY