Show Menu
ARGOMENTI×

Implementazione del tracciamento locale

Informazioni sul tracciamento locale

In questa pagina, scopri come garantire che il tracciamento delle notifiche locali sia stato implementato correttamente. Questo implica che la notifica locale è già stata configurata.
Il tracciamento delle notifiche locali può essere suddiviso in tre tipi:
  • Impressioni locali - Quando una notifica locale è stata inviata al dispositivo e si trova sul centro di notifica, ma non è stata toccata per nulla. Nella maggior parte dei casi, il numero di impression deve essere simile a quello distribuito. Garantisce che il dispositivo abbia ricevuto il messaggio e ritrasmetta tali informazioni al server.
  • Clic locale - Quando viene inviata una notifica locale al dispositivo e l'utente fa clic sul dispositivo. L'utente voleva visualizzare la notifica (che a sua volta si sposterà al tracciamento aperto locale) o chiudere la notifica.
  • Aperto locale - Quando una notifica locale è stata inviata al dispositivo e l'utente ha fatto clic sulla notifica che causa l'apertura dell'applicazione. Questa operazione è simile al clic locale, ma se la notifica è stata chiusa, non verrà attivata alcuna apertura locale.
Per implementare il tracciamento per Adobe Campaign Standard, l’applicazione mobile deve includere Mobile SDK nell’applicazione. Questi SDK sono disponibili in Adobe Mobile Services.
Per inviare le informazioni di tracciamento, è necessario inviare tre variabili: due fanno parte dei dati ricevuti da Adobe Campaign e l'altro è una variabile di azione che determina se si tratta di un'impressione, clic o apertura.
Variabile
Valore
deliveryId
"deliveryId" dai dati in arrivo (simile al tracciamento push in cui viene utilizzato"_dld")
broadlogId
"broadlogId" dai dati in arrivo (simile al tracciamento push in cui viene utilizzato "_mld")
action
"1" per Open, "2" per Click e "7" per Impression

Implementazione del tracciamento dell'impressione locale

Per il tracciamento delle impressioni, è necessario inviare il valore "7" per l'azione quando si chiamano le funzioni collectMessageInfo() o trackAction().

Per Android

L’SDK di Mobile per Adobe Experience Platform avvia il tracciamento dell’impressione per la notifica locale quando viene attivata.

Per iOS

Per spiegare come implementare il tracciamento dell'impressione, dobbiamo comprendere i tre stati di un'applicazione:
  • Primo piano : quando l'applicazione è attualmente attiva e sullo schermo in primo piano.
  • Sfondo : quando l'applicazione non è visualizzata sullo schermo ma il processo non è chiuso. Quando si fa doppio clic sul pulsante Home, in genere vengono visualizzate tutte le applicazioni in background.
  • Disattivato/Chiuso : quando il processo dell'applicazione è stato eliminato. Se un'applicazione viene chiusa, Apple non la chiamerà fino al riavvio dell'applicazione. Ciò significa che non potrai mai sapere con certezza quando la notifica è stata ricevuta su iOS.
Per avere un monitoraggio delle impression ancora funzionante mentre l'applicazione è in background, è necessario inviare "Content-Available" per far sapere all'applicazione che il tracciamento deve essere fatto.
L’SDK di Mobile per Adobe Experience Platform avvia il tracciamento dell’impressione per la notifica locale quando viene attivata.
Il tracciamento delle impressioni iOS non è accurato e non deve essere considerato affidabile.

Implementazione del monitoraggio dei clic

Per il monitoraggio dei clic, è necessario inviare il valore "2" per l'azione quando si chiamano le funzioni collectMessageInfo() o trackAction().

Per Android

Per tenere traccia del clic, è necessario gestire due scenari:
  • L’utente visualizza la notifica ma la cancella.
  • L'utente visualizza la notifica e fa clic su di essa, per attivare un tracciamento aperto.
Il primo scenario di clic viene tracciato da SDK di Mobile Adobe Experience Platform.

Per iOS

// AppDelegate.swift
...
import os.log
import UserNotifications
...
  
func registerForPushNotifications() {
        let center = UNUserNotificationCenter.current()
        center.delegate = notificationDelegate
        //Here we are creating a new Category that allows us to handle Dismiss Actions
        let defaultCategory = UNNotificationCategory(identifier: "DEFAULT", actions: [], intentIdentifiers: [], options: .customDismissAction)
        //Add it to our array of Category, in this case we only have one
        center.setNotificationCategories([defaultCategory])
        center.requestAuthorization(options: [.alert, .sound, .badge]) {
            (granted, error) in
            os_log("Permission granted: %{public}@", type:. debug, granted.description)
            if error != nil {
                return
            }
            if granted {
                os_log("Notifications allowed", type: .debug)
            }
            else {
                os_log("Notifications denied", type: .debug)
            }
  
            // 2. Attempt registration for remote notifications on the main thread
            DispatchQueue.main.async {
                UIApplication.shared.registerForRemoteNotifications()
            }
        }
    }

