2014年6月にAmazon Simple Notification Service (SNS)がWindows Push Notification Service (WNS)をサポートすることが発表されましたが、使用されている方はいらっしゃいますでしょうか?このSNSとWNSはモバイルデバイスへのプッシュ通知を簡単に構築することができてとても便利なのですが、これらのサービスをどのように使用するのかという情報がWeb上にあまりないため、少し使ってみて挫折したという方もいらっしゃるかもしれません。
そこで本書では、ステップバイステップで両サービスの設定方法を解説しながらASTERIA Warpの「AWS SNSPublishコンポーネント」を用いてWindowsストアアプリへのトースト通知を行う手順を解説します。
※画面構成、メニュー名などは2014年11月現在のものです。
まずは開発者ガイドでメッセージをPublishするイメージを確認してください。
本書ではPublisherとして、Amazon SNSのダッシュボードとフローのコンポーネントからそれぞれPublishできることを確認します。
以下のように操作と確認をすすめていきます。
- Amazon SNSでTopicを作成してメールによるSubscriptionを作成する
- ダッシュボードから、登録したメールアドレスへメッセージをPublishしてみる
- AWS SNSPublishコンポーネントから、登録したメールアドレスへメッセージをPublishしてみる
- Windowsアプリを登録、作成してSNSのEndpointとなるURIを取得する
- Amazon SNSでアプリを登録してEndpointを設定し、前で作成したTopicにEndpointを関連付ける
- ダッシュボードから、登録したWindowsアプリへメッセージをPublishしてみる
- AWS SNSPublishコンポーネントから、登録したWindowsアプリへメッセージをPublishしてみる
Amazon SNSでTopicを作成してメールによるSubscriptionを作成する
まず、SNSの基本としてSNSを使用したメール送信を行ってみます。
AWSマネジメントコンソールにサインインし、Amazon Web Servicesのサービス一覧から「SNS」を選択します。
SNS Dashboardが表示されますので、「Create New Topic」ボタンをクリックします。
以下のようなダイアログが表示されますので、Topic NameとDisplay Nameを入力し、「Create Topic」ボタンをクリックして新しいTopicを作成します。
今回は、Topic NameにbyWARPという名前を付けてみます。
Topicが作成されました。
次に作成したTopicで「Create Subscription」ボタンをクリックして、Subscriptionを作成します。
これで、SNSでメールを送信する準備ができました。ここではEmailを指定して作成します。Endpointに受信するメールアドレスを入力して「Subscribe」ボタンをクリックします。
入力したメールアドレスに Subscriptionをconfirmするためのメールが届くので、メール本文内のリンクをクリックしてconfirmしておきます。
ダッシュボードから、登録したメールアドレスへメールをPublishしてみる
一回テストしてみましょう。
Dashboardで「Publish a message」ボタンをクリックします。「TargetARN」に作成したTopicのARNを入力します。
TargetARNは作成した「Topic Details」に「Topic ARN」として表示されいるarn:から始まる文字列を入力します。
Subjectに「SNS送信テスト」、Messageに「Publish Message from SNS」と入力して「Publish Message」ボタンをクリックすると、前に作成したSubscriptionで設定したメールアドレスに下記のようなメッセージが飛んできます。
Topicの作成時に「Display Name」を指定しなかったので、差出人が「AWS Notifications」となっています。
無事メールが送信されましたので、次項ではASTERIA Warpの「AWS SNSPublishコンポーネント」を使用してメールを送信してみます。
AWS SNSPublishコンポーネントから、登録したメールアドレスへメッセージをPublishしてみる
まず、次の4つの情報を準備します。
- アクセスキー:AWSアカウントのアクセスキー。AWSコネクション作成時に使用します。
- シークレットキー:AWSアカウントのシークレットアクセスキー。AWSコネクション作成時に使用します。
- SNSのリージョン:AWSコネクション作成時に使用します。SNS Dashboardを表示していれば、画面右上に表示されています。今回はTokyoリージョンを選択しています。
- トピックARN:AWS SNSPublishコンポーネントプロパティへ設定します。先ほど作成したTopicのARNです。
例:arn:aws:sns:us-east・・・・・
それでは、フローデザイナーを起動します。
最初にコネクションペインで、新しい「AWS」コネクションを作成します。
用意したアクセスキーとシークレットキーを入力し、リージョンを選択します。
ここではAWS1という名前で作成しました。
以下のようなフローを作成します。
AWS SNSPublishコンポーネントの「コネクション名」プロパティで作成したAWSコネクション「AWS1」を選択し、「トピックARN」には事前に準備したトピックARNを入力します。「件名」プロパティへは「Message from WARP」と入力しました。
AWS SNSPublishコンポーネントの前のMapperコンポーネントでは「Message from AWS SNSPublish Component」という文字列をストリーム型「Text」で出力ストリームに設定しています。
それでは、フローを実行します。
すると、Subscriptionに設定したメールアドレスに下記のようなメールが送信されます。
無事届きました。
AWS SNSPublishコンポーネントでSNSへメッセージを発行することまで確認できました。
次項では、SNSからWNSへメッセージを送るためのWNSの設定を行っていきます。
Windowsアプリを登録、作成してSNSのEndpointとなるURIを取得する
※以下、Windowsストアアプリの開発者アカウントがある前提です。個人で登録すると1年間で2000円ぐらいかかります。
まず、WNSからのプッシュ通知を受け取るWindowsストアアプリを作成します。
Windowsデベロッパーセンターへサインインしてダッシュボードを開き、左のメニューから「アプリの提出」をクリックします。
アプリの提出画面が表示されたら「アプリの名前」をクリックして名前を予約します。
Windowsストアアプリの名前を入力して保存します。アプリの名前は、Windowsストア全体で一意になるようにする必要があります。
今回は「WARP-WNS-Test1」をアプリの名前として予約しました。
次に「サービス」をクリックします。
サービスの画面が表示されたら「Liveサービス サイト」をクリックします。
すると、以下の情報が表示されますのでメモしておきます。これらの情報は後で使用します。
- パッケージSID
- アプリケーションID
- クライアントID
- クライアントシークレット
それでは、Visual Studio 2013を起動してアプリを作成します。
新プロジェクトからVisual C#でWindows Phone AppsのBlank App(Windows Phone)を選択します。当然Blank Appでなくてもよいですし、好きなものを選択してください。
今回は「WARPWNS1」という名前で作成しました。
次に、「WARPWNS1」をデベロッパーセンターで予約したアプリに関連付けます。
Visual StudioのSolution Explorerでプロジェクトを右クリックしてメニューを開き、Store→Associate App With the Store...をクリックします。
開発者登録しているアカウントでサインインします。
すると、先程予約したストアアプリの名前が表示されていますので、選択して「Next」をクリックします。
今回は「WARP-WNS-Test1」を選択します。
それではアプリのソースの方を少し追加します。
App.xaml.csを開いて(プロジェクトを作成したらこのファイルが開かれていると思います)、Appクラスの一番下にinitNotificationという関数を追加します。
PushNotificationChannelManagerからPushNotificationChannelを取得して、さらにURIを取得しダイアログに表示します。このURIは後ほどAWS SNSの設定で使用します。
このinitNotificationをAppのOnLaunchedの最後に追加します。
ソースの上の方にもどってusingを追加してください。
ソースの追加は以上です。
次にPackage.appxmanifestを開きます。
Application/Toast capableにYesを設定してトースト通知を有効にします。
保存してEmulatorで実行します。
無事動きますと、Emulator上でアプリケーションが起動し、URIがダイアログに表示されます。
URIをダイアログで表示しましたが、長すぎますのでVisual Studioのデバッガーを使ってMessageDialogをnewしている行あたりで、uriに格納されている文字列をコピーしてください。
これでWindowsアプリの作成は終わりですが、Emulatorは起動したままにしておきます。
Amazon SNSでアプリを登録してEndpointを設定し、前で作成したTopicにEndpointを関連付ける
AWSのSNSの設定に戻ります。
SNSのDashboardを開いて、Applicationを追加します。「Add a New App」ボタンをクリックします。
以下の項目にそれぞれ値を入力して「Add New App」ボタンをクリックします。
- Application Name:アプリの名前を入力します。
- Push Platform:上記のように「Microsoft WNS for Windows 8+ & Windows Phone 8.1+」を選択します。
- Client Secret:Windowsデベロッパーセンターで表示しメモしておいたクライアントシークレットを入力します。
- Package Security Identifier (SID) :Windowsデベロッパーセンターで表示しメモしておいたパッケージSIDを入力します。
今回はApplication Nameを「WARPWNS1」という名前で追加しました。
作成したApplicationにEndpointを追加します。「Add Endpoints」ボタンをクリックします。
以下の画面ではDevice Tokenという入力欄がありますがDevice Tokenって何でしょうか? 実はここには、Visual Studio 2013 でWindows ストアアプリをデバッグで動かしたときに取得したURIを入力します。
無事Endpointが追加できました。
次に、SNSに作成したTopicへEndpointを紐づけます。
先ほど作成したEndpointのチェックボックスにチェックを入れて「Endpoint Actions」のドロップダウンリストから、「Subscribe Endpoints to Topic」を選択します。
以下の画面で「Select a topic from the list of your topics」のドロップダウンリストからTopicを選択します。
今回は最初に作成したTopicの「byWARP」を選択します。
TopicARNには自動的にARNが設定されますので、「Subscribe」ボタンをクリックします。
無事WindowsストアアプリのSubscriptionも追加できました。
次項では、実際にSNSからメッセージをPublishしてみます。
ダッシュボードから、登録したWindowsアプリへメッセージをPublishしてみる
それでは、SNSからWNSを経由してWindowsストアアプリへメッセージを送ってみます。
SNSDashboardでTopicを選択します。
今回は「byWARP」です。
Topicの画面上にある「Publish」ボタンをクリックします。
Subjectに「SNS-WNS」、Messageに「Publish Message from SNS Dashboard」と入力して、「Publish Message」ボタンをクリックします。
そして最初に登録したメールアドレスにもメールが送信されています。
Emulatorではメッセージが切れてしまいました。
下記は実機でテストしたときの画像です。
AWS SNSPublishコンポーネントから、登録したWindowsアプリへメッセージをPublishしてみる
最後に、ASTERIA WarpからAWS SNSPublishコンポーネントを使用して、SNS、WNSを経由してWindowsストアアプリへメッセージを送ってみます。
はじめに作成した、以下のフローをフローデザイナーから実行します。
Emulatorにトースト通知が行われましたが、こちらもメッセージが切れてしまいました。
実機でテストしたときの画像が以下になります。
「Message from AWS SNSPublish Component」というメッセージが確認できました。