マーケターのプログラミング日記

東京、シンガポールを経てシリコンバレーで働く、マーケター。英語、プログラミング、データ分析は次世代マーケターの必須スキルだと信じて進む。

Google Analytics:実装する

前回まででFacebook SDKの計測用SDKの実装がわかったので、本日からGoogle Analyticsを攻める。Web解析用として普段仕事で使っているが、アプリ用があることは最近まで知らなかった。勉強不足です。

1) Google Analyticsのアカウントを作成し、トラッキングIDを取得する

f:id:yuyutata:20150523182746p:plain

 

2) Downloads - iOS SDK - Google Analyticsから、iOS SDKをダウンロードする

3) CoreData.frameworkと、SystemConfiguration.frameworkを使用するため、以下3つのframeworkをプロジェクトに追加する

  • CoreData.framework
  • SystemConfiguration.framework
  • libz.dylib : Dynamic Libraryと呼ばれるもので、メモリ使用を最適化するためにframeworkを使うときだけダイナミックに、ライブラリーをロードするためのもの。(Introduction)

f:id:yuyutata:20150523184634p:plain

4) ダウンロードしたSDKの中の.hファイルをプロジェクトへdrag&paste

f:id:yuyutata:20150523185313p:plain

5) .hファイルはObjective-Cで記述されているため、swiftプロジェクトとブリッジするためにブリッジヘッダを作成

File --> New --> File --> header fileの手順で.hファイル作成。作成したheader fileに、Google Analyticsのファイルをimportする記述を加える。

f:id:yuyutata:20150523191758p:plain

6) Build Settingsから、ブリッジヘッダーの場所を記入

ヘッダーファイルの名前だけでなく、拡張子もつける必要あり!ここハマりましたorz..

f:id:yuyutata:20150523192911p:plain

 

7) トラッカーを初期化する

Google開発者ページには、

”トラッカーを初期化するには、アプリケーション デリゲートの .m ファイルに GAI.h ヘッダーをインポートして、このコードをアプリケーション デリゲートのapplication:didFinishLaunchingWithOptions: メソッドに追加”

とあります。しかし、Apple開発者ページには、

”Any public Objective-C headers listed in this bridging header file will be visible to Swift. The Objective-C functionality will be available in any Swift file within that target automatically, without any import statements. Use your custom Objective-C code with the same Swift syntax you use with system classes.” 

つまり、Objective-Cとブリッジされているときは、Swiftにおいて、GAI.hヘッダーをimportする必要はないということです。

というわけで、goole開発者ページにのっているObjective-Cの初期化コードをSwiftで記述しなおして、App.Delegate.swiftに入れます。

 

8) ハマった。。(3時間経過。。)

Undefined symbols for architecture arm64:
  "_OBJC_CLASS_$_GAI", referenced from:
      __TMaCSo3GAI in AppDelegate.o
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

 

9) ライブラリーにもう2つframeworkを追加

libGoogleAnalyticsServices.a : Google SDKの中にはいっている

libsqlite3.0.dylib : x-codeにはいっている

f:id:yuyutata:20150523201100p:plain

 

10) おつかれさまでした

 デバッグコンソールはこんな感じ。

2015-05-23 19:35:34.326 test_1[26671:1323201] VERBOSE: GoogleAnalytics 3.12 +[GAITrackerModel initialize] (GAITrackerModel.m:88): idfa class missing, won't collect idfa

2015-05-23 19:35:34.449 test_1[26671:1323201] INFO: GoogleAnalytics 3.12 -[GAIReachabilityChecker reachabilityFlagsChanged:] (GAIReachabilityChecker.m:159): Reachability flags update: 0X000002

2015-05-23 19:35:54.376 test_1[26671:1323413] INFO: GoogleAnalytics 3.12 -[GAIBatchingDispatcher hitsForDispatch] (GAIBatchingDispatcher.m:368): No pending hits.

 

 雑感

トータルで5時間も費やしてしまった。。Googleの開発者ページは、Facebookに比べて不親切だ。そもそもGoogleがSDKで提供している、libGoogleAnalyticsServices.a に対する記述は一切なかったし、libsqlite3.0.dylibも、エラー見ながら手探りでちょとまじ疲れた。

Swift対応が待たれる。SDKのバージョン変わって入れなおす度にこんなことを手探りでやっていたら(´д`)

次回は、実際にコードを入れて、計測用ダッシュボードを確認していきたいです。

 

知識的課題

ここは、後輩のこーちゃんらぶりーべいびーに解説してもらいたい。

CoreDate.framework ってなんのため?

SystemConfiguration.framework ってなんのため?

libsqlite3.0.dylibとは? vs  libz.dylib