LoginSignup
9

More than 5 years have passed since last update.

GoogleAnalyticsをenumで

Last updated at Posted at 2015-11-04

わかりやすいコードで管理しておきたい

これが良いコードかわかりません。今日、個人プロジェクトにイベントのトラッキングを入れようと思ってふと思いついて書いてみました。

コードを書いて、その後説明をします。おかしなことを書いているかもしれません。その場合はご指摘いただけるとありがたいです。

コード

前提として、分析系のコードはAnalyzerというclassに入っています。Screenのtrackingなどはここでまとめてやっていて、今回はそれにeventのトラッキングを追加してみました。

Swift1.2です。Swift2系ならprotocol extensionとか使ってもっとすっきり書けそうです。

protocol Tracker {
    static var category: String { get }
    func track(label: String?)
}

extension Analyzer {

    enum Category: String {
        case Article = "Article"
        case Settings = "Settings"
    }

    enum Article: String, Tracker {
        static var category = Category.Article.rawValue
        case Stock = "Stock"
        case Unstock = "Unstock"
        case Share = "Share"
        case Show = "Show"
        case StockAction = "StockAction"
        case ShowStockers = "ShowStockers"
        case CommentAction = "CommentAction"
        case ShowComment = "ShowComment"
        case OtherAction = "OtherAction"

        func track(_ label: String? = nil) {
            Analyzer.trackEvent(self.dynamicType.category, action: rawValue, label: label)
        }
    }

    ...

    static func trackEvent(category: String, action: String, label: String? = nil) {
        let builder = GAIDictionaryBuilder.createEventWithCategory(category, action: action, label: label, value: nil)
        gai.defaultTracker.send(builder.build() as [NSObject: AnyObject])
    }
}

使う時はこうなります。

Analyzer.Article.Unstock.track(title)
Analyzer.Settings.Logout.track()

説明

特徴としては、

  • Category毎のアクションが一箇所にまとまるので測定しているアクションをパッと見で把握できます。
  • enumで書いているので使えるActionの制約がわかりやすいです。その場で文字列で書いていくと散らかってくるので...。
  • Analyzer... Article... Unstock ... track と、補完が出てくるので簡単です。
  • コードもそんなに長くなりません。
  • valueは今の所使っていませんが、追加も簡単です。

とりあえず、ArticleよりもArticleTrackerの方が良いかもなどと思えてきました。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9