アクセス解析

Swift版iOSアプリをGoogleアナリティクスで計測する手順(v3.17)

前回、Objective-c版のGoogleアナリティクス実装方法を解説しましたが、今回ははりきってSwift版のGoogleアナリティクス実装方法をご紹介します。

バージョン 3.17のiOS SDKでも改めて検証しました。
Googleより、Firebaseが推奨になりましたが、Webサイトと同様の分析するには、Firebaseではかなり役不足です。そのため、アップデート終了していますが、Google Analytics SDKでの計測がアプリ行動分析には有効です。

Objective-c版iOSアプリGoogleアナリティクス実装方法

この記事は、Google公式ヘルプを参考に作成しています。
developers.google.com/analytics/devguides/collection/ios/v3/?ver=swift

ただ、Swift版に関しては、本家のGoogleヘルプがやや不親切でしたので実際に実装しながら解説します。スクリーントラッキングのみで、イベントトラッキングなどの実装方法は無いかと思います。

今回、テストでGoogleアナリティクス計測に使ったのは、開発ツールであるXcodeのiOSのサンプルゲームアプリです。起動すると「Hello, World!」と表示され、タッチすると飛行機が出現します。

image03

アプリを起動して上記のスクリーンが表示されときにスクリーン計測を実装します。
スクリーンを表示するとGoogleアナリティクスのリアルタイムレポートでスクリーン名が表示されます。

image07

アプリに戻りスクリーンをタッチすると飛行機が出現します。
飛行機が現れたタイミングでイベントを計測します。

image04

Googleアナリティクスのリアルタイムレポート>イベントでイベントが計測されました。

image11

では早速、Googleアナリティクスの実装方法です。

Googleアナリティクスのプロパティ開設

アプリ計測用のGoogleアナリティクスの解説は簡単なのと他のサイトでも解説しているかと思いますので割愛します。

Webサイトとモバイルアプリの計測データは共存できないため、必ず別プロパティで新規にプロパティを開設する必要があります。

image09

SDKダウンロード

続いて、iOSアプリ用のGoogleアナリティクスSDKをダウンロードします。

Google アナリティクス開発者サービス SDK | iOS 向けアナリティクス | Google Developers
developers.google.com/analytics/devguides/collection/ios/v3/sdk-download#download_sdk

ここではSDKバージョン3.15を例にご説明します。
最新のバージョンアップデートされ、手順が異なることがあります。

「GoogleAnalyticsServicesiOS_3.15.zip」をダウンロードします。

SDKのコピー

XcodeでiOSアプリのプロジェクトを開きます。
Googleアナリティクスのライブラリをプロジェクトに導入します。

[ul]libGoogleAnalyticsServices.a
GoogleAnalytics>Library配下の各種ヘッダーファイル[/ul]

ヘッダーファイルは必要なものだけ導入します。わからない場合はすべて導入しても問題ないかと思います。

test1

プロジェクトにフォルダを作成して、ファイル群を格納します。

test2

ファイルコピー時のオプションは下記の通りです。
「Copy items if needed」はチェック
「Create groups」を選択

image08

各種ライブラリのリンク

Googleアナリティクスに必要な各種ライブラリをリンクします。
プロジェクトを選択し、General>Linked Frameworks and Librariesから下記のライブラリを追加でリンクします。

[ul]CoreData.framework
SystemConfiguration.framework
libz.tbd (libz.dylibから変更)
libsqlite3.tbd (libsqlite3.dylibから変更)
libGoogleAnalyticsServices.a
[/ul]

image02

セキュア通信の許可

セキュア通信の許可設定をします。
この設定をしないとGoogleアナリティクスにデータが渡らない可能性があります。

Xcodeのプロジェクトファイル一覧から「Info.plist」を選択します。
無い場合に行として「App Transport Security Settings」を追加作成します。
上記の子要素として「Allow Arbitrary Loads」を作成します。
値は「YES」を設定します。

test3

Bridging Headerの作成

Bridging Headerを作成します。
Objective-c用のヘッダーファイルをSwiftでも利用するために「XXX-Bridging-Header.h」ファイルを作成します。
XXXの部分はプロジェクト名を設定します。

新規ファイル作成から「Header File」を選択します。

image01

Bridging Headerをプロジェクトに設定します。
プロジェクト設定からBuild Settings>Objective-C Bridging Headerを選択します。
(検索ボックスで「Bridging」と検索すると早いです)

XXXXX-Bridging-Header.hを入力します。

image14

XXXX-Bridging-Header.hにインポート文を記述します。

ここでは例としてすべて記載します。

#import <フォルダ名/GAI.h>
#import <フォルダ名/GAIFields.h>
#import <フォルダ名/GAILogger.h>
#import <フォルダ名/GAITracker.h>
#import <フォルダ名/GAIDictionaryBuilder.h>
#import <フォルダ名/GAITrackedViewController.h>

image06

トラッカーの初期設定

トラッカーの初期設定をAppDelegate.swiftファイルに追記します。

トラッカーの指定が、ヘルプが間違っているので注意。

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        
// トラッカーの作成
guard let tr = GAI.sharedInstance() else {  assert(false, "Google Analytics not configured correctly")  }
tracker.trackerWithTrackingId("UA-XXXXXXXX-X")

//オプション:例外情報を自動的にGoogleへ送信する
tracker.trackUncaughtExceptions = true  // report uncaught exceptions

//コンソールにデバッグ情報を表示する
tracker.logger.logLevel = GAILogLevel.Verbose  // remove before app release

//データの送信間隔
tracker.dispatchInterval = 2

