es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Puedo usar sendBeacon para guardar métricas de duración de sesión en tiempo real en dispositivos iOS?

He integrado la biblioteca timeonsite para almacenar el tiempo que los usuarios pasan en el sitio en una base de datos MySQL. Estoy utilizando el siguiente código para lograr lo mismo.

Sin embargo, los datos no se están almacenando en dispositivos iOS como el iPhone o el iPad, pero funciona en todos los demás navegadores como Chrome, Edge, Opera, Firefox, etc., incluyendo Chrome y Firefox para Android.

var Tos;
(function(d, s, id, file) {
  var js, fjs = d.getElementsByTagName(s)[0];
  if (d.getElementById(id)) return;
  js = d.createElement(s);
  js.id = id;
  js.onload = function() {

    var config = {
      trackBy: 'seconds',
      callback: function(data) {
        console.log(data);
        // give your endpoint URL server-side URL
        // that is going to handle your TOS data which is of POST method.
        // Eg. PHP, nodejs or python URL which saves this data to your DB

        // replace with your endpoint URL
        var endPointUrl = 'http://localhost:4500/tos';

        if (data && data.trackingType) {
          if (data.trackingType == 'tos') {
            if (Tos.verifyData(data) != 'valid') {
              console.log('¡Datos abolidos!');
              return;
            }
          }

          // make use of sendBeacon if this API is supported by your browser.
          // sendBeacon is experimental technology; it may not work well
          if (navigator && typeof navigator.sendBeacon === 'function') {
            var blob = new Blob([JSON.stringify(data)], {
              type: 'application/json'
            });
            navigator.sendBeacon(endPointUrl, blob);
          }

        }
      }
    };

    if (TimeOnSiteTracker) {
      Tos = new TimeOnSiteTracker(config);
    }
  };
  js.src = file;
  fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'TimeOnSiteTracker', 'https://cdnjs.cloudflare.com/ajax/libs/timeonsite/1.2.0/timeonsitetracker.js'));

¿Cuál es la razón de este problema y cómo se puede resolver?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema podría deberse a que los dispositivos iOS no admiten el método navigator.sendBeacon() que se utiliza en el código para enviar datos al servidor. Como resultado, los datos no se están almacenando en la base de datos MySQL para los dispositivos iOS.

    Una posible solución para resolver este problema puede ser utilizar un método alternativo para enviar datos desde dispositivos iOS, como una solicitud AJAX o la API fetch. Otra solución puede ser utilizar un polyfill para el método navigator.sendBeacon() en dispositivos iOS, lo cual habilitaría el soporte para este método en dichos dispositivos.

    Se recomienda probar el código a fondo en diferentes dispositivos iOS y versiones para garantizar la compatibilidad y funcionalidad de la función de seguimiento.

Comments are closed.