iOS Google Analytics(分析)广告系列跟踪



我为我的iOS-APP设置了Google Analytics(基本上工作正常)(屏幕跟踪,购买,...),除了安装广告系列跟踪不行。我在这里看到了一个类似的问题,该问题无法解决:Google Analytics(分析)iOS广告系列跟踪开发测试

这是我用来实现的指南(在Objective-C中):https://developers.google.com/analytics/devguides/collection/collection/ios/v3/campaigns#general-campaigns

我在Google Analytics(Analytics)仪表板中看到了推荐人安装,但没有广告系列。

这是一个测试URL

https://click.google-analytics.com/redirect?tid=ua-51157298-2& amp; url=https:://ITUNES.Apple.com/AT/AT/APP/BIKERSOSM-MOTORRAD-MOTORRAD--MOTORRAD-MOTORRAD--MOTORRAD-SOSSOS%2FID980886530& AID = COM.BIKERAPPS.BIKERSOS& IDFA =%{IDFA}& cs = testrongource&cm = test_medium& cn

我在这里生成:https://developers.google.com/analytics/devguides/collection/collection/ios/v3/campaigns#url-builder

我的代码应跟踪安装的代码如下:

AppDelegate:

//Method where app parses any URL parameters used in the launch
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
    //Track google Analytics URL
    GAService.shared.trackURL(url)
    //some other handlers here ....
    return true/false
}

Gaservice Singleton:

