Amazon Mobile Analyticsを使ってみる – Android編

2015.07.26

Amazon Mobile Analyticsについて

Amazon Mobile Analyticsとは

Amazon Mobile Analyticsとは、アプリケーションの利用状況を簡単に可視化し、分析するためのサービスです。 AWS Mobile SDK(またはREST API)を使ってクライアントからデータを集め、結果をマネジメントコンソールで表示したり、 S3へ出力したりすることができます。 弊社ブログでもすでにこことかで紹介されていますが、 今回はAndroidから使用する機会があったので、本記事にて再度紹介します。 基本的な流れはここでやってるのと同じで、

1.AWS アカウントの取得 2.Amazon Cognito の Identity Pool の作成 3.Amazon Mobile Analytics App の作成 4.AWS Mobile SDK の導入 5.イベントデータ送信コードの追加

をやっていきます。

Androidで使ってみよう

では実際にAmazon Mobile AnalyticsをAndroidアプリケーションから使ってみます。

Amazon Cognitoとは

Amazon Mobile Analyticsは、AWSにアクセスするためのCredentialを、Amazon Cognitoを使用して取得します。 そのため、ここでAmazon Cognitoについて簡単に説明します。

Amazon Cognitoとは、アカウント管理の面倒な処理を簡単にできるためのサービスです。 ローカルのデータとクラウド上のデータとの同期する機能をもっていたり、 オフラインでも動作するモバイルアプリケーションを作ることが可能になっています。 また、データ同期機能については、複数デバイスにまたがる同期が可能です。

Amazon Cognitoもっている機能は次のとおり。

  • 一意のアイデンティティ管理
  • オフライン機能
  • デバイス間の保存と同期
  • シームレスなゲストアクセス

AmazonやGoogle等のパブリックログインプロバイダを使用した固有識別子の管理や、 オフライン機能、異なるデバイス間での同期機能に加え、未認証ゲストをサポートすることも可能です。

参考:弊社blog内のcognito関連記事

identity poolの作成

まずはcognitoにアクセスして、Identity poolを作成しましょう。

create identity pool

Identity pool nameを入力し、Enable access to unauthenticated identitiesにチェックをつけて、 identity poolを指定します。

Amazon Mobile Analytics Appの作成

次に、Amazon Mobile AnalyticsでMobile Analytics Appを作成します。 ここでApp Nameを入力し、先ほど作成したIdentity Poolを指定します。

create app

Create Appボタンを押すと、下記のようにコード実装方法やライブラリ指定方法を記述したサンプルが表示されます。

ama-sample

Androidアプリの作成

準備ができたので、AndroidアプリでMobile Analytics用コードを実装してみましょう。 (今回はAndroid Studio 1.2.2を使用)

まずは File -> New -> NewProjectで、シンプルなAndroidプロジェクトを作成します。 そして、ここからダウンロードしたファイルを解凍し、中のjarをlibsディレクトリにコピーします。

次に、app/src/build.gradleにaws-android-sdk-mobileanalyticsの依存関係を追加します。

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.android.support:appcompat-v7:22.2.1'
    compile 'com.amazonaws:aws-android-sdk-mobileanalytics:2.2.4'
・
・

AndroidManifest.xmlにも下記のpermissionを追加しましょう。

<br /><br />

最後にActivityにMobile Analyticsの初期化とイベント送信のコードを実装します。 メンバとしてanalytics変数を宣言し、onCreateでMobileAnalyticsManagerを初期化します。

private static MobileAnalyticsManager analytics;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

try {
analytics = MobileAnalyticsManager.getOrCreateInstance(
this.getApplicationContext(),
"",
""
);
} catch (InitializationException ex) {
Log.e(this.getClass().getName(), "Failed to initialize Amazon Mobile Analytics", ex);
}

setContentView(R.layout.activity_main);
}

上記プログラムの「Amazon Mobile Analytics App ID」と「Amazon Cognito Identity Pool ID」は、 Amazon Mobile Analytics Appを作成したときにIntegration Steps ページに書いてあるので、 それをそのままコピーしましょう。

ちなみに、上記コードの記述だけで、基本的な情報(Active User数やSession数)は収集可能になります。

カスタムイベントの実装

基本的な情報は上記コードだけで取得できますが、それだけではあまり効果的な情報は取得できません。 分析に役立つ情報を収集したいなら、カスタムイベントを定義する必要があります。 カスタムイベントは開発者が全部定義する独自のイベントで、任意のタイミングで指定したパラメータを渡すことができ、 収集結果をマネジメントコンソールで確認することもできます。 なお、カスタムイベント数はアプリケーションごとに最大1500個、カスタムイベントごとに設定できる属性の数は20個で、 属性値の数に制限はありません。 参考:http://aws.amazon.com/jp/mobileanalytics/faqs/

ではカスタムイベントを定義してみましょう。 myCustomEvent関数ではStringをうけとり、それを属性としてイベントオブジェクトを作成します。 そして、recordEventを呼ぶことでイベント発生をrecordでストックしておきます。

public void myCustomEvent(String message) {

AnalyticsEvent event = analytics.getEventClient().createEvent("CustomEvent")
.withAttribute("Message", message);
//イベント発生をストックしておく
analytics.getEventClient().recordEvent(event);
}

実際にイベントを発生させたい箇所では、下記のようにmyCustomEvent関数を呼び出します。 適当にボタンをおいてclickイベントでも定義して、その中で呼び出しでもしておけばいいでしょう。

this.myCustomEvent("Hello My Custom Event");

さきほどのrecordEvent関数呼び出しでは、通信はまだ行われません。 実際にイベントを登録するには、submitEvents関数を呼び出します。 下記のように、onPauseでsubmitEventsを呼び出しましょう。

@Override
protected void onPause() {
super.onPause();
if(analytics != null) {
analytics.getSessionClient().pauseSession();
analytics.getEventClient().submitEvents();
}
}

イベント発生のたびにサーバへ通信を行うのは非常にパフォーマンスがよくないので、 このようにpauseなどの、(アプリ動作自体にあまり影響ない)任意のタイミングでイベントを送信するのが推奨されています。

上記コードを実装したら、Androidアプリを起動してイベントを実行します。 アプリを終了させたら、データがMobile Analyticsに送られます。

AWSコンソールでデータを確認する

ではデータを確認しましょう。 Amazon Mobile Analyticsにアクセスし、App Nameを選択してデータを表示してみます。 ユーザー数やセッション数などの通知がふえているのがわかります。

ama-console

Custom Eventsタブをクリックしてみてください。 自分で定義したイベント(ここではCustomEvent)の集計情報をみることができます。 ※カスタムイベントの場合、AWSコンソールで確認するまで30分程度時間がかかる可能性があります

まとめ

今回はAmazon Mobile AnalyticsをAndroidアプリから使ってみました。 次は自動エクスポートを試してみます。

参考サイトなど