iosアプリ開発者から見たmobile hub
TRANSCRIPT
iOSアプリ開発者から見た Mobile Hub
クラスメソッド × スマートニュース AWS NightKato Jun, Classmethod
自己紹介
• 加藤 潤(かとう じゅん)
• クラスメソッド モバイルアプリサービス部所属
• 2015年10月 JOIN
• iOSアプリ開発が主なお仕事
• ブログ:http://dev.classmethod.jp/author/kato-jun/
本日お話しすること
Mobile Hubを使ってみよう!
まずは概要
Mobile Hub
• AWSのモバイルサービスの一種
• モバイルアプリ向けのAWSサービスを素早く構築
• 2015年10月のre:Invent 2015で発表された
• 2016年1月現在 ベータ版
Mobile Hubの機能
• 認証
• プッシュ通知
• コンテンツ配信
• データストレージ
• アプリ分析
• クラウドロジック
• アプリのテスト
認証
• Powered by Amazon Cognito
• Facebookなどのパブリックログインプロバイダを通じてユーザーに一意のアイデンティティを付与
• 未認証(匿名)ユーザーもサポート
プッシュ通知
• Powered by Amazon SNS
• 複数のプッシュ通知サービスに対応(APNS、GCMなどなど)
• ユーザー個別 または一斉送信
コンテンツ配信
• Powered by Amazon S3
• Powered by Amazon CloudFront
• 画像や動画データの配信
• 低レイテンシー、高速転送(CDN)
データストレージ
• Powered by Amazon Cognito
• Powered by Amazon S3
• ユーザーデータの保存・同期
• 写真などのユーザーファイルの保存
アプリ分析
• Powered by Amazon Mobile Analytics
• アプリの使用状況の収集・可視化
クラウドロジック
• Powered by Amazon Lambda
• サーバー管理不要でモバイルバックエンドを作成
• 実行基盤は全てAWSが管理
• 開発者はアプリケーションロジックに集中できる
アプリのテスト
• Powered by AWS Device Farm
• AWS上で実際のスマートフォンやタブレットを使ってテスト
• 現時点でiOS, Android, Fire OSに対応
今回お話しする機能• 認証
• プッシュ通知
• コンテンツ配信
• データストレージ
• アプリ分析
• クラウドロジック
• アプリのテスト
何はともあれ触ってみる
AWSマネジメントコンソール
Create new mobile project
What is your project name?
Pick and configure features
User Sign-in
認証オプション
今回はSign-in is requiredを選択
認証プロバイダ
2016年1月27日現在、選択できるのはFacebook、Google+、Custom
今回はFacebookを選択
Facebook App ID
Save Summary以下が自動で作られる
• Cognito Identity Pool • IAM Role
Build
Buildシステム要件
• Xcode 7.0以上
Build
Facebookアプリの設定まで書いてある! 😊
Download iOS source package
ファイル名に「objc」ってついてる。
フォルダ構成
• LICENSE.txt・・・ライセンスファイル • MySampleApp・・・アプリのプロジェクトファイル
• READ_ME・・・アプリの説明HTML(WebのBuild画面と同じ内容)
シミュレータで動かす
トップ
Facebookログインボタンがあるだけ
Facebookログイン
SafariのFacebookログイン画面が表示される
認可
いつもの認可画面
ログイン成功使用している機能が一覧表示される (今はUser Sign-inだけ)
User Identity画面下の「Demo User Identity」をタップ
User Identity以下が表示されている
• Facebook ユーザー名 • Facebookプロフィール画像 • Cognito ユーザーユニークID
動くのはわかったので ソースコードを見てみる
Info.plist
ATSの設定があらかじめ組み込まれている☺ すばら!!
SignInViewController
• Facebookログインボタンのある画面のビューコントローラ • Facebookログインボタンタップ時の処理 • AWSSignInProviderTypeにAWSSignInProviderTypeFacebookが指定されて呼ばれる • ログイン処理はカスタムクラスのAWSIdentityManagerで行っている
AWSIdentityManager
• 認証プロバイダのタイプに応じたSignInProvider(この場合はAWSFacebookSignInProvider)を生成してログイン
• ログイン完了時のBlockをプロパティに保持
AWSFacebookSignInProviderログイン済みだったらログイン処理をスキップしてcompleteLoginメソッドを呼ぶ
ログインしてなかったらFBSDKLoginManagerのlogInWithReadPermissionメソッドを呼ぶ ※ FBSDK~はFacebook SDKのクラス
AWSFacebookSignInProvider
FacebookログインとCognitoをリンク
Facebookログインユーザーの名前、プロフィール画像を取得
AWSIdentityManager
AWSCognitoCredentialsProviderにFacebookのアクセストークンを設定
実際にログインできているかCognitoコンソールで確認
Resources
Cognitoコンソール
ちゃんとFacebookログインできている☺
Cloud Logic
Cloud Logic
Enable logic
“hello-world” function
“hello-world” function
キー’key1’で指定された値を返すだけのFunction
Build & Download
シミュレータで動かす
トップ
一覧に「Cloud Logic」が追加された
Cloud Logic画面下の「Demo Cloud Logic」をタップ
Cloud Logic
Lambdaファンクション名
Request
Invoke
Response
動くのはわかったので ソースコードを見てみる
プロジェクト
CloudLogicのビューコントローラが追加されている
CloudLogicViewController
• Requestテキストビューの内容をJSON Dictionaryにしてるだけ
CloudLogicViewController
• AWSCloudLogicのinvokeFunction~メソッドでLambdaファンクションを起動 • 処理完了時のBlockでレスポンスをパースしてテキストビューに表示
AWSCloudLogic
_invokerにパラメータをそのまま渡し、invokeFunctionメソッドを実行
invoker
• プロパティに保持しているAWSLambdaInvokerクラス • AWSLambdaInvokerはAWSLambda.frameworkのクラス
自動生成されたソースコードを見て思ったこと
シングルトン多すぎ… orz
• 必要のないところまでシングルトン • シングルトンによるデメリット(密結合、テスタビリティの低下、etc…)
よって
ヘルパークラスを そのまま使うのは オススメしません
でも
AWS Mobile SDKの使い方は 参考になる
まとめ
• User Sign-in
• Facebookログイン
• Cloud Logic
• iOSアプリからLambdaファンクションを起動
まとめ
• 機能指向でサービスを構成できる
• 2-Tierアーキテクチャ
• モバイルアプリ開発者にとってAWSの敷居がかなり低くなった
• サンプルプロジェクトを参考にAWS Mobile SDKの使い方を学べる
• できることは既存AWSサービスの範囲内
まだβ版
• まだ対応していない機能(Twitterログインなど)
• サンプルプロジェクトのSwift対応
正式版リリースを 待ちましょう!
ご清聴ありがとうございました