[awsマイスターシリーズ]amazon snsモバイルプッシュ通知

43
AWSマイスターシリーズ番外編 Amazon SNS モバイルプッシュ通知 2013.09.17 アマゾン データ サービス ジャパン株式会社 ソリューション アーキテクト 安川 健太 篠原 英治

Upload: amazon-web-services-japan

Post on 28-May-2015

16.697 views

Category:

Documents


9 download

TRANSCRIPT

Page 1: [AWSマイスターシリーズ]Amazon SNSモバイルプッシュ通知

AWSマイスターシリーズ番外編 Amazon SNS モバイルプッシュ通知

2013.09.17 アマゾン データ サービス ジャパン株式会社

ソリューション アーキテクト 安川 健太 篠原 英治

Page 2: [AWSマイスターシリーズ]Amazon SNSモバイルプッシュ通知

今日のAgenda

モバイルプッシュ通知について

Amazon SNSモバイルプッシュ通知機能 • 機能概要

• SDK, IDE

• 料金・無料使用枠

Amazon SNSでモバイルプッシュ通知を使うまで

Q&A

Page 3: [AWSマイスターシリーズ]Amazon SNSモバイルプッシュ通知

モバイルプッシュならアプリが起動していなくても通知が可能

• ユーザは通知を受け取るか否か

設定可能

• 特定のデバイス上の特定のアプリにのみ通知する事も

• 送るのは短いメッセージ: 読んで無視するも、アプリを起動するも

Page 4: [AWSマイスターシリーズ]Amazon SNSモバイルプッシュ通知

クラウドから特定のデバイス上の特定のアプリに通知可

クラウド上の

プログラム モバイル・アプリ

Page 5: [AWSマイスターシリーズ]Amazon SNSモバイルプッシュ通知

通知は各プラットフォーム独自の仕組みで送信

クラウド上のプログラム

モバイルアプリ

モバイル

プラットフォーム (e.g. Apple,

Google, Amazon)

Page 6: [AWSマイスターシリーズ]Amazon SNSモバイルプッシュ通知

開発者側でデバイスごとのトークンおよびユーザの受信設定を管理

プラットフォーム

トークンの登録

トークンへのフィードバック

Page 7: [AWSマイスターシリーズ]Amazon SNSモバイルプッシュ通知

通常プラットフォームごとに通知の方法は異なる

Apple APNS

Google GCM

Amazon ADM

• 異なるAPI

• 異なる機能

• 異なるフィードバック機構

Page 8: [AWSマイスターシリーズ]Amazon SNSモバイルプッシュ通知

一般に数百万のデバイスへの通知の管理運用は大きな問題に

クラウド上のプログラム

プラットフォーム モバイルアプリ

Page 9: [AWSマイスターシリーズ]Amazon SNSモバイルプッシュ通知

そのため、プラットフォームごとのAPIを抽象化した中間プロバイダを利用するのが一般的

モバイルアプリ 中間プロバイダ

Page 10: [AWSマイスターシリーズ]Amazon SNSモバイルプッシュ通知

開発者側でプラットフォームを抽象化するサービスを利用することで得られるもの、得られないもの

どのプラットフォーム上のアプリのユーザでも抽象化出来る

信頼性のある通知のためのトークンは管理可能

運用の複雑さの回避

スケーラビリティの確保の

コスト – プラットフォーム側が無料だとしても

Page 11: [AWSマイスターシリーズ]Amazon SNSモバイルプッシュ通知

Amazon SNS Mobile Pushはプラットフォーム横断型プッシュ通知のための中間マネージドサービス

Amazon SNS

Mobile Push

Apple Devices

Google Devices

Amazon Kindle Fire Devices

Page 12: [AWSマイスターシリーズ]Amazon SNSモバイルプッシュ通知

Apple

Kindle

Fire

Kindle

Fire

Google

Publish

Apple

Kindle

Fire

Kindle

Fire

Google

Publish

SNSならプラットフォーム特有のメッセージペイロードを送ることも可

一度のPublish指示であらゆる端末へ

プラットフォームそれぞれに異なる

ペイロードを送信

Page 13: [AWSマイスターシリーズ]Amazon SNSモバイルプッシュ通知

デバイスごとに異なるメッセージを送ることも、グループに一斉通知をすることも可

Publish

Publish

Publish

Publish

デバイスごとの直接通知 パートナー様を通じた場合等のシナリオ

1SNSトピックの

最大サイズは10,000 (2013年8月現在)

Page 14: [AWSマイスターシリーズ]Amazon SNSモバイルプッシュ通知

メッセージサイズの上限はプラットフォームごと

• Apple Push Notification Service

• 256 bytes • https://developer.apple.com/library/ios/documentation/NetworkingInternet/Con

