Código base

El código base habilita el arranque poniendo en cola comandos mientras Adobe Experience Platform Web SDK se carga asincrónicamente. Una vez que se ejecute el código base, puede llamar inmediatamente a cualquier comando como configure o sendEvent sin preocuparse por las condiciones de carrera o el momento en que la biblioteca termina de cargarse. Cuando Web SDK termina de cargarse, los comandos en cola se ejecutan en el orden de entrada y de salida (el mismo orden en que se pusieron en cola).

Los comandos devuelven Promesas, incluso cuando están en cola. Si un comando está en cola, la promesa se resuelve o rechaza después de que el comando se ejecute cuando Web SDK termine de cargarse. Si Web SDK nunca termina de cargarse (por ejemplo, la biblioteca no se puede cargar), las promesas en cola permanecen pendientes.

Añadir el código base

Coloque el código base lo más alto posible en la etiqueta <head>, antes de los scripts que puedan llamar a Web SDK.

<script>
  !function(n,o){o.forEach(function(o){n[o]||((n.__alloyNS=n.__alloyNS||
  []).push(o),n[o]=function(){var u=arguments;return new Promise(
  function(i,l){n.setTimeout(function(){n[o].q.push([i,l,u])})})},n[o].q=[])})}
  (window,["alloy"]);
</script>

Después de agregar el código base, cargue Web SDK con el método elegido (cargador de biblioteca JavaScript o código incrustado de etiquetas). Para implementaciones basadas en etiquetas, el código base es compatible con la extensión de etiquetas Web SDK 2.34.0 y posteriores.

Cuando se requiere el código base

  • Biblioteca JavaScript: Requerida. La biblioteca JavaScript se basa en la instancia y la cola de comandos que crea el código base, por lo que este debe ejecutarse antes de que se cargue la biblioteca. Este requisito se aplica tanto si la etiqueta <script> es asíncrona como si no, ya que se trata del orden de carga en lugar del atributo async.
  • Paquete NPM concreateInstance(): No se requiere. Al importar la biblioteca y llamar directamente a createInstance(), se devuelve una función de instancia al código sin dependencia del código base.
  • Extensión de etiqueta Web SDK: Compatible, pero no suele ser necesario. La extensión de etiqueta utiliza un código base ya presente si encuentra uno. Solo es necesario agregar el código base si la implementación hace referencia a Web SDK fuera de la biblioteca de etiquetas. La mayoría de las implementaciones de etiquetas llaman a Web SDK solo dentro de las reglas o acciones de etiquetas, por lo que la mayoría no requiere el código base.

Ejemplos

Vea los comentarios incluidos en este ejemplo de código para comprender el tiempo que transcurre entre la cola y la resolución de los comandos. Este ejemplo se aplica tanto a la biblioteca de JavaScript como a la extensión de etiquetas:

<head>
  <script>
    // Calls made before the base code runs are not captured (alloy is not yet defined).
    // Always make sure that the base code runs before any attempt to call commands.
    // alloy("getLibraryInfo").then(console.log).catch(console.error);
  </script>

  <!-- Base code -->
  <script>
    !function(n,o){o.forEach(function(o){n[o]||((n.__alloyNS=n.__alloyNS||
    []).push(o),n[o]=function(){var u=arguments;return new Promise(
    function(i,l){n.setTimeout(function(){n[o].q.push([i,l,u])})})},n[o].q=[])})}
    (window,["alloy"]);
  </script>

  <!-- Queued command -->
  <script>
    alloy("getLibraryInfo").then(result => {
      console.log("Queued call resolved:", result);
    }).catch(console.error);
  </script>

  <!-- Load the Web SDK using the JavaScript loader -->
  <script src="https://cdn1.adoberesources.net/alloy/<VERSION>/alloy.min.js" async></script>
  <!-- or the tag extension -->
  <!-- <script src=".../launch-<ENV>.min.js" async></script> -->

  <!-- Another call (queued if the library is still loading; immediate if it is ready) -->
  <script>
    alloy("getLibraryInfo").then(result => {
      console.log("Immediate call resolved:", result);
    }).catch(console.error);
  </script>
</head>

Cambiar nombre de instancia de SDK

Puede cambiar el nombre de la función global a la que llama modificando la última línea del código base. Cambiar:

(window,["alloy"]);

Hasta:

(window,["ingot"]);

Este cambio le permite llamar a comandos usando ingot en lugar de alloy:

ingot("configure", {
  datastreamId: "ebebf826-a01f-4458-8cec-ef61de241c93",
  orgId: "ADB3LETTERSANDNUMBERS@AdobeOrg"
});

Varias instancias de SDK

Opcionalmente, puede utilizar el código base para configurar más de una instancia de SDK en una página. Consulte Usar varias instancias de Web SDK para obtener más información.

recommendation-more-help
experience-platform-help-collection