Quindi per gestire la chiusura e inviare le informazioni di tracciamento, devi aggiungere quanto segue:
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
        let userInfo = response.notification.request.content.userInfo
        switch response.actionIdentifier {
        case UNNotificationDismissActionIdentifier:
            print("Dismiss Action")
            let deliveryId = userInfo["deliveryId"] as? String
            let broadlogId = userInfo["broadlogId"] as? String
            if (deliveryId != nil && broadlogId != nil) {
                // If you're using  ACPCore v2.3.0 or later, use the line below.
                ACPCore.collectMessageInfo(["deliveryId": deliveryId!, "broadlogId": broadlogId!, "action":"2"])
                // Else comment out the above line and uncomment the line below
                // ACPCore.trackAction("tracking", data: ["deliveryId": deliveryId!, "broadlogId": broadlogId!, "action":"2"])
            }
        default:
            ////MORE CODE
        }
        completionHandler()
    }

Implementazione del tracciamento aperto

È necessario inviare "1" e "2" perché l'utente deve fare clic sulla notifica per aprire l'applicazione. Se l’applicazione non viene avviata/aperta tramite notifica locale, non si verificano eventi di tracciamento.

Per Android

Per tenere traccia dell'apertura, è necessario creare un intento. Gli oggetti Intent consentono ad Android OS di chiamare il metodo al termine di determinate azioni, in questo caso facendo clic sulla notifica per aprire l'app.
Questo codice è basato sull’implementazione del monitoraggio delle impression dei clic. Con l'intento impostato, ora è necessario inviare le informazioni di tracciamento al Adobe Campaign. In questo caso, la visualizzazione Android(Activity) che ha attivato la notifica verrà aperta o portata in primo piano a seguito del clic dell'utente. L'oggetto intento in Activity contiene i dati di notifica che possono essere utilizzati per tenere traccia dell'apertura.
MainActivity.java (extension Activity)
@Override
protected void onResume() {
    super.onResume();
    handleTracking();
}
  
  
private void handleTracking() {
    //Check to see if this view was opened based on a notification
    Intent intent = getIntent();
    Bundle data = intent.getExtras();
  
    if (data != null) {
        //Looks it was opened based on the notification, lets get the tracking we passed on.
        Map<String, String> notificationData = (Map<String, Object>)data.getSerializableExtra("NOTIFICATION_USER_INFO");
        String deliveryId = (String)notificationData.get("deliveryId");
        String messageId = (String)notificationData.get("broadlogId");
  
  
  
        if (deliveryId != null && messageId != null) {
            HashMap<String, String> contextData = new HashMap<>();
            contextData.put("deliveryId", deliveryId);
            contextData.put("broadlogId", messageId);
  
            //Send Click Tracking since the user did click on the notification
            contextData.put("action", "2");
            // If you're using  ACPCore v1.4.0 or later, use the next line.
            MobileCore.collectMessageInfo(contextData);
            // Else comment out the above line and uncomment the line below
            // MobileCore.trackAction("tracking", contextData);
  
            //Send Open Tracking since the user opened the app
            contextData.put("action", "1");
            // If you're using  ACPCore v1.4.0 or later, use the next line.
            MobileCore.collectMessageInfo(contextData);
            // Else comment out the above line and uncomment the line below
            // MobileCore.trackAction("tracking", contextData);
        }
    }
}

Per iOS

import os.log
import Foundation
import UserNotifications
import UserNotificationsUI
import ACPCore
  
class NotificationDelegate: NSObject, UNUserNotificationCenterDelegate {
  
    // Called when user clicks the local notification or also called from willPresent()
    func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
  
        let userInfo = response.notification.request.content.userInfo
        os_log("App push data %{public}@, in userNotificationCenter:didReceive()", type: .debug, userInfo)
        switch response.actionIdentifier {
        case UNNotificationDismissActionIdentifier:
            //This is to handle the Dismiss Action
            let deliveryId = userInfo["deliveryId"] as? String
            let broadlogId = userInfo["broadlogId"] as? String
            if (deliveryId != nil && broadlogId != nil) {
            // If you're using  ACPCore v2.3.0 or later, use the line below.
                ACPCore.collectMessageInfo(["deliveryId": deliveryId!, "broadlogId": broadlogId!, "action":"2"])
            // Else comment out the above line and uncomment the line below
            // ACPCore.trackAction("tracking", data: ["deliveryId": deliveryId!, "broadlogId": broadlogId!, "action":"2"])
            }
        default:
            //This is to handle the tracking when the app opens
            let deliveryId = userInfo["deliveryId"] as? String
            let broadlogId = userInfo["broadlogId"] as? String
            if (deliveryId != nil && broadlogId != nil) {
               // If you're using  ACPCore v2.3.0 or later, use the line below.
               ACPCore.collectMessageInfo(["deliveryId": deliveryId!, "broadlogId": broadlogId!, "action":"2"])
               ACPCore.collectMessageInfo(["deliveryId": deliveryId!, "broadlogId": broadlogId!, "action":"1"])
               // Else comment out the above line and uncomment the line below
               // ACPCore.trackAction("tracking", data: ["deliveryId": deliveryId!, "broadlogId": broadlogId!, "action":"2"])
               // ACPCore.trackAction("tracking", data: ["deliveryId": deliveryId!, "broadlogId": broadlogId!, "action":"1"])
            }
        }
        completionHandler()
    }
}