AWS MobileHub Swift 版 のチュートリアル -設定編-


[AWS March 2016 Webinar Series - Getting Started with AWS Mobile Hub]
(https://www.youtube.com/watch?v=i8GZod5Dkt8)から。

## 目次 (別の投稿)

[AWS MobileHub Swift 版 のチュートリアル -ビルド実行](http://qiita.com/tfutada/items/a5b00b74e79abc8b8fd5)
[AWS MobileHub Swift 版 のチュートリアル -Cloud Logic(Lambda)編-](http://qiita.com/tfutada/items/82cf9cf0555619025d4c)
[AWS MobileHub Swift 版 のチュートリアル -NoSQL Database (DynamoDB)編-](http://qiita.com/tfutada/items/3c7729af24fdc980f0b3)

## Mobile Hubとは？

`Mobile Hub`とは、AWSのWebコンソールでポチポチすれば、さまざまなAWSサービスを利用するサンプルプロジェクト(Hello World的)を作ってくれるものです。それに伴う、サーバサイドの面倒な設定(プロビジョニング)もほぼ自動でやってくれます。開発者は、サーバサイドの設定が分からなくてもよく、モバイル側の開発に集中できます。

というものの、現実には、AWS初心者がはじめのとっかかりとして、AWSサービスをざっくり動かして学ぶための、Hello World的プロジェクトを生成するツールでしょうか？あくまで、`Mobile Hub -> Swift`のプロジェクトへのone wayで、書き換えたコードをMobile Hub側に取り込むことはできません。ワンショットの使い捨てになります。
私が初めてAWSを触った時に戸惑ったのは、IAMポリシーの設定です。とあるサービスから別のサービスを呼び出すのにも、いちいち権限の設定が必要です。Mobile Hubは、そのあたりをよしなにやってくれますので、一つはまりポイントがなくなります。

あくまで、AWSサービス側の設定を助けてくれるだけですので、Swiftの知識とか、アップルのPush Notificationの知識とかは必要です。

Mobile Hubでは、[AWSサービス](https://www.expeditedssl.com/aws-in-plain-english)を分かりやすい名前に言い換えています。
自動生成されるコードは、もちろん`AWS SDK`を使用しており、シングルトンのヘルパークラス`AWSMobileHubHelper`でラップしています。ヘルパークラス名もそんな感じになってます。(直接AWS SDKをよんでるとこもありますが。)

|Mobile Hubサービス|対応AWSサービス|説明|
|:--|:--|:--|
|User Sign-in |Cognito | ユーザ認証/認可。Facebook, Google, カスタマイズ。|
|User Data Storage |S3/Cognito Sync | S3はファイルサーバ。Cognito Syncは、Cognito IDに紐付いたキーバリューストア。|
|Push Notifications |SNS | プッシュ通知。Appleのデバイストークンを保持できる。|
|App Analytics |Mobile Analytics | アプリケーションのユーザ利用情報の解析。アプリから、JSONでイベント情報を投げれる。|
|Cloud Logic |Lambda | サーバサイドに、Node.js, Python, Java8をデプロイし、よびだせる。 (DB的に言えば、ストアードプロシージャ)|
|App Content Delivery |S3/CloudFront | CDNサーバ(静的コンテンツ)|
|NoSQL Database|DynamoDB|NoSQLデータベース|

プロジェクト生成後のXcodeのFrameworks
![Screen Shot 2016-06-05 at 9.42.58 AM.png](https://qiita-image-store.s3.amazonaws.com/0/75231/bfd9b8de-08cc-f334-cabb-c762806a664c.png)


## [プロジェクトの作成](https://youtu.be/i8GZod5Dkt8?t=622)

`Mobile Hub`をクリック。
![Screen Shot 2016-06-05 at 8.23.51 AM.png](https://qiita-image-store.s3.amazonaws.com/0/75231/46662498-8425-ec7e-df46-13a72d815244.png)
プロジェクトの新規作成。
![Screen Shot 2016-06-05 at 8.25.39 AM.png](https://qiita-image-store.s3.amazonaws.com/0/75231/0226d888-76ed-bb6a-8eaa-6662a0585b36.png)
プロジェクト名をつける。例) `My Great App`
![Screen Shot 2016-06-05 at 8.28.29 AM.png](https://qiita-image-store.s3.amazonaws.com/0/75231/2e94af12-8b4b-8427-c195-2720e86f3efa.png)

AWSにしてはちゃんとしたUIになってますね。レスポンシブにもなってます。
![AWS_Mobile_Hub.jpg](https://qiita-image-store.s3.amazonaws.com/0/75231/b1dc958c-b3f6-0603-084f-ef08084c0979.jpeg)

## [ユーザ認証/認可の設定](https://youtu.be/i8GZod5Dkt8?t=818)

`User Sign-in`をクリック。
![Screen Shot 2016-06-05 at 8.36.21 AM.png](https://qiita-image-store.s3.amazonaws.com/0/75231/2b577b1c-ef44-7977-d933-1d682ff603a5.png)
`Sign-in is optional`を選択。
認証処理はFacebookを指定。
![Screen Shot 2016-06-05 at 8.37.59 AM.png](https://qiita-image-store.s3.amazonaws.com/0/75231/69b745c3-4526-ba9f-ff1a-afece2bd3b1e.png)

Facebook App IDを指定する必要があるため、別窓でご自身のFacebookを開きます。
`開発者 > アプリを管理`をクリック。
![Screen Shot 2016-06-05 at 8.40.57 AM.png](https://qiita-image-store.s3.amazonaws.com/0/75231/573ed8f5-c29a-9b87-d1e2-4e42b036ba7b.png)

`新しいアプリを追加`をクリック。`iOS`を選択。
![すべてのアプリ_-_開発者向けFacebook.jpg](https://qiita-image-store.s3.amazonaws.com/0/75231/d5089357-e9a3-e866-6442-6103c4936ccc.jpeg)

新規プロジェクトができます。例) `My AWS App1`
後の手順はすっ飛ばして、`Skip Quick Start`をクリック、
![Quick_Starts_-_開発者向けFacebook.jpg](https://qiita-image-store.s3.amazonaws.com/0/75231/592c08da-6502-2408-04ad-775bce21048e.jpeg)

APP IDを覚えてください。
設定をクリック。
![My_AWS_App1_―_ダッシュボード_-_開発者向けFacebook.jpg](https://qiita-image-store.s3.amazonaws.com/0/75231/f3860975-54c1-12d5-c5d5-76c315bf563d.jpeg)

`プラットフォームを追加`をクリック。iOSを選択。
![My_AWS_App1_―_設定_-_開発者向けFacebook.jpg](https://qiita-image-store.s3.amazonaws.com/0/75231/b83b8b51-46bf-6acc-e155-0f41884d3e75.jpeg)

バンドルIDに、`com.amazon.MySampleApp`と指定。(Mobile Hubのデフォ。もちろん、変更できますが。)
![Screen Shot 2016-06-05 at 8.56.31 AM.png](https://qiita-image-store.s3.amazonaws.com/0/75231/e325ee7b-2a05-8690-aedd-de9e5613845c.png)

AWSコンソールに戻り、覚えたFacebook App IDを設定して、保存。
`Resources`をクリック。
![AWS_Mobile_Hub.jpg](https://qiita-image-store.s3.amazonaws.com/0/75231/75771c48-a08c-5521-991d-f22424977d81.jpeg)
裏でMobile Hubが、Cognito Identity PoolとIAMロールを作ってくれたのが分かります。
![AWS_Mobile_Hub.jpg](https://qiita-image-store.s3.amazonaws.com/0/75231/51c25f1c-23a8-3fb2-8524-8734550e47cd.jpeg)

リンクをたどると、Cognitoのコンソールにジャンプします。
ちゃんと、Authentication Providerに、Facebookが設定されてるのが分かります。
こうしたプロビジョニングを勝手にやってくれますというのが、Mobile Hubです。
![Editing_mygreatapp_MOBILEHUB_1429908301_-_Amazon_Cognito_-_Amazon_Web_Services.jpg](https://qiita-image-store.s3.amazonaws.com/0/75231/6a04a137-03ee-d880-54f5-efd9e26bc39d.jpeg)


この辺りでだんだんスクショを取るのが面倒になってきましたので、あとは下記リンクから、ビデオをご覧ください...

[User Data Storage](https://youtu.be/i8GZod5Dkt8?t=1080)
[App Analytics](https://youtu.be/i8GZod5Dkt8?t=1128)
[Push Notifications](https://youtu.be/i8GZod5Dkt8?t=1256)
[Cloud Logic](https://youtu.be/i8GZod5Dkt8?t=1317)
[App Content Delivery](https://youtu.be/i8GZod5Dkt8?t=1506)

ビデオの製作時点では、NoSQL Database (DynamoDB)はサポートしてなかったようですね。。。

[ビルド編](http://qiita.com/tfutada/items/a5b00b74e79abc8b8fd5)に続く。