Usa Analytics en WebView en iOS

Las llamadas para registrar eventos o definir las propiedades de usuario que se emiten desde WebView se deben reenviar al código nativo antes de enviarlas a Google Analytics para Firebase.

Implementa un controlador JavaScript

El primer paso para usar Google Analytics para Firebase en WebView es crear funciones de JavaScript para reenviar eventos y propiedades de usuario al código nativo. El siguiente ejemplo muestra cómo hacerlo de una manera compatible con el código nativo de Android y de iOS:
function logEvent(name, params) {
  if (!name) {
    return;
  }

  if (window.AnalyticsWebInterface) {
    // Call Android interface
    window.AnalyticsWebInterface.logEvent(name, JSON.stringify(params));
  } else if (window.webkit
      && window.webkit.messageHandlers
      && window.webkit.messageHandlers.firebase) {
    // Call iOS interface
    var message = {
      command: 'logEvent',
      name: name,
      parameters: params
    };
    window.webkit.messageHandlers.firebase.postMessage(message);
  } else {
    // No Android or iOS interface found
    console.log("No native APIs found.");
  }
}

function setUserProperty(name, value) {
  if (!name || !value) {
    return;
  }

  if (window.AnalyticsWebInterface) {
    // Call Android interface
    window.AnalyticsWebInterface.setUserProperty(name, value);
  } else if (window.webkit
      && window.webkit.messageHandlers
      && window.webkit.messageHandlers.firebase) {
    // Call iOS interface
    var message = {
      command: 'setUserProperty',
      name: name,
      value: value
   };
    window.webkit.messageHandlers.firebase.postMessage(message);
  } else {
    // No Android or iOS interface found
    console.log("No native APIs found.");
  }
}

Implementa una interfaz nativa

Para invocar el código nativo de iOS desde JavaScript, crea una clase de controlador de mensajes conforme al protocolo WKScriptMessageHandler. Puedes hacer llamadas de Google Analytics para Firebase dentro de la devolución de llamada userContentController:didReceiveScriptMessage::

Swift

func userContentController(_ userContentController: WKUserContentController,
                         didReceive message: WKScriptMessage) {
  guard let body = message.body as? [String: Any] else { return }
  guard let command = body["command"] as? String else { return }
  guard let name = body["name"] as? String else { return }

  if command == "setUserProperty" {
    guard let value = body["value"] as? String else { return }
    Analytics.setUserProperty(value, forName: name)
  } else if command == "logEvent" {
    guard let params = body["parameters"] as? [String: NSObject] else { return }
    Analytics.logEvent(name, parameters: params)
  }
}

Objective-C

- (void)userContentController:(WKUserContentController *)userContentController
      didReceiveScriptMessage:(WKScriptMessage *)message {
  if ([message.body[@"command"] isEqual:@"setUserProperty"]) {
    [FIRAnalytics setUserPropertyString:message.body[@"value"] forName:message.body[@"name"]];
  } else if ([message.body[@"command"] isEqual: @"logEvent"]) {
    [FIRAnalytics logEventWithName:message.body[@"name"] parameters:message.body[@"parameters"]];
  }
}

Por último, agrega el controlador de mensajes al controlador de contenido del usuario de WebView:

Swift

self.webView.configuration.userContentController.add(self, name: "firebase")

Objective-C

 [self.webView.configuration.userContentController addScriptMessageHandler:self
                                                                     name:@"firebase"];

Próximos pasos

Para ver una implementación completamente funcional de Google Analytics para Firebase en WebView, consulta el ejemplo de analytics-webview.

Enviar comentarios sobre…

¿Necesitas ayuda? Visita nuestra página de asistencia.