TECHBLOGスキルブログ

Amazon SNSでプッシュ通知を送るための基礎知識

2018.12.04

こんにちは、ユニトラストの小原です。

AWSのAmazon Simple Notification Service(Amazon SNS)を使う機会があり、アプリへのプッシュ通知の配信を行なったのですが、
専門用語等が多く、改修や調査などを行った際に仕組みを理解するのにかなり時間がかかったため、備忘録としてまとめておきたいと思います。
こちらは、Amazon SNSを初めて利用する方、あまり慣れていない方向けの記事となりますので、ご了承ください。

 

1. プッシュ通知の仕組み

Amazon SNSについての説明の前に、スマートフォン側のプッシュ通知の仕組みについて簡単に説明をしておこうと思います。
まずプッシュ通知とは、スマートフォンのロック画面や、操作中の画面上部に表示されるメッセージのことです。

このプッシュ通知ですが、
iOS端末は「Apple Push NotificationService(APNs)」
Android端末は「Google Cloud Messaging(GCM)」
というプッシュ通知配信サービスをそれぞれ利用し、端末へと通知を配信しています。

AndroidもiOSもどちらも大まかな仕組みは同じで、
アプリの起動時にユーザに対してアプリからの通知を許可するかどうかを聞きます。
この時、ユーザが通知の許可を出すと、上記のプッシュ通知配信サービスに接続し、各サービスから「デバイストークン」という端末固有の値が割り振られます。
この「デバイストークン」を元に、通知が対象の端末へと配信されるという仕組みになっています。

 

2. Amazon SNS

ここからが本題です。
Amazon SNSとは、AWS内のモバイル通知サービスのことで、iOSやAndroid、Windows Phoneなどのデバイスに通知を配信することができます。
1回のリクエストで大量のユーザーに通知を配信することができ、実行速度もかなり速いため、アプリの運用には非常に便利なサービスです。
サービスを利用する手順は簡単です。

 

トピックを作成して対象のエンドポイントをサブスクライブし、そのトピックにメッセージをパブリッシュするだけでプッシュ通知を配信できます!

 

上記の文章で何を行なっているのかわかりましたでしょうか。
英単語からある程度の予測は可能かもしれませんが、Amazon SNSに触れたことがない方は上記だけでは何をしているのかほぼ伝わってこないと思います。
AWSのDocumentation(https://aws.amazon.com/jp/documentation/sns/)を読んで手順通りに行えば、通知を配信すること自体は可能ですが、専門用語が多いためにDocumentationだけでは仕組みの全容を把握しづらく、外部サーバのAPIなどから利用するなど応用しようとすると苦労します。
正直な話、Amazon SNSの最大のハードルはこの専門用語であるといっても過言ではないと私は思っています。

そこで、この記事ではAmazon SNSの用語をわかりやすく解釈した上で、SNS利用のプッシュ通知配信の仕組みについて書いていこうと思います。

 

3. Amazon SNSの用語

Amazon SNSの利用にあたり、知っておくべき用語は以下の6つです。
実際のところ、それぞれの単語から内容を把握するのが難しいというだけで、それ自体はあまり難しくありません。
以下の6つの単語を押さえれば、サービスの利用はまったく問題ありませんので、1つ1つ順番に見ていきましょう。

 

・Amazon Resource Name(ARN)

【用語について】
AWSにおけるリソースのIDです。
このARNを参照し、配信対象や配信先の呼び出しを行ないます。
SNSにおいては、後述のエンドポイント、トピック、サブスクリプションにこのARNが割り当てられています。

例)arn:aws:sns:us-east-1:123456789012:push_topicname

SNSに限らず、AWS全体で使われていますので、覚えておいて損はありません。
arn:aws:までは全サービス共通となっており、その後ろにサービス毎に異なる情報が付与されます。
上記例の場合は【arn:aws:サービス:リージョン:アカウントID:トピックの名前】となっています。

下記URLに詳細な説明と、各サービスにおけるARNの例が記載されていますのでこちらも一読してみてください。
https://docs.aws.amazon.com/ja_jp/general/latest/gr/aws-arns-and-namespaces.html

 

・エンドポイント

【用語について】
配信対象端末を識別するためのデータです。
本記事の[1.]にて説明した「デバイストークン」より作成する、端末を識別するためのARNになります。
デバイストークンを登録するとこのエンドポイントが作成され、配信を行う際はこのエンドポイントを指定し、配信します。
わかりにくければ、メールアドレスのようなものだと考えていただいて構いません。

 

・アプリケーション

【用語について】
アプリごとの、プッシュ通知に利用するプラットフォームを設定しています。
iOSアプリなら「Apple Production」か「Apple Development」
Androidアプリなら「Google Cloud Messaging(GCM)」
をそれぞれ選択します。基本アプリごとに作成するものと思っていただいて問題ありません。
前述のエンドポイントは、このアプリケーションに紐付く形で登録、管理されます。

【画面について】
↑アプリケーションの詳細画面。
アプリケーションに紐付くエンドポイントの情報が表示されます。
この画面でエンドポイントの作成や、エンドポイントを任意に選択して、個別に通知を配信することができます。
エンドポイントの一覧の項目については、左から順に、「デバイストークン」、「エンドポイントのARN」、「ユーザーについての備考」、「通知の許可が下りているか」、の情報を表示しています。
通知を送れるかどうかを確認できるのは便利ですね。CSV出力とかできればもっと便利なのですが。

 

