ちょっと話題の記事

これから始める Amazon Mobile Analytics 入門

2014.12.31

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Amazon Mobile Analytics

Amazon Mobile Analytics はアプリケーションの利用に関する情報の収集や可視化、それに基づくユーザへのエンゲージメントや収益化などを手助けするサービスです。 AWS Mobile SDK または REST API を通じてクライアントからデータを収集し、解析結果を Management Console に表示して確認したり、JSON 形式で書き出すことができます。

mobile-analytics-02

今回は Amazon Mobile Analytics について、どのように利用するか、またどのような機能があるか改めて調べることにしました。

Amazon Mobile Analytics を使ってみよう

Amazon Mobile Analytics を使い始める上で必要な手順は下記の通りです。

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

Amazon Cognito の Identity Pool の作成

Mobile Analytics を利用するには、AWS にアクセスするための Credential をクライアントで取得する必要があります。Credential の取得は Amazon Cognito を利用するのが一般的です。Cognito では1アプリにつき1つの Identity Pool というものを作成します。Identity Pool の作成方法は以下の記事にまとめていますので、こちらをご参照ください。

ウィザード通りに Identity Pool を作成するとデフォルトの IAM Role も作成されますが、Policy を確認してみると既に Mobile Analytics に必要な Action が Allow されていることが分かります。

{
    "Version": "2012-10-17",
    "Statement": [{
        "Action": [
            "mobileanalytics:PutEvents",
            "cognito-sync:*"
        ],
        "Effect": "Allow",
        "Resource": [
            "*"
        ]
    }]
}

Cognito と Mobile Analytics はセットで使いましょう、ということですね!

Amazon Mobile Analytics App の作成

次に Amazon Mobile Analytics の App を作成します。次の URL を開く (または Mobile Analytics のトップページから「Add An App」を選択する) と作成ウィザードが始まります。

mobile-analytics-01

作成完了後、App ID が付与されるのでメモしておいてください。

Amazon Mobile Analytics に送信する

次にアプリ側の実装です。今回は iOS を対象とします。まず CocoaPods で AWS Mobile SDK をインストールしましょう。

pod 'AWSiOSSDKv2'

pod install でインストール完了です。次に、Cognito の認証処理と Mobile Analytics の初期処理を AppDelegate に追加します。

#import "AppDelegate.h"
#import <AWSiOSSDKv2/AWSCore.h>
#import <AWSiOSSDKv2/AWSMobileAnalytics.h>

@interface AppDelegate ()

@end

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    
    // Cognito の認証
    AWSCognitoCredentialsProvider *credentialsProvider =
    [AWSCognitoCredentialsProvider credentialsWithRegionType:AWSRegionUSEast1
                                                   accountId:@"xxxxxxxxxxxx"
                                              identityPoolId:@"us-east-1:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
                                               unauthRoleArn:@"arn:aws:iam::xxxxxxxxxxxx:role/Cognito_SampleAppUnauth_DefaultRole"
                                                 authRoleArn:@"arn:aws:iam::xxxxxxxxxxxx:role/Cognito_SampleAppAuth_DefaultRole"];
    
    AWSServiceConfiguration *configuration = [AWSServiceConfiguration configurationWithRegion:AWSRegionUSEast1
                                                                          credentialsProvider:credentialsProvider];
    [AWSServiceManager defaultServiceManager].defaultServiceConfiguration = configuration;
    
    // Mobile Analytics の設定
    [AWSMobileAnalytics mobileAnalyticsForAppId: @"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"];
    
    return YES;
}

end

Cognito の認証データを AWSServiceConfiguration のコンストラクタ引数に渡し、生成したインスタンスを AWSServiceManagerdefaultServiceConfiguration にセットすることで、以降の処理で AWS サービスのデフォルトの認証プロバイダとして扱われます。最後に AWSMobileAnalyticsmobileAnalyticsForAppId: を呼ぶことで、Mobile Analytics の初期化処理が実行されます。App ID は先ほど取得したものをセットしてください。

カスタムイベントを送信する

