在iOS中快速实施Google Analytics

我正在关注iOS的Analytics(developers.google.com/analytics/devguides/collection/ios/v3/?ver=swift)指南,我的Swift代码项目中有错误,我无法修复。 我正在使用XCode 6.4,Swift和iOS部署目标8.1。

步骤1

首先,我使用CocoaPods安装了Google SDK。 这是运行pod install命令后的控制台结果:

 Updating local specs repositories CocoaPods 1.0.0.beta.2 is available. To update use: `gem install cocoapods --pre` [!] This is a test version we'd love you to try. For more information see http://blog.cocoapods.org and the CHANGELOG for this version http://git.io/BaH8pQ. Analyzing dependencies Downloading dependencies Using Google (1.0.7) Using GoogleAnalytics (3.14.0) Using GoogleNetworkingUtilities (1.0.0) Using GoogleSymbolUtilities (1.0.3) Using GoogleUtilities (1.1.0) Generating Pods project Integrating client project Sending stats Pod installation complete! There is 1 dependency from the Podfile and 5 total pods installed. 

第2步

然后如指南所述,打开我的应用程序的Project .xcworkspace文件。

我的Podfile看起来像这样:

 # Uncomment this line to define a global platform for your project # platform :ios, '8.0' # Uncomment this line if you're using Swift # use_frameworks! target 'XXXXXX' do source 'https://github.com/CocoaPods/Specs.git' platform :ios, '8.1' pod 'Google/Analytics', '~> 1.0.0' end target 'XXXXXXTests' do pod 'Google/Analytics', '~> 1.0.0' end 

XXXXXX是我的项目名称。

第3步

我得到了configuration文件GoogleService-Info.plist并在我的项目中添加了所有的目标(我的项目中的2个目标)。

步骤4

我通过selectFile> New> File> iOS> Source> Header File创build了一个BridgingHeader 。 我将它命名为BridgingHeader.h ,位于我的项目的根目录中。 内容是:

 #ifndef XXXXX_BridgingHeader_h #define XXXXX_BridgingHeader_h #import "Google/Analytics.h" #import <Google/Analytics.h> #include "GAI.h" #import <CoreData/CoreData.h> #import <SystemConfiguration/SystemConfiguration.h> #import "Libraries/GoogleAnalytics/GAI.h" #import "Libraries/GoogleAnalytics/GAIFields.h" #import "Libraries/GoogleAnalytics/GAILogger.h" #import "Libraries/GoogleAnalytics/GAITracker.h" #import "Libraries/GoogleAnalytics/GAIDictionaryBuilder.h" #endif 

其中“XXXXX”是我的项目名称。

第5步

现在的问题:我试图包含/导入Google Analytics到我的AppDelegate.swift,但我不能。 这是错误的:

AppDelegate.swift导入Google Analytics

我也尝试import "Google/Analytics.h"但出现另一个错误: Expected identifier in import declaration

  • 我怎样才能解决这个问题,所以XCode不会给我错误?
  • BridgingHeader错了吗? 我不得不指出这种方式来识别它的内部标题?
  • 我是否必须为Google Analyticsconfiguration其他目前尚未configuration的其他内容?

非常感谢你。

使用CocoaPods的Google Analytics有两种select。

  1. pod“Google / Analytics”
  2. pod'GoogleAnalytics'

他们之间有利弊。

pod“Google / Analytics”

  • 需要谷歌configuration文件(GoogleService-Info.plist)
  • 简单的桥接头文件。 只需在桥接头文件中添加#import <Google/Analytics.h>
  • 在你想要实施谷歌分析的每个文件中添加import Google歌。

pod'GoogleAnalytics'

  • 没有谷歌configuration文件(GoogleService-Info.plist)
  • 更复杂的桥接头文件。

我更喜欢使用pod'GoogleAnalytics',但是我将使用pod'Google / Analytics'来解释如何解决此问题,因为Google官方网站build议pod'Google / Analytics'。

  1. 桥头

你只需要一行代码的谷歌分析。

 #import <Google/Analytics.h> 