ceptual/RemoteNotificationsPG/Chapters/ApplePushService.html

• Amazon Device Messaging

• 6144 bytes • https://developer.amazon.com/sdk/adm/sending-message.html

• Google Cloud Messaging

• 4096 bytes • http://developer.android.com/intl/ja/google/gcm/adv.html

Page 15: [AWSマイスターシリーズ]Amazon SNSモバイルプッシュ通知

SNSは各フラットフォームからのフィードバックを基にトークンの入れ替えや無効化を自動実行

Amazon SNS

Mobile Push トークンの登録

トークン

フィードバック

クラウド上のアプリケーション

• デバイスごとに安定したエンドポイントを提供

• トークンフィードバックは参照可能 (必ずしも参照しなくても利用可)

Page 16: [AWSマイスターシリーズ]Amazon SNSモバイルプッシュ通知

SNSのスケーラビリティならアプリが必要とする分だけの通知をいつでも送信可能

• 数通のメッセージから億単位のメッセージまで

• 数個のデバイスから億単位のデバイスまで

...これらを設定管理の手間なしで

...堅牢性や信頼性を犠牲にすることなく

Page 17: [AWSマイスターシリーズ]Amazon SNSモバイルプッシュ通知

広範な言語とプラットフォームをカバーするSDKとIDE

お好みの言語やプラットフォームのSDKを選択

…そしてお好みのIDEに統合

Eclipse Visual Studio CLI Powershell

Android iOS Java nodeJS .NET PHP Python Ruby

Page 18: [AWSマイスターシリーズ]Amazon SNSモバイルプッシュ通知

SNSモバイルプッシュ通知はコンソールからでも利用可

• 簡単な手順でクロスプラットフォームな通知を実装可

• トークンをバッチ入力することで既存のデバイスの一斉登録も可

Page 19: [AWSマイスターシリーズ]Amazon SNSモバイルプッシュ通知

料金・無料使用枠

1月あたり100万リクエスト • 100万のPublish(アプリSNS) • 100万のモバイルプッシュ通知(SNS各プラットフォーム)

以降は100万リクエスト当たり $1.00 • $0.50 で 100万publish (アプリSNS) • $0.50 で 100万モバイルプッシュ通知(SNS各プラットフォーム) Note:

- SNSトピック経由で送る方が全体の費用は削減できる

- 各プラットフォームへの支払いは特に無し

Page 20: [AWSマイスターシリーズ]Amazon SNSモバイルプッシュ通知

Amazon SNS

Mobile Push

ここまでのまとめ:

• クロスプラットフォームプッシュ通知

(Apple, Google, Amazon)

• 1月100万リクエスト無料、以降は100万ごとに$1.00

• 堅牢性と信頼性とスケーラビリティを兼備

• 簡単なトークン管理

Page 21: [AWSマイスターシリーズ]Amazon SNSモバイルプッシュ通知

今日のAgenda

• モバイルプッシュ通知について

• Amazon SNSモバイルプッシュ通知機能 – 機能概要

– SDK, IDE

– 料金・無料使用枠

• Amazon SNSでモバイルプッシュ通知を使うまで

• Q&A

Page 22: [AWSマイスターシリーズ]Amazon SNSモバイルプッシュ通知

https://s3.amazonaws.com/codesamples/sns/latest/snsmobilepush.zip

サンプルアプリケーション

Androidアプリ

PushリクエストBatch

Page 23: [AWSマイスターシリーズ]Amazon SNSモバイルプッシュ通知

AndroidアプリをEclipseでBuild

必要なライブラリ • Android SDK • Google Play Services

Page 24: [AWSマイスターシリーズ]Amazon SNSモバイルプッシュ通知

Google apis設定およびKeyの取得 https://code.google.com/apis/console/

Page 25: [AWSマイスターシリーズ]Amazon SNSモバイルプッシュ通知

Androidアプリを起動

Page 26: [AWSマイスターシリーズ]Amazon SNSモバイルプッシュ通知

USB接続した実機で実行

Page 27: [AWSマイスターシリーズ]Amazon SNSモバイルプッシュ通知

インストールされたAndroidアプリ

Page 28: [AWSマイスターシリーズ]Amazon SNSモバイルプッシュ通知

インストールされたAndroidアプリ

Page 29: [AWSマイスターシリーズ]Amazon SNSモバイルプッシュ通知

Management ConsoleからPush

Page 30: [AWSマイスターシリーズ]Amazon SNSモバイルプッシュ通知

Management ConsoleからPush

Page 31: [AWSマイスターシリーズ]Amazon SNSモバイルプッシュ通知

Management ConsoleからPush

