2016-01-27 49 views
9

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

步骤1

首先,我使用的CocoaPods安装了谷歌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

然后打开,在引导,我的应用程序的项目.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

我得到的配置文件GoogleService-Info.plist并列入我的计划将所有的目标(2个目标在我的项目)。

步骤4

我通过选择文件>新建>文件>的iOS>来源>头文件创建的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

现在的问题: 我想包括/导入谷歌分析了我的AppDelegate.swift,但我不能。这是错误:

AppDelegate.swift import Google Analytics

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

  • 我怎样才能解决这个如此的XCode不给我的错误?
  • BridgingHeader是否错误?我是否必须以某种方式指出它的内部标题?
  • 我是否必须为我现在缺少的Google Analytics配置其他内容?

非常感谢。

回答

29

对于使用CocoaPods的Google Analytics进行实施有两种选择。

  1. 荚 '谷歌/分析'
  2. 荚 'Google分析'

它们之间存在着利弊。

荚 '谷歌/分析'

  • 需要使用Google配置文件(GoogleService-Info.plist中)
  • 简单桥接头文件。只需在桥接头文件中添加#import <Google/Analytics.h>即可。
  • 在您要实施Google Analytics(分析)的每个文件中添加import Google

荚 'Google分析'

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

我喜欢用荚“Google分析”,但我会解释如何解决这个问题,使用荚“谷歌/分析” 因为谷歌的官方网站建议荚“谷歌/分析”。

  1. 桥接报

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

#import <Google/Analytics.h> 

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

设置目标 - 建造设置目标-C-桥接报头 $(SRCROOT)/ $(PRODUCT_NAME)/projectName_Bridging_Header.h

  • 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 
    } 
    
  • 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方法被调用后,将被设置。但它有时并不完美。为了避免这个问题,我建议直接使用trackerWithTrackingId方法。

    我使用pod'GoogleAnalytics'制作sample project。你可以从中得到一个想法。 祝你好运。

    测试信封

    Google分析3.14

    的Xcode 7.2.1

    +0

    我想在我的框架目标中使用GoogleAnalytics。问题是框​​架目标不支持桥接头,并且上面的两个pod都不适用于我。你有任何建议,使其工作? – user1615898

    +1

    @ user1615898,我认为你有两个选择:1)使用Firebase分析。它不需要创建桥接头。 2)您可以使用Google Analytics服务SDK 手动设置Google Analytics。 更多的信息和说明在这里: https://developers.google.com/analytics/devguides/collection/ios/v3/sdk-download –

    7

    我面临同样的问题。由于Xcode生成错误,我无法导入“Google/Analytics.h”标题。因为Google官方页面中提到的“GoogleAnalytics sdk”中没有“Google/Analytics.h”标头。

    所以,我只是用下面一行

    #import "GAI.h" 
    

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

    +0

    我也无法导入GoogleAnalytics工作,所以用导入GoogleToolboxForMac –

    7

    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,因为它会创建带有正确GA键的字典,并且GA喜欢正确的键

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

    似乎在模拟太

    2

    为SWIFT 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 
    
    0

    我觉得这是更好地发送错误crashlytics,而是继续执行的应用程序:

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

    还要检查this答案是添加分析的最新方式。

    相关问题