在ios swift中实施Google Analytics

osc*_*car 11 google-analytics ios swift

我正在关注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.
Run Code Online (Sandbox Code Playgroud)

第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
Run Code Online (Sandbox Code Playgroud)

XXXXXX是我项目的名称.

第3步

我得到了配置文件,GoogleService-Info.plist并包含在我的项目中,添加了所有目标(我的项目中有2个目标).

第4步

BridgingHeader通过选择File> New> File> iOS> Source> Header File 创建了一个.我将它命名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
Run Code Online (Sandbox Code Playgroud)

"XXXXX"是我项目的名称.

第5步

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

AppDelegate.swift导入Google Analytics

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

  • 我该如何解决这个问题,以便XCode不会给我错误?
  • BridgingHeader错了吗?我是否必须以某种方式指出它的内部标题?
  • 我是否必须为我现在缺少的Google Analytics配置其他内容?

非常感谢你.

san*_*oon 30

使用CocoaPods可以使用Google Analytics实施两种方法.

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

他们之间有利有弊.

pod'Google/Analytics'

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

pod'GoogleAnalytics'

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

我更喜欢使用pod'GoogleAnalytics',但我会解释如何使用pod'Google/Analytics'解决此问题,因为谷歌官方网站推荐使用pod'Google/Analytics'.

  1. 桥头

您只需要一行代码来进行Google分析.

#import <Google/Analytics.h>
Run Code Online (Sandbox Code Playgroud)

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

设置Target-Build Setting-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
}
Run Code Online (Sandbox Code Playgroud)
  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])

}
Run Code Online (Sandbox Code Playgroud)

为什么我使用trackerWithTrackingId而不是defaultTracker属性?如果您使用defaultTracker,则可能会出错:

致命错误:在展开Optional值时意外发现nil

defaultTracker属性的初始值为nil,但它将在调用trackerWithTrackingId方法后设置.但它有时并不完美.为避免此问题,我建议直接使用trackerWithTrackingId方法.

我使用pod'GoogleAnalytics' 制作示例项目.你可以从中得到一个想法.祝好运.

测试环境

GoogleAnalytics 3.14

Xcode 7.2.1


onm*_*133 9

Podfile

pod 'Google/Analytics'
Run Code Online (Sandbox Code Playgroud)

YourFantasticProjectName-Bridging-Header.h

#import "Google/Analytics.h"
Run Code Online (Sandbox Code Playgroud)

你不需要这个

GGLContext.sharedInstance().configureWithError(&configureError)
Run Code Online (Sandbox Code Playgroud)

你需要有一个合适的 tracker

let gai = GAI.sharedInstance()
let tracker = gai.tracker(withTrackingId: "UA-12345678-1")
Run Code Online (Sandbox Code Playgroud)

要使实时视图在GA仪表板中工作,您必须使用GAIDictionaryBuilder和更正键来跟踪屏幕kGAIScreenName

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

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

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

它似乎也在模拟器中工作


mum*_*umu 8

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

所以,我只是使用了以下行

#import "GAI.h"
Run Code Online (Sandbox Code Playgroud)

希望它能正常工作. 环境 Xcode:8.2 iOS:10.2