Envoi des hits en arrière-plan

  • iOS
  • watchOS
  • tvOS

Intérêt de l’identification

L’identification vous permet de distinguer les hits envoyés suite à l’utilisation directe de votre application, des hits envoyés automatiquement et indépendamment de l’utilisateur en arrière-plan, à l’aide du background fetch ou d’une background task par exemple.

Marquage

Le tracker possède une propriété context qui possède une sous propriété backgroundMode . C’est une énumération de type BackgroundMode .

Par défaut, cette propriété est positionnée à Normal. Dans le cas d’un marquage du background fetch, il faut positionner la propriété à Fetch , et dans tous les autres cas de marquage d’un comportement automatique et indépendant de l’utilisateur, il faut la positionner à Task .

Pour marquer ces types de fonctionnement, il est recommandé d’utiliser une instance de tracker dédiée. Si vous souhaitez utiliser une seule instance de tracker, il faut alors penser à repositionner la propriété à Normal à la fin de l’exécution du background fetch ou de la background task .

Exemples de marquage

  1. Marquage du background fetch avec un tracker dédiéd

    class AppDelegate: UIResponder, UIApplicationDelegate {
        var window: UIWindow?
        let tracker = ATInternet.sharedInstance.tracker("bgFetchTracker")
        func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionKey: Any]?) -> Bool {
            tracker.context.backgroundMode = BackgroundMode.fetch
            return true
        func application(application: UIApplication, performFetchWithCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
            // Do the work associated with the fetch
            tracker.gestures.add("fetch").sendDownload()
    }
    #import "SmartTracker/SmartTracker-Swift.h"
    @interface AppDelegate ()
    @property (nonatomic, strong) Tracker *tracker;
    @implementation AppDelegate
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        self.tracker = [[ATInternet sharedInstance] trackerWithName:@"bgFetchTracker"];
        self.tracker.context.backgroundMode = BackgroundModeFetch;
        return YES;
    - (void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
        // Do the work associated with the fetch
        [[self.tracker.gestures add:@"fetch"] sendDownload];
    @end
  2. Marquage du background fetch avec un tracker global

    func application(application: UIApplication, performFetchWithCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) {
        // Do the work associated with the fetch
        let tracker = ATInternet.sharedInstance.defaultTracker
        tracker.context.backgroundMode = BackgroundMode.fetch
        tracker.gestures.add("fetch").sendDownload()
        tracker.context.backgroundMode = BackgroundMode.normal
    }
    - (void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
        // Do the work associated with the fetch
        Tracker *tracker = [ATInternet sharedInstance].defaultTracker;
        tracker.context.backgroundMode = BackgroundModeFetch;
        [[tracker.gestures addWithName:@"fetch"] sendDownload];
        tracker.context.backgroundMode = BackgroundModeNormal;
    }
  3. Marquage d’une background task avec un tracker dédié

    class AppDelegate: UIResponder, UIApplicationDelegate {
        var window: UIWindow?
        let tracker = ATInternet.sharedInstance.tracker("bgTaskTracker")
        var task = UIBackgroundTaskInvalid
        func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
            tracker.context.backgroundMode = BackgroundMode.task
            return true
        func applicationDidEnterBackground(application: UIApplication) {
            self.task = UIApplication.sharedApplication().beginBackgroundTaskWithExpirationHandler { () -> Void in
                application.endBackgroundTask(self.task)
                self.task = UIBackgroundTaskInvalid
            dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), { () -> Void in
                // Do the work associated with the task
                self.tracker.gestures.add("task").sendDownload()
                application.endBackgroundTask(self.task)
                self.task = UIBackgroundTaskInvalid
    }
    #import "SmartTracker/SmartTracker-Swift.h"
    @interface AppDelegate ()
    @property (nonatomic, strong) Tracker *tracker;
    @property (nonatomic) UIBackgroundTaskIdentifier task;
    @implementation AppDelegate
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        self.tracker = [[ATInternet sharedInstance] trackerWithName:@"bgTaskTracker"];
        self.tracker.context.backgroundMode = ATBackgroundModeTask;
        self.task = UIBackgroundTaskInvalid;
        return YES;
    - (void)applicationDidEnterBackground:(UIApplication *)application {
        self.task = [application beginBackgroundTaskWithName:@"MyTask" expirationHandler:^{
            [application endBackgroundTask:self.task];
            self.task = UIBackgroundTaskInvalid;
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
            // Do the work associated with the task
            [[self.tracker.gestures add:@"task"] sendDownload];
            [application endBackgroundTask:self.task];
            self.task = UIBackgroundTaskInvalid;
    @end
  4. Marquage d’une background task avec un tracker global

    func applicationDidEnterBackground(_ application: UIApplication) {
        let tracker = ATInternet.sharedInstance.defaultTracker
        tracker.context.backgroundMode = BackgroundMode.task
        self.task = UIApplication.sharedApplication().beginBackgroundTaskWithExpirationHandler { () -> Void in
            tracker.context.backgroundMode = BackgroundMode.normal
            application.endBackgroundTask(self.task)
            self.task = UIBackgroundTaskInvalid
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), { () -> Void in
            // Do the work associated with the task
            tracker.gestures.add("task").sendDownload()
            tracker.context.backgroundMode = BackgroundMode.normal
            application.endBackgroundTask(self.task)
            self.task = UIBackgroundTaskInvalid
    }
    - (void)applicationDidEnterBackground:(UIApplication *)application {
        Tracker *tracker = [ATInternet sharedInstance].defaultTracker;
        tracker.context.backgroundMode = BackgroundModeTask;
        self.task = [application beginBackgroundTaskWithName:@"MyTask" expirationHandler:^{
            tracker.context.backgroundMode = BackgroundModeNormal;
            [application endBackgroundTask:self.task];
            self.task = UIBackgroundTaskInvalid;
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
            // Do the work associated with the task
            [[tracker.gestures add:@"task"] sendDownload];
            tracker.context.backgroundMode = BackgroundModeNormal;