簡體   English   中英

Swift 2或3中的Google Analytics問題

[英]Issue with Google Analytics in Swift 2 or 3

我有Swift 2(Swift 3)和Google Analytics的問題。

這是問題所在:

tracker.send(GAIDictionaryBuilder.createScreenView().build())

Xcode告訴我:

無法使用類型'(NSMutableDictionary!)'的參數列表調用'send'

Swift 3更新(2016.10.19)

let tracker = GAI.sharedInstance().defaultTracker
let build = (GAIDictionaryBuilder.createScreenView().build() as NSDictionary) as! [AnyHashable: Any]
tracker?.send(build)

仍然是一個丑陋的方法,讓我知道是否有更清潔的轉換。


原版的

同樣在這里,努力解決大量的錯誤。

我做了什么(棄用):

var build = GAIDictionaryBuilder.createAppView().build() as [NSObject : AnyObject]
tracker.send(build)

編輯(2015)

感謝@George Poulos。 最近他們更新了選項,現在不推薦使用createAppView,而應該使用createScreenView。

var build = GAIDictionaryBuilder.createScreenView().build() as [NSObject : AnyObject]
tracker.send(build)

除了接受的答案:

改變了這個:

tracker.send(GAIDictionaryBuilder.createEventWithCategory("UX", action: "User sign in", label: nil, value: nil).build())

對此:

tracker.send(GAIDictionaryBuilder.createEventWithCategory("UX", action: "User sign in", label: nil, value: nil).build()  as [NSObject : AnyObject])

這可能有點矯枉過正,但我​​更喜歡創建一個簡短的擴展,而不是每次都要輸入鑄件:

在任何swift文件中,粘貼以下代碼:

extension GAIDictionaryBuilder
{
    func buildSwiftCompatible() -> [NSObject:AnyObject]
    {
        return self.build() as [NSObject:AnyObject]
    }
}

然后你可以調用buildSwiftCompatible()而不是通常的build():

tracker.send(GAIDictionaryBuilder.createScreenView().buildSwiftCompatible())

玩得開心。

這是我提出的解決方案..也許它可以幫助你們中的一些人。 它是你需要在每個UIViewController中實例化的結構,但它有助於使用樣板。

import UIKit

struct Analytics {
    fileprivate let viewController: UIViewController
    fileprivate let tracker = GAI.sharedInstance().defaultTracker

    init (forScreen viewController: UIViewController) {
        self.viewController = viewController
    }

    func startTracking () {
        let screenView = GAIDictionaryBuilder.createScreenView().build() as NSDictionary
        guard
            let tracker = tracker,
            let build = screenView as? [AnyHashable: Any]
        else { return }

        tracker.set(kGAIScreenName, value: String(describing: viewController))
        tracker.send(build)
    }
}

class HomeViewController: UIViewController {

    lazy var analytics: Analytics = {
        return Analytics(forScreen: self)
    }()

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override func viewWillAppear() {
        super.viewWillAppear()
        analytics.startTracking()
    }
}

對於swift 3:

讓build:NSObject = GAIDictionaryBuilder.createScreenView()。build()

跟蹤器?.ndnd(build as![AnyHashable:Any])

讓build = GAIDictionaryBuilder.createScreenView()。build()為[NSObject:AnyObject]

跟蹤器?。發送(編譯)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM