it-swarm.com.de

Implementieren Sie Google Analytics in ios swift

Ich befolge die Anleitung zu Analytics für iOS (Developers.google.com/analytics/devguides/collection/ios/v3/?ver=Swift) und ich habe Fehler in meinem Swift-Code-Projekt, das ich nicht reparieren kann. Ich arbeite mit XCode 6.4, Swift und dem iOS Deployment Target 8.1.

Schritt 1

Zuerst habe ich ein Google SDK mit CocoaPods installiert. Dies ist das Ergebnis der Konsole, nachdem der Befehl pod install ausgeführt wurde:

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.

Schritt 2

Dann öffnet sich, wie im Handbuch erwähnt, die Projektdatei .xcworkspace der App.

Meine Poddatei sieht so aus:

# 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

Dabei ist XXXXXX der Name meines Projekts.

Schritt 3

Ich erhielt die Konfigurationsdatei GoogleService-Info.plist und fügte alle Ziele (2 Ziele in meinem Projekt) in mein Projekt ein.

Schritt 4

Ich habe einen BridgingHeader erstellt, indem Sie Datei> Neu> Datei> iOS> Quelle> Header-Datei wählen. Ich habe es BridgingHeader.h genannt und ist in der Wurzel meines Projekts. Der Inhalt ist:

#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

Dabei ist "XXXXX" der Name meines Projekts.

Schritt 5

Nun die Probleme: Ich habe versucht, Google Analytics in meine AppDelegate.Swift einzubeziehen/importieren, kann es aber nicht. Das ist der Fehler:

AppDelegate.Swift importieren Google Analytics

Ich habe auch import "Google/Analytics.h" ausprobiert, aber ein anderer Fehler wird angezeigt: Expected identifier in import declaration.

  • Wie kann ich das beheben, damit mir XCode keine Fehler gibt?
  • Stimmt der BridgingHeader nicht? Muss ich darauf irgendwie hinweisen, um seine inneren Header zu erkennen?
  • Muss ich noch etwas für Google Analytics konfigurieren, das mir gerade fehlt?

Vielen Dank.

11
oscar

Es gibt zwei Möglichkeiten für die Implementierung mit Google Analytics mit CocoaPods. 

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

Es gibt Vor- und Nachteile zwischen ihnen.

Pod 'Google/Analytics'

  • brauche eine Google-Konfigurationsdatei (GoogleService-Info.plist)
  • einfache Überbrückungsheaderdatei. Fügen Sie einfach #import <Google/Analytics.h> in der Bridging-Header-Datei hinzu.
  • fügen Sie import Googlein jeder Datei hinzu, die Sie Google Analytics implementieren möchten.

Pod 'GoogleAnalytics'

  • keine Google-Konfigurationsdatei (GoogleService-Info.plist)
  • komplexere Überbrückungsheaderdatei. 

Ich ziehe es vor, Pod "GoogleAnalytics" zu verwenden, aber ich erkläre, wie Sie dieses Problem mit Pod "Google/Analytics" Lösen können, da die offizielle Google-Website den Pod "Google/Analytics" empfiehlt.

  1. Überbrückungsheader

Sie benötigen nur eine Codezeile für Google Analytics.

#import <Google/Analytics.h>

Vergessen Sie nicht, die Target-Build-Einstellung für Objective-C-Bridging-Header festzulegen. Sie müssen den richtigen Pfad angeben, um Objective-C-Bridging-Header zu aktivieren.

Setze-Ziel-Einstellung-Ziel-C-Brücken-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])

}

Warum verwende ich trackerWithTrackingId anstelle der defaultTracker-Eigenschaft? Sie könnten einen Fehler erhalten, wenn Sie defaultTracker verwenden:

schwerwiegender Fehler: unerwartet wurde beim Entpacken eines optionalen Werts nichts gefunden}

der Anfangswert der defaultTracker-Eigenschaft ist null, wird jedoch nach dem Aufruf der Methode trackerWithTrackingId festgelegt. Aber manchmal funktioniert es nicht perfekt. Um dieses Problem zu vermeiden, empfehle ich, die Methode trackerWithTrackingId direkt zu verwenden.

Ich mache das Beispielprojekt mit dem Pod 'GoogleAnalytics'. Sie können eine Idee davon bekommen. Viel Glück.

Test Env

GoogleAnalytics 3.14

Xcode 7.2.1

30
sangjoon moon

In Podfile

pod 'Google/Analytics'

In YourFantasticProjectName-Bridging-Header.h

#import "Google/Analytics.h"

Du brauchst das nicht

GGLContext.sharedInstance().configureWithError(&configureError)

Sie benötigen eine korrekte tracker

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

Damit die Live-Ansicht im GA-Dashboard funktionieren kann, müssen Sie den Bildschirm mit GAIDictionaryBuilder und der korrekten Taste kGAIScreenName verfolgen.

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

Zur Verfolgung von Ereignissen müssen Sie auf dieselbe Weise GAIDictionaryBuilder verwenden, da das Wörterbuch mit den korrekten GA - Tasten erstellt wird und GA den korrekten Tasten entspricht

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

Es scheint auch im Simulator zu funktionieren

9
onmyway133

Ich stand vor demselben Problem. Ich konnte den Header "Google/Analytics.h" nicht importieren, da Xcode einen Fehler generiert. "Google/Analytics.h" -Header ist nicht in der "GoogleAnalytics-SDK" verfügbar, wie auf der offiziellen Seite von Google erwähnt.

Also habe ich nur folgende Zeile verwendet

#import "GAI.h"

Hoffe, es wird gut funktionieren. Umgebung Xcode: 8.2 IOS: 10.2

8
mumu

Für 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
3
Patricio Bravo

Ich denke, es ist besser, Fehler an crashlytics zu senden, aber weiterhin eine App auszuführen:

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

Überprüfen Sie auch this , ob der neueste Weg zum Hinzufügen von Analysen vorhanden ist.

0
Nik Kov