Page 32: [AWSマイスターシリーズ]Amazon SNSモバイルプッシュ通知

Device Tokenを端末から取得

import com.google.android.gms.gcm.GoogleCloudMessaging;

private GoogleCloudMessaging gcm;

gcm = GoogleCloudMessaging.getInstance(this);

token = gcm.register(getString(R.string.project_number));

Page 33: [AWSマイスターシリーズ]Amazon SNSモバイルプッシュ通知

Management ConsoleからPush

CSVによるバルク登録機能も。ただし上限は2MBまで。

Page 34: [AWSマイスターシリーズ]Amazon SNSモバイルプッシュ通知

Management ConsoleからPush

Push from Management Console

Page 35: [AWSマイスターシリーズ]Amazon SNSモバイルプッシュ通知

Management ConsoleからPush

Page 36: [AWSマイスターシリーズ]Amazon SNSモバイルプッシュ通知

Java BatchアプリからPush

Page 37: [AWSマイスターシリーズ]Amazon SNSモバイルプッシュ通知

Java BatchアプリからPush

『AWS SDK提供のSNSライブラリでメッセージをPush』

• AWSのCredential(AccessKeyID と SecretAccessKey)でAmazon SNS用のClientオブジェクトを生成

• Google apiのキー, Device Token, 送信メッセージを定義

• 各プラットフォーム(Android, Apple, Kindle)用オブジェクトを生成

• 送信先デバイスのEndpointを生成

• Endpointにメッセージを送信

Page 38: [AWSマイスターシリーズ]Amazon SNSモバイルプッシュ通知

Java BatchアプリからPush

• 各プラットフォーム(Android, Apple, Kindle)用オブジェクトを生成

CreatePlatformApplicationRequest platformApplicationRequest =

new CreatePlatformApplicationRequest();

Map<String, String> attributes = new HashMap<String, String>();

attributes.put("PlatformPrincipal", principal);

attributes.put("PlatformCredential", credential);

platformApplicationRequest.setAttributes(attributes);

platformApplicationRequest.setName(applicationName);

platformApplicationRequest.setPlatform(platform.name());

CreatePlatformApplicationResult platformApplicationResult =

snsClient.createPlatformApplication(platformApplicationRequest);

• Google: GCMでは使用しない

• Apple: Certificate(pem)

• Kindle: Client ID

• Google: apisのキー

• Apple: ClientKey(pem)

• Kindle: Client Secret

Page 39: [AWSマイスターシリーズ]Amazon SNSモバイルプッシュ通知

Java BatchアプリからPush

• 送信先デバイスのEndpointを生成

String applicationArn = platformApplicationResult.getPlatformApplicationArn();

CreatePlatformEndpointRequest platformEndpointRequest =

new CreatePlatformEndpointRequest();

platformEndpointRequest.setCustomUserData(customData);

platformEndpointRequest.setToken(platformToken);

platformEndpointRequest.setPlatformApplicationArn(applicationArn);

CreatePlatformEndpointResult platformEndpointResult =

snsClient.createPlatformEndpoint(platformEndpointRequest);

端末から取得した

デバイスのトークン

プラットフォーム情報

Page 40: [AWSマイスターシリーズ]Amazon SNSモバイルプッシュ通知

Java BatchアプリからPush

• Endpointにメッセージを送信

PublishRequest publishRequest = new PublishRequest();

Map<String, String> messageMap = new HashMap<String, String>();

messageMap.put(platform.name(), getPlatformSampleMessage(platform));

publishRequest.setTargetArn(platformEndpointResult.getEndpointArn());

publishRequest.setMessageStructure("json");

message = jsonify(messageMap);

publishRequest.setMessage(message);

PublishResult publishResult = snsClient.publish(publishRequest);

messageをセットしてpublish

各プラットフォームを意識せず

統一のインターフェースでシンプルにpush可能

Page 41: [AWSマイスターシリーズ]Amazon SNSモバイルプッシュ通知

Java BatchアプリからPush

Page 42: [AWSマイスターシリーズ]Amazon SNSモバイルプッシュ通知

Event管理の設定

”Endpointの追加/削除/更新”および”送信失敗”という

Eventが発生した場合、設定を行うことで検知が可能になります

Page 43: [AWSマイスターシリーズ]Amazon SNSモバイルプッシュ通知

Amazon SNS

Mobile Push

まとめ:

• クロスプラットフォームプッシュ通知 (Apple, Google, Amazon)

• 1月100万リクエスト無料、以降は100万ごとに$1.00

• 堅牢性と信頼性とスケーラビリティを兼備

• 簡単なトークン管理

参考情報:

• SNSの詳細: http://amzn.to/179ee7r

• はじめ方およびサンプルアプリ: http://amzn.to/15rs1DV