【Swift4】CarthageでGoogleAnalyticsを導入しよう【Xcode9.1】

どうも。Reoです。
プロジェクトにGoogleAnalyticsを導入してよって頼まれたので、導入していこうと思うのですが、ググってみてもCocoaPodsでやっている記事ばかりなので、ついでにCarthageでの導入記事を書いていこうと思います。

Carthageの入れ方は割愛させていただきます。入れるときはこちらを参考にした気がします。
[Swift] CocoaPodsの代わりにCarthageを使って、RealmやReactiveCocoaなどを入れてみた。

 

GoogleAnalyticsをプロジェクトに導入しよう!

まずはGitHubより、GoogleAnalytics-Frameworkをインストールさせていただきます。
akashivskyy/GoogleAnalytics-Framework

既にCarthageがインストールされている前提で話を進めさせていただきますね。

Cartfileを編集します。

vi Cartfile

または何かテキストエディタでプロジェクト内のCartifileを開いてその中に

github "akashivskyy/GoogleAnalytics-Framework"

と書いて保存。

そしてターミナルでcarthage updateをします。

carthage update --platform iOS

これが少し時間かかりますが、のんびり待ちます。

インストールが完了したらframeworkをGeneral > Linked Frameworks and Librariesに入れます。

+を押して、AddOtherよりCarthage > Build > iOS > GoogleAnalytics.frameworkを選択

 

上記画像のように入ってればおkです。

 

次にBuildPhasesを開き、+ボタンを押し、New Run Script Phaseを選択
既にCarthageがはいっていればそのままそこで。

 

RunScriptのShellの下のところに

/usr/local/bin/carthage copy-frameworks

と追加し、さらにその下のInputFilesのところに

$(SRCROOT)/Carthage/Build/iOS/GoogleAnalytics.framework

と追加。

 

次は「iOS アプリにアナリティクスを追加する  |  iOS 向けアナリティクス  |  Google Developers」に従っていきます。

まずは上記リンクより青色の「設定ファイルを取得」をクリック。

取得はアプリ名だったりBundleIDだったりを言われた通りに記入していけばおkのはずです。

無事取得できたらプロジェクトにぶち込みます。

 

これで導入はおkのはずですー!

 

GoogleAnalyticsの設定をしよう

ここからは「Swift環境でGoogleAnalyticsを設定する – Qiita」の記事を参考にさせていただきました。

コードはちょろっとだけSwift4に対応しているぐらいの違いです。。

 

アプリからアナリティクスにデータを送信できるようにするために、AppDelegate内にごにょごにょ書いていきます。

まずはAppDelegateでGoogleAnalyticsのフレームワークを使えるように

import GoogleAnalytics

を書いておきます。

そいでapplication(_:didFinishLaunchingWithOptions:)内に以下のように書きます。

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

        // GoogleAnalyticsの設定
        if let gai = GAI.sharedInstance() {
            gai.trackUncaughtExceptions = true
            
            if let path = Bundle.main.path(forResource: "GoogleService-Info", ofType: "plist") {
                if let propertyList = NSDictionary(contentsOfFile: path) as? [String: AnyObject] {
                    let trackingID = propertyList["TRACKING_ID"] as! String
                    gai.tracker(withTrackingId: trackingID)
                }
            }
        }

        return true
    }

 

これで初期化処理はおkです。

実際にトラッキングできる設定を、新しくファイルを作って書いていきます。

適当に「GATrackingManager.swift」というファイルを作ります。

GATrackingManager.swiftの中にGATrackingManagerというクラスを作って以下のように書きます。

import GoogleAnalytics

class GATrackingManager {
    
    //スクリーントラッキング
    class func sendScreenTracking(screenName: String) {
        if let tracker = GAI.sharedInstance().defaultTracker {
            tracker.set(kGAIScreenName, value: screenName)
            tracker.send(GAIDictionaryBuilder.createScreenView().build() as [NSObject: AnyObject])
            tracker.set(kGAIScreenName, value: nil)
        }
    }
    
    //イベントトラッキング
    class func sendEventTracking(category: String, action: String, label: String) {
        if let tracker = GAI.sharedInstance().defaultTracker {
            tracker.send(GAIDictionaryBuilder.createEvent(withCategory: category, action: action, label: label, value: nil).build() as [NSObject: AnyObject])
        }
    }
    
}

