Con Google Analytics para iOS v2 de Google sugiere crear subclases de sus GAITrackedViewController clase en lugar de UIViewController. Lo que debemos hacer en el caso de UITableViewController?

fuente

#import "GAITrackedViewController.h"

@interface AboutViewController : GAITrackedViewController
InformationsquelleAutor palmi | 2013-04-29

7 Comentarios

  1. 126

    Pantalla Manual De Seguimiento

    Recordar que la ampliación de GAITrackedViewController es sólo una forma de dar seguimiento a las vistas de la pantalla. La forma manual es igual de fácil.

    SDK v2

    - (void)viewDidAppear:(BOOL)animated
    {
        [super viewDidAppear:animated];
    
        //returns the same tracker you created in your app delegate
        //defaultTracker originally declared in AppDelegate.m
        id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
    
        //manual screen tracking
        [tracker sendView:@"Home Screen"];
    }

    SDK v3

    #import "GAI.h"
    #import "GAIFields.h"
    #import "GAIDictionaryBuilder.h"

    - (void)viewDidAppear:(BOOL)animated
    {
        [super viewDidAppear:animated];
    
        //returns the same tracker you created in your app delegate
        //defaultTracker originally declared in AppDelegate.m
        id tracker = [[GAI sharedInstance] defaultTracker];
    
        //This screen name value will remain set on the tracker and sent with
        //hits until it is set to a new value or to nil.
        [tracker set:kGAIScreenName
               value:@"Home Screen"];
    
        //manual screen tracking
        [tracker send:[[GAIDictionaryBuilder createScreenView] build]];
    }

    De referencia

    https://developers.google.com/analytics/devguides/collection/ios/v2/screens#manual
    https://developers.google.com/analytics/devguides/collection/ios/v3/screens#manual

    • Tuve que usar trackerWithTrackingId: pero que funcionó. Gracias por el plomo.
    • nevermind. [[GAI sharedInstance] defaultTracker] hizo el trabajo. gracias de nuevo.
    • Me pareció muy confuso a mí mismo, pero defaultTracker sólo funciona como magia. Me alegro de que podría ayudar.
    • he probado tu código, pero no puedo hacer que funcione. puede usted explicar cómo ponerlo en práctica. gracias de antemano:)
    • Usted puede poner estos dos líneas en cualquier parte del código para el seguimiento de una visión de la pantalla. id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker]; [tracker sendView:@»Pantalla de Inicio»];
    • Asegúrese de incluir esta línea en su .h archivo: #import «GAITrackedViewController.h»
    • ¿Por qué llama sendView en viewWillAppear? será mejor enviar en viewDidAppear?
    • Tuve que #import «GAIFields.h» para hacer kGAIScreenName disponible
    • Su mejor hacerlo en viewDidAppear, documentación en GAITrackedViewController.h lo dice.
    • Se trabajará en viewWillAppear o viewDidAppear. Pero he cambiado mi respuesta a alinear con la forma en que GAITrackedViewController hace como usted ha señalado. Gracias por la sugerencia.
    • Ser específico. Lo que no funciona para usted? ¿Un error?
    • Sólo para agregar: Si usted está usando una vieja v3 que no es la última, la última línea debería ser: [tracker send:[[GAIDictionaryBuilder createAppView] build]];
    • respecto a este comentario: This screen name value will remain set on the tracker and sent with hits until it is set to a new value or to nil. ¿esto significa que este valor habrá que establecer para nil en viewWillDisapear?
    • Usted puede ponerlo a nil, pero no darle un nuevo valor para cada vista de todos modos? ¿Hay algún caso en que usted desea enviar un screenView sin screenName? Dejando conjunto no debe causar fugas de memoria, ya que el tracker es un singleton.
    • después de una inspección más, parece que la vista se mantendrá como ‘activo’ durante 30 minutos, incluso si el usuario minimiza la aplicación, o deja la vista. que puede ser engañoso.
    • usted tiene un punto, que era la intención de la aplicación en mi final de todos modos, al no llegar a ese extremo. estaba mirando a ver cómo precisas y significativas que las mediciones se… pero estoy de acuerdo 🙂

  2. 14

    En un esfuerzo para limpiar el manual de código de seguimiento en mi Swift proyecto, he creado el siguiente UIViewController extensión.

    extension UIViewController {
        func trackScreenView(screenName: String) {
            let tracker = GAI.sharedInstance().defaultTracker
            tracker.set(kGAIScreenName, value: screenName)
            tracker.send(GAIDictionaryBuilder.createAppView().build())
        }
    }

    Probablemente no es adecuado para el uso de una extensión de esta manera, como que no voy a usar ninguna de las propiedades de UIViewController, pero es una manera conveniente de que se siente mejor que un método global. Si no te importa usar el nombre de la clase en lugar de un formato agradable nombre, incluso se podría usar el NSStringFromClass(self.dynamicType) para obtener el ViewController nombre de la clase como:

    extension UIViewController {
        func trackScreenView() {
            let tracker = GAI.sharedInstance().defaultTracker
            tracker.set(kGAIScreenName, value: NSStringFromClass(self.dynamicType))
            tracker.send(GAIDictionaryBuilder.createAppView().build())
        }
    }

    Esto me permite agregar manual de seguimiento de mi UITableViewControllers con el siguiente código:

    override func viewDidAppear(animated: Bool) {
        super.viewDidAppear(animated)
        trackScreenView("Detail View")  //Or call this without any arguments if using the NSStringFromClass idea 
    }

    Agradable y limpio. ¡A disfrutar!

    • Muy bonito, muy facilmente implementado así, gracias.
    • «Probablemente no sea adecuado para el uso de una extensión de esta manera»… No, esto es en realidad un apropiado uso de una extensión. De hecho, lo que realmente me intriga que Google no hacer esto por sí mismos. Hacer todos su punto de vista a los controladores una subclase de GAITrackedViewController sólo para hacer seguimiento de analytics, eso es lo que es inadecuado. Lo que si desea utilizar algún otro marco que también se requiere la creación de subclases su costumbre de Controlador de Vista de clase? No, la extensión es el camino a seguir. Gran respuesta!
    • «De hecho, lo que realmente me intriga que Google no hacer esto por sí mismos» y, a continuación, «¿Qué pasa si queremos usar algún otro framework»… Así que si 2 servicios creado una categoría que había «trackScreenView» método de la construcción más probabilidades de fallar y si fueran diferentes, entonces sería necesario llamar a los 2 métodos en cada viewDidAppear. No hay ninguna victoria en esta solución. La respuesta para este tipo de cosas es SIEMPRE la costumbre de tener un superclase para la vista de los controladores. Reemplazar la vista hizo aparecer en la superclase y llamar a lo de las llamadas que usted necesita a partir de ahí.
  3. 4

    Como resultado de la Sdk falta un GAITrackedTableViewController he creado un simple cuidada aplicación de la pantalla manual viev de seguimiento.

    Crear una categoría para la GAI de clase, ya que esto es ya singleton y de fácil acceso.

    #import "GAI+Tracking.h"
    #import "GAIFields.h"
    #import "GAIDictionaryBuilder.h"
    
    @implementation GAI (Tracking)
    
    - (void)trackScreenView:(NSString *)screenName
    {
        [self.defaultTracker set:kGAIScreenName value:screenName];
        [self.defaultTracker send:[[GAIDictionaryBuilder createAppView] build]];
    }
    
    @end

    Ahora sólo la pista a una vista de pantalla como este

    - (void)viewDidAppear:(BOOL)animated
    {
        [super viewDidAppear:animated];
        [[GAI sharedInstance] trackScreenView:@"Counts map screen"];
    }

    Este tipo de overules Googles idea de tener más de un seguimiento en el mismo tiempo. (No he tenido la necesidad aún). Para alojar esto acaba de cambiar el nombre de su método de seguimiento después de que tracker utiliza, y utilice el rastreador que desea.

    #import "GAI+Tracking.h"
    #import "GAIFields.h"
    #import "GAIDictionaryBuilder.h"
    
    @implementation GAI (Tracking)
    
    - (void)trackDefaultScreenView:(NSString *)screenName
    {
        [self.defaultTracker set:kGAIScreenName value:screenName];
        [self.defaultTracker send:[[GAIDictionaryBuilder createAppView] build]];
    }
    
    @end
    • Esta es una limpia ejecución de la misma, el ahorro de todos los de copiar/pegar en todas partes para UITableViewControllers. Saludos compañero.
    • Sólo una nota – createAppView está en desuso. Uso createScreenView lugar.
  4. 1

    Asegúrese de que todos sus viewDidAppear llamada [super viewDidAppear]

    A continuación, asegúrese de que cada uno de su subclase de UITableViewController también es una subclase de myTableViewController

    en [myTableViewController viewDidAppear], implementar todas las otras respuestas.

    Sólo complementando todas las otras respuestas buenas por ahí. De esa manera se puede conseguir algo tan bueno como GAITrackedViewController.h

    De la misma manera que asegúrese de que todas mis otras UIViewController subclase también es una subclase de super UIViewController y entonces yo hago lo mismo.

  5. 0

    Para Swift puede utilizar

    AppDelegate.appDelegateIns.defTrackerIns?.set(kGAIScreenName, value: "Enter Your Screen Name")
            AppDelegate.appDelegateIns.defTrackerIns?.send(GAIDictionaryBuilder.createScreenView().build() as [NSObject : AnyObject])

    Incluir Esto en su Aplicación Delegado

    static let appDelegateIns = AppDelegate()
        let gai = GAI.sharedInstance()
        let defTrackerIns = GAI.sharedInstance().tracker(withTrackingId: "Your Tracking Id")
        let gaDefTargetURL = "https://developers.google.com/analytics"
  6. -1

    Asumiendo que no tienen una subclase de UITableViewController sí mismos, no veo por qué no podía utilizar su GAITrackedViewController y, a continuación, implementar el UITableViewDataSource y UITableViewDelegate protocolos de sí mismo.

    • Esto me deja con dos errores. Comentar las siguientes líneas elimina los errores, pero luego UITableViewController no carga las filas. 🙁 1)No visible @interface for 'GAITrackedViewController' declares the selector 'initWithStyle:' 2)Property 'clearsSelectionOnViewWillAppear' not found on object of type 'MenuViewController *'
    • Eso es porque los que son propiedades de UITableViewController, no UIViewController. En lugar de llamar a ‘initWithStyle:» en el viewcontroller, tendrías que tener el viewcontroller establecer el estilo en el UITableView ejemplo es el dueño. Lo mismo con el clearsSelection de la propiedad.
    • Si tiene que cambiar toda su architcture porque si un simple seguimiento de marco, algo está realmente mal. No veo por qué Google no hacer un reemplazo para ITableViewController. Tal vez es porque seguimiento manual es tan simple. Yo digo: no te molestes con Googles anular. Haciendo de forma manual también te da más control.
    • UITableViewController hace un montón más que la implementación de la UITableViewDatasource. También se encarga de desplazar el formato tableview si establece una inputfield como primera respuesta en el interior de una célula. Perder esto y mucho más cuando no se hereda de UITableViewController.

Dejar respuesta

Please enter your comment!
Please enter your name here