iOSアプリ開発者から見たMobile Hub

  • View
    1.425

  • Download
    0

  • Category

    Software

Preview:

Citation preview

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対応

正式版リリースを 待ちましょう!

ご清聴ありがとうございました