AWS Mobile Application Development

AWSのサービスをモバイルから使うにあたって調べた情報などまとめて行きます。

AndroidとDynamoDB実装方法 (2/4) - Cognito初期設定 -

AWSのNoSQLデータベースDynamoDBをDBとしてデータ操作を行うための基本的な設定のご紹介です。

AndroidとDynamoDB実装方法 (1) - AWS SDKの準備 -に続き、AWS Cognitoの設定を行います。


AWSのサービスをモバイルから使うときは、APIキー等を以前は使用していたと思いますが、現在はCognitoによる認証が基本となります。DynamoDB連携の事前作業として、Congnitoの初期設定を行います。

[目次]

Cognitoとは

Amazon Cognito は、ユーザーの一意の ID を作成したり、独自のユーザープールを使用するかまたはフェデレーテッド ID プロバイダーを使用して認証したりできるサービスです。アプリケーションの設定やゲームの状態などのモバイルユーザーデータを AWS クラウドに保存できます。バックエンドコードの記述やインフラストラクチャの管理は必要ありません。

よくある質問 - Amazon Cognito | AWS

今回の実装のケースで言うと、Android端末からDynamoDBへアクセスする際の認証機能としてCongnitoを使います。ユーザID/PWというような認証ではなく、今回のアプリ用のキーを発行してそのキーがプログラム内に記載されていれば、どんなアプリでもDynamoDBへアクセスすることができるという設定です。

AWSでのモバイル開発での認証方式について

AWSでは以下の通り、モバイル開発においてAWSを使用する場合Cognitoを使用するによう記載されています。アクセスキーをプログラム内に書くやり方も可能ですが、リスクとして、アプリ配布後、クラッカーがプログラムを解析して、プログラム内に記載されているアクセスキーを取得し、悪用することが出来てしまいます。その為、アプリ毎に権限をコントロールできるCognitoを使用することを推奨しています。

暗号化ストレージ内であっても、アクセスキーをアプリに埋め込まないでください。代わりに、Amazon Cognito を使用して、アプリでユーザー ID を管理してください。このサービスでは、AmazonFacebookGoogle、または OpenID Connect (OIDC) に対応している任意の ID プロバイダを使用してユーザーを認証できます。さらに、Amazon Cognito 認証情報プロバイダを使用して、AWS にリクエストを送信するためにアプリが使用する認証情報を管理できます。

docs.aws.amazon.com

アイデンティティプールの作成

AWSコンソールにログインし、「Cognito」サービスを開きます。
f:id:azumami:20161106072759p:plain

開いた画面で「Manage Federated Identities」をクリック。
f:id:azumami:20161106072910p:plain

「Identity Pool Name」に任意の認証グループ名を記載します。その際に「Enable access to unauthenticated identities」にチェックを入れ匿名ユーザのアクセス設定を可能な状態にします。
f:id:azumami:20161106073151p:plain

デフォルトの状態で「Allow」をクリックします。
f:id:azumami:20161106073426p:plain


以下のような認証情報が記載されますので「Get AWS Credentials」の方をテキストでコピーしておきます。
f:id:azumami:20161106073643p:plain

「Store User Data」はCongnitoの機能で端末間のユーザ情報を同期するための同期プログラムですので、この中では使用しません。

以上で、Cognitoの設定は終了です。続いて、DynamoDBの初期設定に進みます。

AndroidとDynamoDB実装方法 (1/4) - AWS SDKの準備 -

AWSのNoSQLデータベースDynamoDBをDBとしてデータ操作を行うための基本的な設定のご紹介です。

以下の4つに小分けてし記載しています。

AndroidとDynamoDB実装方法 (1/4) - AWS SDKの準備 -
AndroidとDynamoDB実装方法 (2/4) - Cognito初期設定 -
AndroidとDynamoDB実装方法 (3/4) - DynamoDB初期設定 -
AndroidとDynamoDB実装方法 (4/4) - プログラミング -

1.Androidプロジェクトの作成

普通に以下のメニューから新規作成。「Start a new Android Studio project」をクリック。
f:id:azumami:20161106065354p:plain

任意のアプリケーション名に設定し、「Next」をクリック。
f:id:azumami:20161106065407p:plain


「Phone and Table」を選択し、API16のもの(デフォルト)とし、「Next」をクリックします。本記事で使用しているAWS SDK 2.3.3はAWSのサイトにて「Android 2.3.3 (API Level 10) or higher. 」と記載があるのでそのようにしています。
f:id:azumami:20161106065421p:plain