不要忘记为Objective-C-Bridging-Header设置目标生成设置。 您必须提供正确的path来启用Objective-C-Bridging-Header。

设置目标生成设置Objective-C-Bridging-Header $(SRCROOT)/ $(PRODUCT_NAME)/projectName_Bridging_Header.h

  1. AppDelegate.swift
 import Google func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { self.setupGoogleAnalytics() .. self.setupGoogleAnalytics() .. } func setupGoogleAnalytics() { // Configure tracker from GoogleService-Info.plist. let configureError:NSError? GGLContext.sharedInstance().configureWithError(&configureError) assert(configureError == nil, "Error configuring Google services: \(configureError)") let gai = GAI.sharedInstance() gai.trackUncaughtExceptions = true // report uncaught exceptions gai.logger.logLevel = GAILogLevel.Verbose // remove before app release } 
  1. SomeViewController.swift
 override func viewWillAppear(animated: Bool) { super.viewWillAppear(true) if let default_tracker = GAI.sharedInstance().defaultTracker { #if DEBUG print("default tracker") #endif } // let tracker = GAI.sharedInstance().defaultTracker let tracker = GAI.sharedInstance().trackerWithTrackingId("tracking_ID") tracker.set(kGAIScreenName, value: screenName) let builder = GAIDictionaryBuilder.createScreenView() tracker.send(builder.build() as [NSObject : AnyObject]) } 

为什么我使用trackerWithTrackingId而不是defaultTracker属性? 如果你使用defaultTracker,你可能会遇到一个错误:

致命错误:意外地发现零,而解包一个可选值

defaultTracker属性的初始值为零,但在trackerWithTrackingId方法被调用后会被设置。 但有时候这并不完美。 为了避免这个问题,我build议直接使用trackerWithTrackingId方法。

我使用pod“GoogleAnalytics”进行示例项目 。 你可以从中得到一个想法。 祝你好运。

testing环境

GoogleAnalytics 3.14

Xcode 7.2.1

Podfile

 pod 'Google/Analytics' 

YourFantasticProjectName-Bridging-Header.h

 #import "Google/Analytics.h" 

你不需要这个

 GGLContext.sharedInstance().configureWithError(&configureError) 

你需要有一个适当的tracker

 let gai = GAI.sharedInstance() let tracker = gai.tracker(withTrackingId: "UA-12345678-1") 

为了使实时查看在GA仪表板中工作,您必须使用GAIDictionaryBuilder跟踪屏幕并更正密钥kGAIScreenName

 tracker.set(kGAIScreenName, value: "this is my screen") let event = GAIDictionaryBuilder.createScreenView() tracker?.send(event!.build() as! [NSObject: Any]) 

同样,要跟踪事件,您需要使用GAIDictionaryBuilder ,因为它将创build具有正确GA键的字典,并且GA喜欢正确的键

 let event = GAIDictionaryBuilder.createEvent(withCategory: "category", action: "action", label: "level", value: NSNumber(value: 120)) tracker?.send(event!.build() as! [NSObject: Any]) 

它似乎也在模拟器中工作

我面临同样的问题。 由于Xcode生成错误,我无法导入“Google / Analytics.h”标题。 因为“Google / Analytics.h”标题在Google官方页面中提到的“Google Analytics(分析)sdk”中不可用。

所以,我只是使用下面的行

 #import "GAI.h" 

希望它会工作得很好。 环境 Xcode:8.2 iOS:10.2

对于迅捷3:

  var configureError:NSError? = nil GGLContext.sharedInstance().configureWithError(&configureError) assert(configureError == nil, "Error configuring Google services: \(configureError)") let gai = GAI.sharedInstance() gai?.trackUncaughtExceptions = true gai?.logger.logLevel = GAILogLevel.verbose 

我认为最好是将错误发送给crashlytics,但是继续执行一个应用程序:

 func configureGoogleAnalytics() { var configureError: NSError? = nil GGLContext.sharedInstance().configureWithError(&configureError) if configureError != nil { Crashlytics.sharedInstance().recordError(configureError!) } } 

另外检查这个答案最新的方式来添加分析。