我为我的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.