2016-01-27 3 views
9

Sto seguendo la guida Analytics per iOS (developers.google.com/analytics/devguides/collection/ios/v3/?ver=swift) e ho errori nel mio codice Swift Project che non posso aggiustare. Sto lavorando con XCode 6.4, Swift e iOS Deployment Target 8.1.Implementare Google Analytics in ios swift

Fase 1

Per prima cosa ho installato uno SDK Google utilizzando CocoaPods. Questo è il risultato della console dopo l'esecuzione pod install comando:

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. 

Fase 2

quindi aperti, come detto nella guida, file di .xcworkspace progetto del mio app.

mio Podfile si presenta così:

# 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 

dove xxxxxx è il nome del mio progetto.

Fase 3

ho avuto il file di configurazione GoogleService-Info.plist e inclusi nel mio progetto l'aggiunta di tutti i target (2 Obiettivi nel mio progetto).

Fase 4

ho creato un BridgingHeader da scegliendo File> Nuovo> File> iOS> Origine> File di intestazione. L'ho chiamato BridgingHeader.h ed è nella radice del mio progetto. Il contenuto è:

#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 

Dove "XXXXX" è il nome del mio progetto.

Fase 5

Ora i problemi: Ho cercato di includere/importare le Google Analytics nel mio AppDelegate.swift ma non ci riesco. Questo è l'errore:

AppDelegate.swift import Google Analytics

Ho anche provato import "Google/Analytics.h" ma sembra un altro errore: Expected identifier in import declaration.

  • Come posso risolvere il problema in modo che XCode non mi dia errori?
  • Il BridgingHeader ha torto? Devo indicare questo in qualche modo per riconoscere le intestazioni interne?
  • Devo configurare qualcos'altro per Google Analytics che mi manca attualmente?

Grazie mille.

risposta

29

Esistono due opzioni per l'implementazione con Google Analytics utilizzando CocoaPods.

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

Ci sono pro e contro tra di loro.

pod 'Google/Analytics'

  • necessario google file di configurazione (GoogleService-Info.plist)
  • semplice file di intestazione di bridging. Basta aggiungere #import <Google/Analytics.h> nel file di intestazione del bridging.
  • aggiungi import Google in ogni file che desideri implementare google analytics. file di configurazione

    • senza google

    pod 'GoogleAnalytics' (GoogleService-Info.plist)

  • più complesso file di intestazione di bridging.

Io preferisco usare 'GoogleAnalytics' Pod ma spiegherò come risolvere questo problema utilizzando pod 'Google/Analytics' perché il sito ufficiale di Google consiglia pod 'Google/Analytics'.

  1. intestazione colmare

Hai solo bisogno di una riga di codice per Google Analytics.

#import <Google/Analytics.h> 

Non dimenticare di impostare il target-build per Objective-C-Bridging-Header. Devi fornire il percorso corretto per abilitare Objective-C-Bridging-Header.

Set Target-configurazione Regolazione-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]) 

} 

Perché utilizzare trackerWithTrackingId invece della proprietà defaultTracker?Si potrebbe ottenuto un errore se si utilizza defaultTracker:

errore fatale: inaspettatamente trovato nulla, mentre scartare un valore opzionale valore iniziale

defaultTracker della struttura è pari a zero, ma sarà impostato dopo metodo trackerWithTrackingId viene chiamato. Ma a volte non funziona perfettamente. Per evitare questo problema, ti consiglio di utilizzare direttamente il metodo trackerWithTrackingId.

Realizzo il sample project utilizzando il pod "GoogleAnalytics". Puoi farci un'idea. Buona fortuna.

prova Env

GoogleAnalytics 3.14

Xcode 7.2.1

+0

Desidero utilizzare GoogleAnalytics nel mio obiettivo quadro. Il problema è che l'obiettivo quadro non supporta l'intestazione di bridging, e entrambi i pod sopra non funzionano per me. Hai qualche raccomandazione per farlo funzionare? – user1615898

+1

@ user1615898, penso che tu abbia due opzioni: 1) usa l'analisi di Firebase. Non ha bisogno di creare un'intestazione di bridging. 2) puoi configurare Google Analytics manualmente con l'SDK dei servizi di Google Analytics . Maggiori informazioni e istruzioni sono qui: https://developers.google.com/analytics/devguides/collection/ios/v3/sdk-download –

7

Ho affrontato lo stesso problema. Non è stato possibile importare l'intestazione "Google/Analytics.h" poiché Xcode genera un errore. Poiché l'intestazione "Google/Analytics.h" non è disponibile in "Google Analytics sdk" come menzionato nella pagina ufficiale di Google.

Così, ho appena usato seguente riga

#import "GAI.h" 

auguriamo che possa funzionare bene. Ambiente Xcode: 8.2 iOS: 10.2

+0

Inoltre non ho potuto importare GoogleAnalytics per funzionare in modo da importare GoogleToolboxForMac –

7

In Podfile

pod 'Google/Analytics' 

In YourFantasticProjectName-Bridging-Header.h

#import "Google/Analytics.h" 

Non c'è bisogno di questo

GGLContext.sharedInstance().configureWithError(&configureError) 

È necessario disporre di una vera e propria tracker

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

Affinché live view per lavorare in GA cruscotto, è necessario tenere traccia dello schermo utilizzando GAIDictionaryBuilder e corretta chiave kGAIScreenName

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

In questa stessa ottica, a tenere traccia degli eventi, è necessario utilizzare GAIDictionaryBuilder poiché creerà un dizionario con i tasti GA corretti e i tasti corretti di GA come

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

sembra funzionare nel simulatore troppo

2

per 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

penso che sia meglio per inviare l'errore a crashlytics, ma continuare l'esecuzione di un'applicazione:

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

Controllate anche this risposta per il modo più nuovo di aggiungere analisi.