・トピック

【用語について】
配信対象をグルーピングし、配信対象に一斉に通知を配信するための機能です。
このトピックを作成し、エンドポイントを登録したあと、トピックに対し送信したいメッセージを発行すると、トピックに登録されているエンドポイントへ一斉に通知を配信することができます。
個別のエンドポイントへ通知を配信するのは前述のアプリケーションでも行なうことができますが、配信の度に対象を選択するのは手間です。
その手間を解消するのがこのトピックです。


【画面について】
↑トピックの詳細画面。
トピックARNやリージョンが記載されています。
その下に配信対象のデータ一覧が書いてあるのですが…サブスクリプションとは?

 

・サブスクリプション

【用語について】
Amazon SNS用語最大のハードルがこのサブスクリプションです。
サブスクリプションとは、作成したトピックと配信対象のエンドポイントを紐づけるデータです。

サブスクリプションによってトピックにエンドポイントが紐づけられていることで、トピックに対しメッセージを発行すると、そのトピックに紐づく配信対象のエンドポイントへとメッセージが配信されるようになっています。

サブスクリプションは日本語で「購読・予約購読」という意味です。
トピックに対しエンドポイントの紐づけを行うことで、「トピックに発行されたメッセージを購読できる」というイメージがあるとよりわかりやすくなるかもしれません。


【画面について】
↑サブスクリプション詳細画面。
トピックへのエンドポイントの登録=サブスクリプションの作成です。
エンドポイントを登録したい対象のトピックARN、プロトコル、エンドポイントARNを入力し、「サブスクリプションの作成」ボタンを押下すれば、トピックへのエンドポイントの登録は完了です。
ちなみに、トピックにエンドポイントを登録する行為自体はサブスクライブと呼ばれています。

 

・パブリッシュ(発行)

【用語について】
通知を配信することです。
SNSにおいて通知の配信は、エンドポイントやトピックに対しメッセージを発行するという形をとっています。
メッセージの発行はアプリケーション画面、トピック画面より可能です。
用語は以上になります。この6つの用語がわかればSNSの基本的なサービスの理解はできたも同然です。
これらを踏まえて、Amazon SNSのプッシュ通知の仕組みについて見てみましょう。

 

4. Amazon SNS利用のプッシュ通知の仕組み

基本的には[1. プッシュ通知の仕組み]とほぼ同様ですが、アプリ側のサーバと各端末のプッシュ通知配信サービスの間をAmazon SNSが仲介しています。

アプリ側のサーバでアプリユーザの端末からデバイストークンを受け取り、受け取ったデバイストークンをAPIを利用してAmazon SNSに登録、エンドポイントを作成します。
エンドポイントが作成されたら、アプリ側のサーバからAPI経由、もしくはAmazon SNSから直接で、トピックにエンドポイントをサブスクライブしたあと、トピックにメッセージを発行し、プッシュ通知の配信を行います。

Amazon SNSを外部から利用するためのAPIは、AWS側から提供されており、手軽に利用することができます。
エンドポイントの登録やトピックの作成、サブスクライブなど基本的なことは全てAPIを利用して実行することが可能です。
APIの詳細については下記URLに説明が記載されているため、こちらをご参照ください。
【Amazon SNS モバイルプッシュ API】
https://docs.aws.amazon.com/ja_jp/sns/latest/dg/mobile-push-api.html

 

アプリへのプッシュ通知において、Amazon SNSを利用する利点は多くあります。以下は一部の例です。

・何十万件単位の複数の配信対象に対して一度に通知を配信することができる。
・単一のエンドポイントにメッセージを発行し、プッシュ通知を配信することもできる。
・通知の配信は分散処理にて行われているため、素早い配信ができる。
・トピックにより、アプリユーザ全体だけでなく、一部のユーザを配信対象とした対してのプッシュ通知配信ができる。
・毎月100万件までのプッシュ通知を無料で送信できる。
・AWSの他のサービス(Amazon SQS、Amazon EC2、Amazon S3、Amazon CloudWatchなど)と連携ができる。

上記の中でもっとも良い点は、他のAWSのサービスと連携が可能なことだと私は思います。
特にAmazon CloudWatchとの連携は、SNSで発行したメッセージ数や、プッシュ通知の成功率、失敗率などを監視できるため非常に便利です。

Amazon SNSは、少々取っ付きにくく感じる部分もありますが、アプリのプッシュ通知の管理において非常に役に立つ機能が揃っているサービスとなっています。
新規でアプリを作成し、運用しようと考えている方々、既にアプリを運用していて、プッシュ通知を利用したいと考えている方々は、今回解説させていただきましたAmazon SNS、是非利用してみてください。

              

OTHER CONTENTSその他のコンテンツ

UNITRUST会社を知る

  • 私たちについて

  • 企業情報

SERVICE事業内容

  • システム開発

  • 自社サービス

CONTACT
お問い合わせ

あなたの「想い」に挑戦します。

どうぞお気軽にお問い合わせください。

受付時間:平日9:00〜18:00 日・祝日・弊社指定休業日は除く

お問い合わせ