Mise en œuvre de Google Analytics dans iOS swift

je suis les analyses pour iOS (developers.google.com/analytics/devguides/collection/ios/v3/?ver=swift) et j'ai des erreurs dans mon projet de Code Swift que je ne peux pas corriger. Je travaille avec Xcode 6.4, Swift et la cible de déploiement iOS 8.1.

Etape 1

J'ai d'abord installé un SDK Google en utilisant des CocoaPods. C'est le résultat de la console après avoir lancé pod install commande:

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.

Étape 2

puis a ouvert, comme dit dans le guide, le projet de mon application .fichier xcworkspace.

Mon Podfile ressemble à ceci:

# 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

où XXXXXX est le nom de mon projet.

Etape 3

j'ai le fichier de configuration GoogleService-Info.plist et inclus dans mon projet en ajoutant toutes les cibles (2 cibles dans mon projet).

Etape 4

j'ai créé un BridgingHeader En choisissant Fichier > Nouveau > Fichier > iOS > Source > fichier D'en-tête. J'ai nommé BridgingHeader.h et est à la racine de mon Projet. Le contenu est:

#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

où "XXXXX" est le nom de mon projet.

Étape 5

Maintenant, les problèmes: J'ai essayé d'inclure/importer le Google Analytics dans mon AppDelegate.rapide, mais je ne peux pas. C'est l'erreur:

AppDelegate.swift importer Google Analytics

j'ai aussi essayé import "Google/Analytics.h" mais une autre erreur s'affiche: Expected identifier in import declaration.

  • Comment puis-je corriger cela pour que XCode ne me donne pas d'erreurs?
  • le BridgingHeader a-t-il tort? Est-ce que je dois montrer du doigt pour reconnaître ses entêtes intérieures?
  • dois-je configurer autre chose pour Google Analytics qui me manque en ce moment?

je vous Remercie beaucoup.

10
demandé sur oscar 2016-01-27 22:03:39

5 réponses

il existe deux options pour la mise en œuvre avec Google Analytics en utilisant les CocoaPods.

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

Il y a des avantages et des inconvénients entre eux.

pod 'Google / Analytics'

  • besoin du fichier de configuration google (GoogleService-Info.plist)
  • simple pontage fichier d'en-tête. Juste ajouter #import <Google/Analytics.h> dans le fichier d'en-tête de pont.
  • ajouter import Googledans chaque fichier, vous souhaitez mettre en œuvre google analytics.

pod 'GoogleAnalytics'

  • pas de fichier de configuration google (GoogleService-Info.plist)
  • fichier d'en-tête de pont plus complexe.

je préfère utiliser pod 'GoogleAnalytics' mais je vais expliquer comment résoudre ce problème en utilisant pod 'Google / Analytics' parce que le site officiel de google recommande pod 'Google/Analytics'.

  1. le lien entre le l'en-tête

Vous avez juste besoin d'une ligne de code pour google analytics.

#import <Google/Analytics.h>

N'oubliez pas de définir le paramètre target-build pour L'en-tête Objective-C-Bridging. Vous devez fournir le chemin correct pour activer L'en-tête Objective-C-Bridge.

Fixer Un Objectif-Construire Mise En Objectif-C-André-D'En-Tête $(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])

}

Pourquoi utiliser trackerWithTrackingId au lieu de la propriété defaultracker? Vous pourriez avoir une erreur si vous utilisez defaultracker:

erreur fatale: découverte inattendue nulle en déballant une option valeur

la valeur initiale de la propriété defaultracker est nulle, mais elle sera fixée après trackerWithTrackingId method s'appelle. Mais ça ne marche pas toujours parfaitement. Pour éviter ce problème, je recommande d'utiliser trackerWithTrackingId méthode directement.

je fais le exemple de projet utilisant pod 'GoogleAnalytics'. Vous pouvez vous faire une idée. Bonne chance.

Tester Env

GoogleAnalytics 3.14

Xcode 7.2.1

30
répondu sangjoon moon 2016-02-15 23:59:24

Podfile

pod 'Google/Analytics'

YourFantasticProjectName-Bridging-Header.h

#import "Google/Analytics.h"

Vous n'avez pas besoin de cette

GGLContext.sharedInstance().configureWithError(&configureError)

Vous devez avoir un bon tracker

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

pour que la vue en direct fonctionne dans le tableau de bord de L'AG, vous devez suivre l'écran en utilisant GAIDictionaryBuilder et corriger la touche kGAIScreenName

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

Dans la même veine, pour suivre les événements, vous devez utiliser GAIDictionaryBuilder comme il va créer le dictionnaire avec les clés GA correctes, et GA aime correct les touches

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

Il semble travailler dans le simulateur trop

9
répondu onmyway133 2017-01-24 08:55:35

j'ai fait face au même problème. Je ne pouvais pas importer le "Google/Analytics.h" en-tête comme Xcode générer l'erreur. Parce Que " Google / Analytics.h " header n'est pas disponible dans le 'GoogleAnalytics sdk' comme mentionné dans la page officielle de Google.

donc, je viens d'utiliser la ligne suivante

#import "GAI.h"

J'espère que ça marchera très bien. Environnement Xcode: 8.2 iOS: 10.2

8
répondu mumu 2017-01-23 10:11:34

pour 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
répondu Patricio Bravo 2017-02-20 15:10:48

je pense qu'il est préférable d'envoyer erreur de crashlytics, mais de poursuivre l'exécution d'une application:

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

vérifiez aussi réponse pour la nouvelle façon d'ajouter des statistiques.

0
répondu Nik Kov 2017-11-03 20:24:14