//ユーザー属性とインタレスト カテゴリに関するレポートの有効化
tr.defaultTracker.allowIDFACollection = true


return true
}

(パスしてもOK)
オプション:起動時のURLを取得する場合にはこちらを記載します
(動作確認中のため非推奨)

func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool {
// Override point for customization after application launch.
let urlString: String = url.absoluteString

// Googleアナリティクスのキャンペーン(UTM)パラメータをテキスト解析し、hitParamsにセット
let hitParams: GAIDictionaryBuilder = GAIDictionaryBuilder()
hitParams.setCampaignParametersFromUrl(urlString)

// キャンペーン計測にのみ必要なキャンペーンフィールド
// 呼び出し時にキャンペーン(UTM)のソースを設定してなかった場合は、代わりにリファラーとしてホスト名をセット
if (hitParams.get(kGAICampaignSource) == nil) && url.host?.lengthOfBytesUsingEncoding(NSStringEncoding.allZeros) != 0 {

// Set campaign data on the map, not the tracker.
hitParams.set("referrer", forKey: kGAICampaignMedium)
hitParams.set(url.host, forKey: kGAICampaignSource)
}

return true
}

image13

スクリーントラッキングの実装

スクリーントラッキングXXXXViweController.swiftファイルなどの各スクリーンが計測されるように追記します。
ここでは「viewDidLoad()」関数に追記しています。

            //トラッカーの定義
            let tracker = GAI.sharedInstance().defaultTracker
            
            //スクリーントラッキング
            tracker.set(kGAIScreenName, value: "スクリーン名を手動で定義します")
            
            let ScreenBuilder = GAIDictionaryBuilder.createScreenView()
            tracker.send(ScreenBuilder.build() as [NSObject : AnyObject])

スクリーントラッキング+カスタムディメンション
(カスタムディメンションも一緒に設定する場合にはこちらコードになります)


            //トラッカーの定義
            let tracker = GAI.sharedInstance().defaultTracker
            
            //スクリーントラッキング
            tracker.set(kGAIScreenName, value: "スクリーン名を手動で定義します")
            tracker.set(GAIFields.customDimensionForIndex(1), value:"ここにカスタムディメンション1の文字列を定義します")
            
            let ScreenBuilder = GAIDictionaryBuilder.createScreenView()
            tracker.send(ScreenBuilder.build() as [NSObject : AnyObject])

イベントラッキングの実装

イベントトラッキングの実装は、ボタンなどのクリック回数を計測するために実装します。
ここでは「touchesBegan」関数に追記しています。

            //トラッカーの定義
            let tracker = GAI.sharedInstance().defaultTracker

            //イベントトラッキング
            let EventBuilder = GAIDictionaryBuilder.createEventWithCategory("イベントカテゴリ", action: "イベントアクション", label: "イベントラベル", value: nil)
            tracker.send(EventBuilder.build() as [NSObject : AnyObject])

イベントトラッキング+カスタムディメンション
(カスタムディメンションも一緒に設定する場合にはこちらコードになります)


            //トラッカーの定義
            let tracker = GAI.sharedInstance().defaultTracker

            //イベントトラッキング
            let EventBuilder = GAIDictionaryBuilder.createEventWithCategory("イベントカテゴリ", action: "イベントアクション", label: "イベントラベル", value: nil)
            tracker.set(GAIFields.customDimensionForIndex(1), value:"ここにカスタムディメンション1の文字列を定義します")
            tracker.send(EventBuilder.build() as [NSObject : AnyObject])

Googleアナリティクスでの計測確認

Googleアナリティクスにログインし、リアルタイムレポートで動作を確認します。

Googleアナリティクス>レポート>リアルタイムレポート>スクリーン

image07

Googleアナリティクス>レポート>リアルタイムレポート>イベント

image11

カスタムディメンションは、リアルタイムレポートでは確認できないので、時間が立って計測されたことを確認します。
カスタムディメンションは通常レポートでは確認できないので、カスタムレポートを作成して、計測されたことを確認します。

image10

以上が、iOS(Swift版)アプリでのGoogleアナリティクス実装方法でした。

最後に

実装にいくつか手間がかかる部分がありますが、Googleアナリティクスが日々進化しているので、時間の経過とともにもっと簡単に実装できるかもしれません。

実装には基本的なアプリ開発の知識が必要な部分もあるかと思いますので、あわせてiOSアプリの勉強も検証した方がよいかもしれません。

スキルシェアサービス「ココナラ」でご支援していますので、必要に応じてお声がけください。
その場合は下記リンクまで。ちなみにココナラが手数料が2割くらいかかる関係で、Twitterか直接お問い合わせフォームからご相談なら優先的に対応します。

お問い合わせフォーム
Twitterダイレクトメッセージ
GoogleアナリティクスGoogleタグマネージャ開発サポート | ココナラ
おまけ:このリンクから登録するとココナラの1000円分のプレゼントあります

改訂版 No.1スクール講師陣による 世界一受けたいiPhoneアプリ開発の授業 [iOS 9&Xcode 7&Swift 2対応]
桑村 治良 我妻 幸長 高橋 良輔 七島 偉之
技術評論社
売り上げランキング: 172,037
絶対に挫折しない iPhoneアプリ開発「超」入門 増補改訂第4版【Swift 2 & iOS 9】完全対応
高橋 京介
SBクリエイティブ
売り上げランキング: 3,195
無料でできる!世界一やさしいGoogleAnalyticsアクセス解析入門
丸山 耕二
秀和システム
売り上げランキング: 101,132

-アクセス解析
-, , , ,