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

22,048 views

Published on

1 Comment
65 Likes
Statistics
Notes
No Downloads
Views
Total views
22,048
On SlideShare
0
From Embeds
0
Number of Embeds
1,065
Actions
Shares
0
Downloads
138
Comments
1
Likes
65
Embeds 0
No embeds

No notes for slide

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

  1. 1. AWSマイスターシリーズ番外編 Amazon SNS モバイルプッシュ通知 2013.09.17 アマゾン データ サービス ジャパン株式会社 ソリューション アーキテクト 安川 健太 篠原 英治
  2. 2. 今日のAgenda モバイルプッシュ通知について Amazon SNSモバイルプッシュ通知機能 • 機能概要 • SDK, IDE • 料金・無料使用枠 Amazon SNSでモバイルプッシュ通知を使うまで Q&A
  3. 3. モバイルプッシュならアプリが起動していなくても通知が 可能 • ユーザは通知を受け取るか否か 設定可能 • 特定のデバイス上の特定のアプリ にのみ通知する事も • 送るのは短いメッセージ: 読んで 無視するも、アプリを起動するも
  4. 4. クラウドから特定のデバイス上の特定のアプリに通知可 クラウド上の プログラム モバイル・アプリ
  5. 5. 通知は各プラットフォーム独自の仕組みで送信 クラウド上の プログラム モバイルアプリ モバイル プラットフォーム (e.g. Apple, Google, Amazon)
  6. 6. 開発者側でデバイスごとのトークンおよびユーザの受信設定を管理 プラットフォーム トークンの登録 ト ー ク ン へ の フィードバック
  7. 7. 通常プラットフォームごとに通知の方法は異なる Apple APNS Google GCM Amazon ADM • 異なるAPI • 異なる機能 • 異なるフィードバック機構
  8. 8. 一般に数百万のデバイスへの通知の管理運用は大きな問題に クラウド上の プログラム プラットフォーム モバイルアプリ
  9. 9. そのため、プラットフォームごとのAPIを抽象化した中間プロバイダを 利用するのが一般的 モバイルアプリ中間プロバイダ
  10. 10. 開発者側でプラットフォームを抽象化するサービスを利用することで 得られるもの、得られないもの  どのプラットフォーム上の アプリのユーザでも抽象化 出来る  信頼性のある通知のため のトークンは管理可能  運用の複雑さの回避  スケーラビリティの確保の  コスト – プラットフォーム 側が無料だとしても
  11. 11. Amazon SNS Mobile Pushはプラットフォーム横断型プッシュ通知 のための中間マネージドサービス Amazon SNS Mobile Push Apple Devices Google Devices Amazon Kindle Fire Devices
  12. 12. Apple Kindle Fire Kindle Fire Google Publish Apple Kindle Fire Kindle Fire Google Publish SNSならプラットフォーム特有のメッセージペイロードを送ることも可 一度のPublish指示であらゆる端末へ プラットフォームそれぞれに異なる ペイロードを送信
  13. 13. デバイスごとに異なるメッセージを送ることも、グループに一斉 通知をすることも可 Publish Publish Publish Publish デバイスごとの直接通知 パートナー様を通じた場合等のシナリオ 1SNSトピックの 最大サイズは10,000 (2013年8月現在)
  14. 14. メッセージサイズの上限はプラットフォームごと • 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
  15. 15. SNSは各フラットフォームからのフィードバックを基にトークンの 入れ替えや無効化を自動実行 Amazon SNS Mobile Push トークンの登録 トークン フィードバック クラウド上 のアプリ ケーション • デバイスごとに安定 したエンドポイントを 提供 • トークンフィードバッ クは参照可能 (必ずしも参照しなくても 利用可)
  16. 16. SNSのスケーラビリティならアプリが必要とする分だけの通知をいつ でも送信可能 • 数通のメッセージから億単位のメッセージまで • 数個のデバイスから億単位のデバイスまで ...これらを設定管理の手間なしで ...堅牢性や信頼性を犠牲にすることなく
  17. 17. 広範な言語とプラットフォームをカバーするSDKとIDE お好みの言語やプラットフォームのSDKを選択 …そしてお好みのIDEに統合 Eclipse Visual Studio CLI Powershell Android iOS Java nodeJS .NET PHP Python Ruby
  18. 18. SNSモバイルプッシュ通知はコンソールからでも利用可 • 簡単な手順でクロスプラット フォームな通知を実装可 • トークンをバッチ入力するこ とで既存のデバイスの一斉 登録も可
  19. 19. 料金・無料使用枠 1月あたり100万リクエスト • 100万のPublish(アプリSNS) • 100万のモバイルプッシュ通知(SNS各プラットフォーム) 以降は100万リクエスト当たり $1.00 • $0.50 で 100万publish (アプリSNS) • $0.50 で 100万モバイルプッシュ通知(SNS各プラットフォーム) Note: - SNSトピック経由で送る方が全体の費用は削減できる - 各プラットフォームへの支払いは特に無し
  20. 20. Amazon SNS Mobile Push ここまでのまとめ: • クロスプラットフォームプッシュ通知 (Apple, Google, Amazon) • 1月100万リクエスト無料、以降は100万 ごとに$1.00 • 堅牢性と信頼性とスケーラビリティを兼備 • 簡単なトークン管理
  21. 21. 今日のAgenda • モバイルプッシュ通知について • Amazon SNSモバイルプッシュ通知機能 – 機能概要 – SDK, IDE – 料金・無料使用枠 • Amazon SNSでモバイルプッシュ通知を使うまで • Q&A
  22. 22. https://s3.amazonaws.com/codesamples/sns/latest/snsmobilepush.zip サンプルアプリケーション Androidアプリ PushリクエストBatch
  23. 23. AndroidアプリをEclipseでBuild 必要なライブラリ • Android SDK • Google Play Services
  24. 24. Google apis設定およびKeyの取得 https://code.google.com/apis/console/
  25. 25. Androidアプリを起動
  26. 26. USB接続した実機で実行
  27. 27. インストールされたAndroidアプリ
  28. 28. インストールされたAndroidアプリ
  29. 29. Management ConsoleからPush
  30. 30. Management ConsoleからPush
  31. 31. Management ConsoleからPush
  32. 32. Device Tokenを端末から取得 import com.google.android.gms.gcm.GoogleCloudMessaging; private GoogleCloudMessaging gcm; gcm = GoogleCloudMessaging.getInstance(this); token = gcm.register(getString(R.string.project_number));
  33. 33. Management ConsoleからPush CSVによるバルク登録機能も。ただし上限は2MBまで。
  34. 34. Management ConsoleからPush Push from Management Console
  35. 35. Management ConsoleからPush
  36. 36. Java BatchアプリからPush
  37. 37. Java BatchアプリからPush 『AWS SDK提供のSNSライブラリでメッセージをPush』 • AWSのCredential(AccessKeyID と SecretAccessKey)でAmazon SNS用のClientオブジェク トを生成 ↓ • Google apiのキー, Device Token, 送信メッセージを定義 ↓ • 各プラットフォーム(Android, Apple, Kindle)用オブジェクトを生成 ↓ • 送信先デバイスのEndpointを生成 ↓ • Endpointにメッセージを送信
  38. 38. 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
  39. 39. 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); 端末から取得した デバイスのトークン プラットフォーム情報
  40. 40. 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可能
  41. 41. Java BatchアプリからPush
  42. 42. Event管理の設定 ”Endpointの追加/削除/更新”および”送信失敗”という Eventが発生した場合、設定を行うことで検知が可能になります
  43. 43. Amazon SNS Mobile Push まとめ: • クロスプラットフォームプッシュ通知 (Apple, Google, Amazon) • 1月100万リクエスト無料、以降は100万ごとに$1.00 • 堅牢性と信頼性とスケーラビリティを兼備 • 簡単なトークン管理 参考情報: • SNSの詳細: http://amzn.to/179ee7r • はじめ方およびサンプルアプリ: http://amzn.to/15rs1DV

×