@objc public class GAService : NSObject {
private let trackID : String = "UA-xxxxxx-x"
var trackGoogleAnalytics : Bool = Constants.Analytics.trackGoogleAnalytics
private let UTM_SOURCE_KEY : String = "xxx"
private let UTM_MEDIUM_KEY : String = "xxx"
private let UTM_CAMPAIGN_KEY : String = "xxx"
var trackUncaughtExceptions : Bool = true
var tracker : GAITracker? = nil
static let shared = GAService()
var UtmSource : String {
    get {
        if let utm = UserDefaults.standard.string(forKey: UTM_SOURCE_KEY) {
            return utm
        }
        return ""
    }
    set {
        if UserDefaults.standard.string(forKey: UTM_SOURCE_KEY) == nil {
            UserDefaults.standard.set(newValue, forKey: UTM_SOURCE_KEY)
            UserDefaults.standard.synchronize()
        }
    }
}
var UtmCampaign : String {
    get {
        if let utm = UserDefaults.standard.string(forKey: UTM_CAMPAIGN_KEY) {
            return utm
        }
        return ""
    }
    set {
        if UserDefaults.standard.string(forKey: UTM_CAMPAIGN_KEY) == nil {
            UserDefaults.standard.set(newValue, forKey: UTM_CAMPAIGN_KEY)
            UserDefaults.standard.synchronize()
        }
    }
}
var UtmMedium : String {
    get {
        if let utm = UserDefaults.standard.string(forKey: UTM_MEDIUM_KEY) {
            return utm
        }
        return ""
    }
    set {
        if UserDefaults.standard.string(forKey: UTM_MEDIUM_KEY) == nil {
            UserDefaults.standard.set(newValue, forKey: UTM_MEDIUM_KEY)
            UserDefaults.standard.synchronize()
        }
    }
}
private override init() {
    super.init()
    if(trackGoogleAnalytics) {
        tracker = GAI.sharedInstance().tracker(withTrackingId: trackID)
        tracker!.allowIDFACollection = true
        GAI.sharedInstance().trackUncaughtExceptions = trackUncaughtExceptions
        GAI.sharedInstance().logger.logLevel = GAILogLevel.error
        GAI.sharedInstance().dispatchInterval = 1
    }
}
public func trackURL(_ url : URL){
    let urlString = url.absoluteString
    // setCampaignParametersFromUrl: parses Google Analytics campaign ("UTM")
    // parameters from a string url into a Map that can be set on a Tracker.
    let hitParams : GAIDictionaryBuilder = GAIDictionaryBuilder()
    // Set campaign data on the map, not the tracker directly because it only
    // needs to be sent once.
    hitParams.setCampaignParametersFromUrl(urlString)
    // Campaign source is the only required campaign field. If previous call
    // did not set a campaign source, use the hostname as a referrer instead.
    if((hitParams.get(kGAICampaignSource) != nil) && (url.host ?? "").length() != 0) {
        hitParams.set("referrer", forKey: kGAICampaignMedium)
        hitParams.set(url.host, forKey: kGAICampaignSource)
    }
    let hitParamsDict : [AnyHashable : Any] =  hitParams.build() as Dictionary as [AnyHashable : Any]
    if(hitParamsDict.count > 0) {
        // A screen name is required for a screen view.
        let source : String? = hitParams.get(kGAICampaignSource)
        let medium : String? = hitParams.get(kGAICampaignMedium)
        let campaign : String? =  hitParams.get(kGAICampaignName)
        if(source != nil || medium != nil || campaign != nil) {
            tracker?.set(kGAIScreenName, value: "openUrl")
            GAService.shared.UtmSource = source ?? ""
            GAService.shared.UtmMedium = medium ?? ""
            GAService.shared.UtmCampaign = campaign ?? ""
        }
        // SDK Version 3.08 and up.
        //[tracker send:[[[GAIDictionaryBuilder createScreenView] setAll:hitParamsDict] build]];
        let sendDict : [AnyHashable : Any] =  GAIDictionaryBuilder.createScreenView().setAll(hitParamsDict).build() as Dictionary as [AnyHashable : Any]
        tracker?.send(sendDict)
        tracker?.set(kGAIScreenName, value: nil)
    }
}

由于我必须为这样的跟踪设置屏幕名称,因此我将OpenUrl定义为常数,然后将其设置为nil之后,我发送了字典。

我希望任何人都能看到我在做错什么

预先感谢您

我将其与Deep Link一起使用,我可以决定导航:

let tracker1 = GAI.sharedInstance().tracker(withTrackingId: "...")
            let hitParams = GAIDictionaryBuilder()
            hitParams.setCampaignParametersFromUrl(path)
            let medium = self.getQueryStringParameter(url: path, param: "utm_medium")
            hitParams.set(medium, forKey: kGAICampaignMedium)
            hitParams.set(path, forKey: kGAICampaignSource)
            let hitParamsDict = hitParams.build()
            tracker1?.allowIDFACollection = true
            tracker1?.set(kGAIScreenName, value: "...")
            tracker1?.send(GAIDictionaryBuilder.createScreenView().setAll(hitParamsDict as? [AnyHashable : Any]).build() as? [AnyHashable : Any])
// this is for url utm_medium parameter
/*
func getQueryStringParameter(url: String, param: String) -> String? {
    guard let url = URLComponents(string: url) else { return nil }
    return url.queryItems?.first(where: { $0.name == param })?.value
}*/

然后我在Google Analytics上看到了源。

我认为Google Analytics(分析)文档在此主题上非常差。如果您在安装应用程序后的"广告系列测量"的主要指南中仔细查看,则可以通过广告活动,网站或其他应用程序的推荐来启动它" Google给出了一个使用自定义URL方案的示例。

希望还有另一个指南https://developers.google.com/analytics/solutions/mobile-campaign-deep-link,描述了如何使用深层链接进行广告系列测量。

因此,如果要跟踪广告系列测量值,则必须使用通用链接机制自定义URL方案用于您的应用程序。

通用链接机制是您有后端的首选方法,因此可以决定在何处重定向用户:在iTunes或应用程序中。

假设,您有一个站点链接 https://example.com/openapp ,将用户重定向到iTunes Connect。您应该将通用链接地址( https://example.com/openapp )插入发电机https://developers.google.com/analytics/devguides/collection/ios/v3/campaigns#url-builder.

最新更新