この記事は全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
データを保管できたり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づくりを開始します。
■ 自作iPhoneアプリ 好評発売中!
・フォルメモ - シンプルなフォルダつきメモ帳
・ジッピー電卓 - 消費税や割引もサクサク計算!
■ LINEスタンプ作りました!
毎日使える。とぼけたウサギ