上記処理だけで DAU などは取得できますが、それ以外のカスタムイベントを送信したい場合があります。その場合は View Controller に以下のような処理を加えましょう。

#import "ViewController.h"
#import <AWSiOSSDKv2/AWSMobileAnalytics.h>

@interface ViewController ()

@property (strong, nonatomic) AWSMobileAnalytics *analytics;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    self.analytics = [AWSMobileAnalytics mobileAnalyticsForAppId: @"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"];
}

- (IBAction)didPressButton:(id)sender {
    id<AWSMobileAnalyticsEventClient> eventClient = self.analytics.eventClient;
    id<AWSMobileAnalyticsEvent> event = [eventClient createEventWithEventType:@"Button"];
    [event addMetric:@1 forKey:@"PressCount"];
    [eventClient recordEvent:event];
    [eventClient submitEvents];
}

@end

まず始めに登場するのがイベントの送信処理を行う AWSMobileAnalyticsEventClient です。プロトコルですので id 型で扱います。イベントのデータは createEventWithEventType: で作成します。こちらもプロトコルですので id 型で扱います。最後に recordEvent:submitEvents を呼び出してイベントを送信します。

イベントデータについてもう少し見ていきましょう。まずコンストラクタ引数に Event Type を文字列で渡しています。Event Type はイベントの種類を表す値です。イベントをグルーピングして集約する目的で使用されます。さらにイベントに関するデータを addAttribute または addMetric で追加することができます。Attribute は文字列が値となる場合、Metric は数値が値となる場合に使います。

集計データを確認する

以上で Mobile Analytics に送信するまでの手順は完了です。作成したアプリケーションを実行後、Management Console を開くと収集したデータが確認できるはずです(リアルタイムではないので、送信してから反映されるまで少し時間がかかる場合があります)。

mobile-analytics-02

カスタムイベントはこんな感じです。

mobile-analytics-03

集計結果の自動出力を有効にする

Mobile Analytics で収集したデータは Management Console から確認できますが、それだけではなく 集計結果の JSON ファイルを S3 バケットに自動で出力することができます。

自動出力を有効にするには、Mobile Analytics の設定画面に表示されている App 一覧から有効にしたい App にチェックを入れて「Enable Auto Export」をクリックします(設定画面はトップページから歯車マークをクリックで表示できます)。

mobile-analytics-04

次に出力先の S3 バケットの選択です。既存のバケットの利用はもちろん、このウィザードで新規作成することもできます。

mobile-analytics-05

次に Mobile Analytics が出力処理を実行するときに使用する IAM Role を設定します。ここもウィザード上で新規作成することができます。

mobile-analytics-06

自動生成された IAM Role は次の通りです。対象の S3 バケット配下への Put のみ Allow されています。

{
  "Statement": [
    {
      "Resource": [
        "arn:aws:s3:::mobile-analytics-12-31-2014-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
        "arn:aws:s3:::mobile-analytics-12-31-2014-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/*"
      ],
      "Action": [
        "s3:PutObject",
        "s3:PutObjectAcl",
        "s3:PutObjectVersionAcl"
      ],
      "Effect": "Allow"
    }
  ],
  "Version": "2012-10-17"
}

以上で設定完了です。「Return to App Management」をクリックすると Mobile Analytics の設定画面に戻ります。

mobile-analytics-07

設定画面を見てみると、指定した App の Auto Export に S3 が設定されていることが確認できます。

mobile-analytics-08

書き出される形式はこちらを参考にしてください。あとは煮るなり焼くなり自由自在です!

まとめ

Amazon Mobile Analytics は導入が非常に簡単なので、これだけの用途でも AWS Mobile SDK を導入して利用する価値は十分あると思います。既に AWS Mobile SDK を利用しているアプリはもちろん、既存のアプリの計測用途として活用してみてはいかがでしょうか?Google Analytics との併用もかなり効果的ですし、面白いと思います!

本ブログを持ちまして2014年は書き納めです。今年は AWS × モバイルの未来を大きく感じた年だったと思います。来年も更なる成長に期待ですね!

ということで、2014年もお世話になりました。それでは皆様、良いお年を!

参考