これであとは使いたいところに書くだけ!!!

 

スクリーントラッキング

スクリーントラッキングは画面が表示されたときにスクリーンの名前をアナリティクスに送信します。

ViewController内のviewWillAppear(_:)の中にとりあえず書いとけば良いっぽいです。

先ほど作ったクラスの関数を使います。

import UIKit

class ViewController:UIViewController {
    /**  ~~  **/

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        
        //GAスクリーントラッキング
        GATrackingManager.sendScreenTracking(screenName: "画面名")
    }
}

 

これを書いておくと、viewWillAppear(_:)が呼ばれるたびに画面名がGoogleAnalyticsに送信されます。

この送信された情報は、「GoogleAnalytics」を開いて、サイドメニューのレポート>行動>スクリーンより確認することができます。

 

すぐには反映されませんが、気長に待ちましょう。

 

イベントトラッキング

ユーザから何かアクションがあった際に情報を送信します。

例えばボタン押した時や、検索機能があれば検索ワードを送信する時等に書けばいいんじゃないかなと思います。

    @objc func btnTapped(sender:UIButton){ 
            //GoogleAnalytics送信
            GATrackingManager.sendEventTracking(category: "カテゴリ名", action: "アクション名", label: "ラベル名")

    }

 

イベントトラッキングで送信された情報は、「GoogleAnalytics」を開いて、サイドメニューのレポート> 行動 > イベントにて確認することができます。

 

このカテゴリ名・アクション名・ラベル名はカテゴリ名 > アクション名 > ラベル名といった感じっぽいです。

どう使い分けするかはあなた次第(σ・∀・)σ

 

通常レポートだと反映されるのに時間がかかるので、とりあえず上手く行ってるかどうかはリアルタイムで確認しましょう!(ようやくリアルタイムに気づく・・・)

サイドバーのレポート>リアルタイム>スクリーン or イベントで確認することができます。

 

スクリーンショット貼ってたんですが、規約的によろしくないっぽいので外しました。

統計っていうかメニューのスクリーンショットとかなんだけどCHICKENなので。何かあったら嫌なのでわかりづらいですがお許しを〜〜。

 

ということで実際に導入がてら書いてみました。

自分のアプリには全然統計系は導入してないので、入れてみても良いかもなーって気持ちになりました。そんな難しいもんでもないし。面倒っちゃ面倒だけど。

それではでは〜

2018/04/14追記
1週間に1回統計見ればいい方・・・
コメントは認証制です。詳しくは下記の注意をお読みください。お気軽にコメントお願いします!

Write a Comment

コメント時の注意

「Twitter」「Facebook」「Google+」「WordPress」のいずれかのアカウントをお持ちの方は各アカウントと連携することでコメントできます。 コメントしたことはSNSに流れませんので、アカウントをお持ちの方はこちらの方法でコメントを投稿して下さると嬉しいです。 アカウントをお持ちでない方はメールアドレスで投稿することができます。 初回コメント時は承認後に表示されます。

Related Memo...

UINavigationController + UIScrollView の組み合わせで使っている時に謎の余白ができる時

UINavigationController + UIScrollView の組み合わせで使っていて、UIScrollView 上に AutoLayout で上下左右0で View を設置しているのに、30px程度上にずれてしまうとき。

`navigationController.navigationBar.isTranslucent = false` にすると直るかもしれない。

ScrollView上のコンテンツとNavigationBarの重なっているところが透過していたら多分これで直せるはず。

通常のターゲットではちゃんと動いているのに、iOSSnapshotTestCase を用いたテストでだけこの対応が必要なのよくわからないけれど。。。

iOS

記事を書くほどでもないけれどメモっておきたいこと

テスト投稿。

例えばiphone7 の画面サイズ

750 × 1334
半分375 × 667

iOS

UITableView.RowAnimation の .none はアニメーションするよ

UITableView.RowAnimation の .none はアニメーションがnoneなわけじゃなく、デフォルトの設定を使うよという意味らしい。

The inserted or deleted rows use the default animations.

なのでアニメーションしちゃう。今更の気づき。

 

iOS
more