[AS3] Parse AnalyticsのiOSのANEを作りたい! 準備編

2014/08/1

この記事は全4回の「Parse AnalyticsのiOSのANEを作りたい!」シリーズの1つです。

[AS3] Parse AnalyticsのiOSのANEを作りたい! 準備編 << イマココ! [AS3] Parse AnalyticsのiOSのANEを作りたい! Static Library編
[AS3] Parse AnalyticsのiOSのANEを作りたい! ActionScript編
[AS3] Parse AnalyticsのiOSのANEを作りたい! ANEビルド編

こんにちは。きんくまです。

ちょっと前に、「ParseのANEを作ろうとしているのだけれど、うまくいかなくて困っています、、。」というご連絡をいただきました。

以前にDropboxのSDKと連携したときの記事を書いたのですが、
>> [AS3 / ANE] Dropbox Sync APIのiOSのANEを作ろうとしてplatform.xmlでハマったところ

このときは、仕事で作ったものだったので、実際のプロジェクトデータはどこにもアップしていませんでした。
今回の完成品はGitHubにアップしてあります。
>> KinkumaDesign/ParseAnalyticsANE

サードパーティのSDKがからんだANEを作るときの、何かの参考になればいいなと思います。
それで今回から何回かに分けて、このParseのANEを作った手順をご紹介したいと思います。

ところでParseって?

Parseっていうのは、MBaaS(Mobile Backend as a Service)とよばれるサービスです。
簡単にいうと、「モバイル向けのサーバー側を用意してあげるから、ユーAPIたたいちゃいなYO!」 という感じにサーバー側のコードをかかずに、利用者はAPI経由でデータをやりとりできます。

>> Parse Mobile App Platform – parse.com‎

parse_fig

データを保管できたりPushNotficationなどできるみたいですが、今回作るのは実装がすごく簡単だったAnalyticsにしました。

Google Analyticsと同じように、任意のイベントでサーバー側のAPIをパラメーターをつけて呼び出してあげれば、Parseの管理画面ですぐに集計結果がわかるという仕組みです。

ネイティブコード

ANEを作り始める前に、Objective-Cで普通に作ってみます。

Parseの登録をして、アプリを追加すると、ApplicationIDとClientIDが発行されます。
まずこいつを使って、初期設定をします。

[Parse setApplicationId:parseAppID clientKey:parseClientKey]

あとは、イベントごとにAPIを呼びます。イベントは例えば、ボタンを押したときや、画面が切り替わったときなどなどAPIを呼ぶタイミングはどこでもOKです。

    NSDictionary *dimensions = @{
                                @"program": @"obj-c",
                                @"ui": @"button",
                                };
    
    [PFAnalytics trackEvent:@"tap" dimensions:dimensions];

ネイティブのコードはこれだけです。おー、すごく短い。
ただ、このままだとANEと連携しにくそうなので、こんなクラスを作りました。

ヘルパークラスをつくる

KKParseAnalyticsController.h

#import <Foundation/Foundation.h>

@interface KKParseAnalyticsController : NSObject

/**
 シングルトンパターンのインスタンスです。このインスタンスを使って呼び出します
 */
+ (KKParseAnalyticsController *)sharedController;

/**
 Parseの初期化をします
 @param appId アプリケーションID
 @param clientKey クライアントキー
 */
- (void)setupParseWithApplicationId:(NSString *)appId clientKey:(NSString *)clientKey;

/**
 トラッキングイベントAPIを呼び出します
 @param eventName イベント名
 @param parameters トラッキングしたいパラメーター。 key1=value1&key2=value2..のように
 作ります
 */
- (void)trackEvent:(NSString *)eventName parameters:(NSString *)parameters;
@end

KKParseAnalyticsController.m

#import "KKParseAnalyticsController.h"
#import <Parse/Parse.h>

@interface KKParseAnalyticsController()
@property (nonatomic, assign) BOOL alreadyParseSetup;
@end

@implementation KKParseAnalyticsController

+ (KKParseAnalyticsController *)sharedController
{
    static KKParseAnalyticsController *sharedInstance = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        sharedInstance = [[self alloc] init];
        sharedInstance.alreadyParseSetup = NO;
    });
    return sharedInstance;
}

- (void)setupParseWithApplicationId:(NSString *)appId clientKey:(NSString *)clientKey
{
    if(self.alreadyParseSetup == NO){
        [Parse setApplicationId:appId clientKey:clientKey];
        self.alreadyParseSetup = YES;
    }
}

- (void)trackEvent:(NSString *)eventName parameters:(NSString *)parameters
{
    if(self.alreadyParseSetup == NO){
        [NSException raise:@"初期化エラー" format:@"Parseの初期化がまだ終わってないよ! setupParseWithApplicationId:clientKey を先に呼び出してね"];
    }
    
    //parametersをパースして、NSDictionaryに変換します
    NSArray *keyValuePairs = [parameters componentsSeparatedByString:@"&"];
    NSMutableDictionary *keyValuePairDic = [[NSMutableDictionary alloc] init];
    for (NSString *keyValuePair in keyValuePairs){
        NSArray *keyValueArr = [keyValuePair componentsSeparatedByString:@"="];
        if(keyValueArr && keyValueArr.count == 2){
            [keyValuePairDic setObject:keyValueArr[1] forKey:keyValueArr[0]];
        }
    }
    [PFAnalytics trackEvent:eventName dimensions:[NSDictionary dictionaryWithDictionary:keyValuePairDic]];
}

@end

やることはかわらず、初期設定+イベントログ発行です。
イベントログ発行のとき、ANEだと配列で値をやりとりすると実装が面倒くさそうなので、URLのパラメータ方式のkey1=value1&key2=value2…にしました。
あと、シングルトンにしてどこからでも、発行できるようにしました。

使い方の例

初期設定

    [[KKParseAnalyticsController sharedController] setupParseWithApplicationId:parseAppID clientKey:parseClientKey];

イベントログ発行

    KKParseAnalyticsController *parseController = [KKParseAnalyticsController sharedController];
    [parseController trackEvent:@"tap" parameters:@"program=obj-c&ui=button"];

とりあえず、これでネイティブだけの場合は完成です。
次回からはこれを使って、ANEづくりを開始します。

LINEで送る
Pocket

自作iPhoneアプリ 好評発売中!
フォルメモ - シンプルなフォルダつきメモ帳
ジッピー電卓 - 消費税や割引もサクサク計算!

ページトップへ戻る