web-dev-qa-db-fra.com

Implémenter Google Analytics dans ios swift

Je suis le guide Analytics for 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.

Étape 1

J'ai d'abord installé un SDK Google à l'aide de CocoaPods . Voici le résultat de la console après l'exécution de la commande 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.

Étape 2

Ensuite, comme indiqué dans le guide, le fichier Project .xcworkspace de mon application a été ouvert.

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.

Étape 3

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

Étape 4

J'ai créé une BridgingHeader en choisissant Fichier> Nouveau> Fichier> iOS> Source> Fichier d'en-tête. Je l’ai nommé BridgingHeader.h et se trouve à la racine de mon projet . Le contenu est le suivant:

#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 Google Analytics dans mon AppDelegate.Swift mais je ne peux pas. C'est l'erreur:

Importation Google Analytics AppDelegate.Swift

J'ai aussi essayé import "Google/Analytics.h" mais une autre erreur apparaît: Expected identifier in import declaration.

  • Comment puis-je résoudre ce problème afin que XCode ne me donne pas d'erreur?
  • Est-ce que le BridgingHeader se trompe? Est-ce que je dois pointer du doigt quelque chose pour reconnaître ses en-têtes intérieurs?
  • Dois-je configurer quelque chose d'autre pour Google Analytics qui me manque actuellement?

Merci beaucoup.

11
oscar

Il existe deux options pour la mise en œuvre avec Google Analytics avec CocoaPods. 

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

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

pod 'Google/Analytics'

  • besoin d'un fichier de configuration google (GoogleService-Info.plist)
  • fichier d'en-tête de pontage simple. Il suffit d'ajouter #import <Google/Analytics.h> dans le fichier d'en-tête de pontage.
  • ajoutez import Googledans chaque fichier que vous souhaitez implémenter Google Analytics.

pod 'GoogleAnalytics'

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

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

  1. tête de pontage

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 build-target pour Objective-C-Bridging-Header . Vous devez indiquer le chemin correct pour activer Objective-C-Bridging-Header.

Définir le paramètre construction-cible-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])

}

Pourquoi est-ce que j'utilise trackerWithTrackingId au lieu de la propriété defaultTracker? Vous pourriez avoir une erreur si vous utilisez defaultTracker:

erreur fatale: erreur inattendue lors du déroulement d'une valeur facultative

la valeur initiale de la propriété defaultTracker est nil, mais elle sera définie après l'appel de la méthode trackerWithTrackingId. Mais cela ne fonctionne pas parfaitement parfois. Pour éviter ce problème, je vous recommande d'utiliser directement la méthode trackerWithTrackingId.

Je réalise le exemple de projet avec le pod 'GoogleAnalytics'. Vous pouvez en avoir une idée. Bonne chance.

Test Env

GoogleAnalytics 3.14

Xcode 7.2.1

30
sangjoon moon

J'ai rencontré le même problème. Je ne pouvais pas importer l'en-tête "Google/Analytics.h" car Xcode génère une erreur. Parce que l'en-tête "Google/Analytics.h" 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 cela fonctionnera très bien. Environnement Xcode: 8.2 IOS: 10.2

8
mumu

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
Patricio Bravo

Je pense qu'il est préférable d'envoyer une erreur à crashlytics, mais continuez à exécuter une application:

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

Vérifiez également this answer pour connaître le moyen le plus récent d’ajouter des analyses.

0
Nik Kov