このサンプルでは「Blank Activity」としています。 「Next」をクリック。
f:id:azumami:20161106065431p:plain


デフォルトのまま、「Finish」を選択します。
f:id:azumami:20161106065440p:plain

2.AWS Mobile SDK for Androidのダウンロード

プロジェクトを作成している間に次の作業を並列して行います。こちらのサイトよりAWS Mobile SDK for Androidをダウンロードする。
f:id:azumami:20161106065451p:plain


ダウンロードされたファイルを展開しておきます。AndroidとDynamoDB連携で、今回利用するのは、以下のライブラリです。

aws-android-sdk-cognito-2.3.3.jar
aws-android-sdk-core-2.3.3.jar
aws-android-sdk-ddb-2.3.3.jar
aws-android-sdk-ddb-mapper-2.3.3.jar

3.AWS Mobile SDK for Androidのプロジェクトへの設定

Android Studioのプロジェクトが開いたら、メニューから、「Project」を選択します。
ツリーを開くと「libs」があるので上図のフォルダ内のファイルをドラッグアンドドロップで「libs」に入れる。
f:id:azumami:20161106065540p:plain


以下の状態で「OK」を押す。
f:id:azumami:20161106065846p:plain


以下の状態で「OK」を押す。
f:id:azumami:20161106065859p:plain


以下の状態で「OK」を押す。
f:id:azumami:20161106065912p:plain


以下の状態になることを確認します。
f:id:azumami:20161106065921p:plain


続いて、メニューを「Project」から「Android」に戻し、「build.gradle」をダブルクリックします。「dependencies」に以下の部分を記載します。その後、右上に「Sync Now」が表示されるのでクリックします。30秒程度時間が掛かりますので待ちます。
f:id:azumami:20161106065950p:plain

compile 'com.amazonaws:aws-android-sdk-core:2.3.+'
compile 'com.amazonaws:aws-android-sdk-ddb:2.3.+'
compile 'com.amazonaws:aws-android-sdk-ddb-mapper:2.3.+'
compile 'com.amazonaws:aws-android-sdk-cognito:2.3.+'

続いて、app > manifests > AndroidManifest.xml に「」を設定し、インターネットを通じたアプリケーションであるこを定義します。
f:id:azumami:20161106065710p:plain

これでAWS SDK とプロジェクトの準備は完了です。続いてAWS ConsoleにログインしてCognitoの設定を行います。

Android Studioでログ出力する方法(logcat)

Androidアプリケーション開発中にログをデバッグのために出力したい場合が頻繁にあるかと思います。その用途向けにAndroid Studioで提供されているログの出力方法を記載します。

1. Logクラスを使用する

Android開発においてLogクラスが提供されており、以下のメソッドが提供されています。

Log.v:VERVOSE(すべてのログ情報)
Log.d:DEBUG(デバッグ情報)
Log.i:INFO(情報)
Log.w:WARN(警告)
Log.e:ERROR(致命的な問題)

構文は以下の通りです。

Lod.v(String tag, String msg);

エラー時の例外を出力させたい場合は、第3引数に以下のように指定します。

Lod.v(String tag, String msg, Throwable tr);

2.Logcat表示方法

メニュー > View > Android Monitor を選びます。

f:id:azumami:20161106064521p:plain

画面下にlogcatが表示されます。ここに1.のLogクラスで出力されたログが表示されます。

f:id:azumami:20161106064546p:plain

3.使用例

String test = "this is custom message";Log.v("テスト", "これはメッセージです「" + test + "」終わり");

f:id:azumami:20161106064611p:plain

4.メソッド毎の出力例

String test = "this is custom message";
Log.v("テスト", "これはメッセージです「" + test + "」終わり");
Log.d("テスト", "これはメッセージです「" + test + "」終わり");
Log.i("テスト", "これはメッセージです「" + test + "」終わり");
Log.w("テスト", "これはメッセージです「" + test + "」終わり");
Log.e("テスト", "これはメッセージです「" + test + "」終わり");

f:id:azumami:20161106064632p:plain

5.logcatの使用方法

以下の画像の通りプルダウンから、Logクラスのメソッド別にフィルタリングできます。ただ注意点として特定のLogクラスを表示するのではなく、指定したLogクラスの重要度が高いものを表示します。例えば、「Warn」を指定すると「Warn」、「Error」、「Assert」が表示されます。

また検索窓から文字列検索ができます。

f:id:azumami:20161106064649p:plain

他、主なツールアイコンの意味は以下となります。

f:id:azumami:20161106064719p:plain