支持横幅的奇异网站 SDK(GTM)

文档

通过 Singular 网站 SDK,您可以将网站活动归因于营销接触点,并跟踪网站内的用户事件。它也是 Singular 跨设备归因解决方案的关键组件,使分析用户旅程、计算跨平台 LTV 和 ROAS 成为可能。

要了解更多信息,请参阅我们的跨设备归因常见问题网络归因常见问题

浏览器兼容性:

Chrome: 15+ 边缘浏览器:15+ Internet Explorer10+
Safari5.1+ 火狐浏览器6+ Opera: 15+

本指南介绍如何使用 Google 标签管理器实施方法,在网站 SDK 中添加支持 Singular Web-to-App 横幅广告的横幅广告。

如果您没有使用谷歌标签管理器,可以按照我们的《如何启用奇异横幅广告(开发人员指南)》直接在本地实施中添加横幅广告。

如果您不使用 Singular 横幅广告,可以按照此处的标准指南进行操作:

Singular 网站 SDK 是一项企业功能。如果您有兴趣使用该功能,请联系您的客户成功经理。

重要事项

Singular 横幅功能需要特殊配置,与集成谷歌标签管理器(GTM)模板不兼容。由于这一限制,所有标签类型的 Singular GTM 模板都不能与此实施一起使用。

如果您已经使用 GTM Singular 模板实施了 Singular WebSDK,则需要过渡到自定义 HTML 模板。这种过渡可确保与 Singular 平台兼容,并为集成提供更大的灵活性和控制力。

前提条件

在集成 Singular 网站 SDK 之前,请确保满足以下前提条件:

  • 已在网站上配置Google Tag Manager
  • 您已根据需要为要发送到 Singular 的事件(转换事件和任何自定义事件)设置了Google Tag Manager 触发器
  • 您已根据需要为要发送到 Singular 的事件设置了Google Tag Manager 变量。例如,如果要发送交易事件并包含交易收入,就需要为交易金额和货币设置变量。

标签 1 - 添加 SDK 库

在初始化 Singular SDK 或触发任何 Singular 函数之前,必须在网站上加载或注入 Singular JavaScript 库。为确保这一点,将使用 Google 标签管理器(GTM)中的自定义 HTML 标签选项注入该库。

为保持正常功能,网站的所有页面都必须包含该库。我们将使用 GTM 中的 "窗口已加载 "触发器来控制库注入的时间,确保库在页面内容完全加载后加载。

  • 创建一个自定义 HTML 标签来加载 SDK 库,并添加获取客户端提示数据的权限。
  • 将标记命名为 "Singular - SDK Loader
  • 在 HTML 窗口中插入以下代码
    <script>
    (function() {
      // Check if singularSdk is already loaded
    
    
      if (window.singularSdk) {
        return; // SDK already loaded, no need to load again
    
    
      }
    
      // Inject the meta tag for client hints delegation
    
    
      var metaTag = document.createElement('meta');
      metaTag.setAttribute('http-equiv', 'delegate-ch');
      metaTag.setAttribute('content', 'sec-ch-ua-model https://sdk-api-v1.singular.net; sec-ch-ua-platform-version https://sdk-api-v1.singular.net; sec-ch-ua-full-version-list https://sdk-api-v1.singular.net');
      document.head.appendChild(metaTag);
      
      // Create and load the Singular SDK script
    
    
      var script = document.createElement('script');
      script.src = 'https://web-sdk-cdn.singular.net/singular-sdk/latest/singular-sdk.js';
      script.async = true;
    
      // Once the script is loaded, push to dataLayer
    
    
      script.addEventListener('load', function() {
        window.dataLayer = window.dataLayer || [];  // Ensure dataLayer is initialized
    
    
        window.dataLayer.push({
          event: 'singularSDKLibraryLoaded'
        });
      });
    
      // Append the script tag to the head of the document
    
    
      document.head.appendChild(script);
    })();
    </script>
    
  • 在 "高级设置 "下,将标签启动优先级设为99
  • 在 "触发 "部分,为"窗口已加载"添加触发器
  • 保存标签

标签 2 - SDK 初始化标签

Singular SDK 初始化代码必须在每次加载页面时执行,但只能在 Singular - SDK Loader 标签触发后执行。为确保这一点,我们将使用 Singular - SDK Loader 标签创建的数据层事件作为触发器。

初始化 Singular SDK 是所有 Singular 归属功能的先决条件。它有两个关键目的:

  • 当用户使用新的广告数据进入网站或会话超时时,创建新的用户会话。
  • 向 Singular 发送 "页面访问 "事件。

这些 "页面访问 "事件和用户会话对于计算用户保留率和实现再参与归因至关重要。

配置 GTM 用户定义变量

配置 GTM 用户定义变量

要初始化 Singular SDK 并使其能够向 Singular 发送数据,必须向 SingularConfig 对象提供 SDK Key、SDK Secret 和 Product ID。下面的代码片段旨在从 GTM 用户定义变量中获取这些值。在执行代码之前,请确保在 Google Tag Manager 中创建了这些变量并分配了正确的值。

检索 SDK 密钥和 SDK 秘密

  1. 登录 Singular 帐户。
  2. 导航至开发人员工具 > SDK 集成 > SDK 密钥。
  3. 复制 SDK 密钥和 SDK Secret,以便在配置中使用。

定义产品 ID

  • 产品 ID 在 Singular 中代表您的网站。我们建议使用主网域的反向 DNS 符号,如 com.example。
  • 该值将在整个 Singular 平台上标识您的网站,并且必须与 Singular 中 "应用程序 "页面上定义的 "应用程序捆绑包 ID "相匹配。

对于有多个子域名的网站

如果您的网站跨越多个子域名(例如,www.example.com 和 shop.example.com),这些子域名在 Singular 平台中将被视为单个应用程序。在这种情况下,请对所有子域名使用统一的产品 ID,如 com.example。

添加 GTM 用户定义变量

在 Google Tag Manager 中,您应该创建用户定义变量来存储这些值,然后在需要时在代码片段中引用它们:

创建变量

  1. 单击变量
  2. 单击用户定义变量部分中的"新建
  3. 为变量命名,然后单击变量配置框。注意:变量名称是代码片段中引用该值的方式。
  4. 选择实用工具下的"常量"选项。
  5. 在值表单字段中,为变量添加相应的值。
    udvariable.png

按照上述过程,创建 3 个用户定义变量:"奇异 SDK密钥"、"奇异秘钥"和"奇异产品 ID"。
udvars.png

创建初始化标签

创建初始化标签

  • 创建一个自定义 HTML 标签来处理 SDK 初始化
  • 将标签命名为"Singular - SDK Initialization
  • 在 HTML 窗口中插入以下代码
    <script>
    (function() {
      // Check if singularSdk is available before proceeding
    
    
      if (window.singularSdk) {
        var sdkKey = {{Singular SDK Key}};
        var secretKey = {{Singular Secret Key}};
        var productId = {{Singular Product ID}};
        
        // Create Singular Banners config object & enable web-to-app support
    
    
        var bannersOptions = new BannersOptions().withWebToAppSupport();
        
        // Create SDK config object with Singular Banners support
    
    
        var config = new SingularConfig(sdkKey, secretKey, productId)
          .withBannersSupport(bannersOptions);
          //Add additional option here
    
        try {
          // Initialize the SDK
    
    
          singularSdk.init(config);
          
          // Display the banner
    
    
          singularSdk.showBanner();
          
          // Push event to dataLayer after initialization
    
    
          window.dataLayer = window.dataLayer || [];
          window.dataLayer.push({
            event: 'singularSDKInitialized'
          });
          
        } catch (error) {
          console.error('Error initializing Singular SDK:', error);
        }
      } else {
        console.warn('Singular SDK not loaded or available.');
      }
    })();
    </script>
    

    上述代码是在初始化时激活 Singular 横幅的基本示例。根据需要更新Singular 配置选项

  • 在高级设置下,将标签触发优先级设为98
  • 在 "触发 "部分,为自定义事件添加一个触发器。
  • 将触发器命名为"singularSDKLoaded
  • 指定触发器事件名称:"singularSDKLibraryLoaded
  • 保存标签

在 GTM 预览中测试时,标签顺序应如下:

  1. 在窗口加载事件中:Singular - SDK Loader 标签被触发。
    gtm-loaded.png
  2. singularSDKLibraryLoaded事件被推送到数据层。
  3. Singular -SDK 初始化标签被触发
    gtm-init.png
  4. singularSDKInitialized事件被推送到数据层。
奇异配置选项

SingularConfig 选项

你可能想要添加设置,以启用 Singular 提供的各种功能。要添加设置,需要使用SingularConfig对象的".with"方法。例如

// Configure the SDK to pass the user ID to Singular


const config = new SingularConfig(sdkKey, sdkSecret, productId)
    .withCustomUserId(userId);

SingularConfig 方法参考

以下是所有可用的".with "方法。

方法 方法描述 了解更多
.withCustomUserId(customId) 向 Singular 发送用户 ID 设置用户 ID
.withProductName(productName) 产品的可选显示名称
.withLogLevel(logLevel) 配置日志级别:0 - 无(默认);1 - 警告;2 - 信息;3 - 调试。
.withSessionTimeoutInMinutes (超时) 以分钟为单位设置会话超时(默认:30 分钟)

.withAutoPersistentSingularDeviceId(域) 启用自动跨子域跟踪 使用 Cookie 自动持续

.withPersistentSingularDeviceId(singularDeviceId)

启用手动跨子域跟踪 手动设置奇异设备 ID
.withInitFinishedCallback(callback) 在 SDK 初始化完成时调用回调函数 初始化完成时调用回调函数
支持单页应用程序 (SPA)

支持单页面应用程序(SPA)

对于单页面应用程序 (SPA)(页面内容会动态更改,无需重新加载整个页面),Google Tag Manager (GTM) 中的历史更改触发器是检测路由更改的绝佳选择。配置第 3 个自定义 HTML 标签可确保仅在路由更改时调用相应的 Singular SDK 方法,如 pageVisit()、hideBanner() 和 showBanner(),而不是在初始页面加载时。

GTM 配置:

创建历史更改触发器

  • 在 GTM 中,创建一个新触发器
  • 选择触发器类型:历史更改

为历史更改创建自定义 HTML 标签

  • 将标签命名为 "Singular - SPA 路由更改
  • 在 HTML 窗口中插入以下代码
    <script>
    (function () {
      try {
        // Ensure Singular SDK is loaded
    
    
        if (window.singularSdk) {
          // Check if this is the first page load
    
    
          if (!window.singularFirstLoad) {
            // Mark the first page as processed
    
    
            window.singularFirstLoad = true;
            console.log('First page load detected. Singular pageVisit skipped.');
          } else {
            // Call Singular's pageVisit for subsequent route changes
    
    
            singularSdk.pageVisit();
            console.log('Singular pageVisit triggered for SPA route change.');
          }
    
          // Hide the current banner
    
    
          singularSdk.hideBanner();
    
          // Delay to ensure route change completion
    
    
          var delay = 200; // Delay in milliseconds
    
    
          setTimeout(function () {
            // Show the new banner for the current route
    
    
            singularSdk.showBanner();
            console.log('Singular banner updated for new route.');
          }, delay);
        } else {
          console.warn('Singular SDK is not defined. Ensure the SDK is loaded before using this script.');
        }
      } catch (error) {
        console.error('Error during Singular SPA navigation:', error);
      }
    })();
    </script>
    
  • 将历史更改触发器分配给标签。
  • 保存并测试

将用户 ID 发送至 Singular(可选)

您可以使用 Singular SDK 方法向 Singular 发送内部用户 ID。

注:如果使用Singular 的跨设备解决方案,则必须在所有平台上收集用户 ID。

  • 用户 ID 可以是任何标识符,但不应暴露 PII(个人身份信息)。例如,不应使用用户的电子邮件地址、用户名或电话号码。Singular 建议使用仅对第一方数据唯一的哈希值。
  • 传递给Singular的用户ID值也应该是你在所有平台(Web/移动/PC/控制台/离线)上获取的相同的内部用户ID。
  • Singular 将在用户级导出、ETL 和内部 BI 回传(如果配置)中包含用户 ID。用户 ID 是第一方数据,Singular 不会与其他方共享。
  • 使用 Singular SDK 方法设置的用户 ID 值将一直存在,直到使用logout() 方法取消设置或删除浏览器本地存储。关闭或刷新网站不会取消设置用户 ID。
  • 在私人/隐身模式下,SDK 无法持续设置用户 ID,因为浏览器会在关闭时自动删除本地存储。

要设置用户 ID,请使用login() 方法。要取消设置(例如,如果用户 "注销 "账户),请调用logout() 方法。

注意:如果多个用户使用一台设备,我们建议实施注销流程,为每次登录和注销设置取消设置用户 ID。

如果在网站上初始化 Singular SDK 时已经知道用户 ID,则在配置对象中设置用户 ID。这样,Singular 就能从第一次会话中获得用户 ID。不过,在用户注册或登录之前,用户 ID 通常是不可用的。在这种情况下,请在注册流程完成后调用login() 。建议在用户执行身份验证流程时推送一个数据层事件,该事件可与 GTM 自定义事件触发器一起使用,以触发 Singular 登录功能。

  • 创建自定义 HTML 标签来处理身份验证
  • 将标签命名为 "Singular - 身份验证标签
  • 在 HTML 窗口中插入以下代码
    <script>
    (function() {
      // Ensure sessionStorage is available
    
    
      if (typeof sessionStorage === 'undefined') {
        console.warn('sessionStorage is not supported in this environment.');
        return;
      }
    
      // Check if the event has already been triggered in this session
    
    
      if (sessionStorage.getItem('sng_login_triggered')) {
        console.log('Singular SDK event already triggered this session.');
        return; // Exit if the event was triggered before in this session
    
    
      }
    
      // Check if singularSdk is available and initialized
    
    
      if (window.singularSdk && typeof singularSdk.login === 'function' && typeof singularSdk.event === 'function') {
        
        // Dynamically fetch UserID if available (replace with actual method if applicable)
    
    
        var userID = window.userID || "User123456789"; // Example fallback value for userID
    
    
    
        try {
          // After Authentication, Pass the UserID as the Singular Custom User ID Value
    
    
          singularSdk.login(userID);
    
          // Send the Registration_Completed event (or similar event)
    
    
          singularSdk.event("sng_login");
    
          // Set a flag in sessionStorage to indicate that the event was triggered
    
    
          sessionStorage.setItem('sng_login_triggered', 'true');
    
          console.log('Singular SDK event triggered successfully.');
        } catch (error) {
          console.error('Error triggering Singular SDK event:', error);
        }
      } else {
        console.warn('Singular SDK is not loaded or required methods are unavailable.');
      }
    })();
    </script>
    
  • 在 "触发 "部分,为自定义事件添加一个触发器。
  • 将触发器命名为"奇异身份验证
  • 指定触发器事件名称,与用户在网站上进行身份验证后可用的数据层事件名称相对应。
  • 保存标签

上面的代码片段演示了如何使用 GTM 自定义 HTML 标签实现 Singular Native JavaScript WebSDK,以支持横幅广告。如需进一步定制,如发送事件和跟踪收入,请参阅本地 SDK 文档了解详细的函数定义。然后,您可以根据需要构建其他自定义 HTML 标签,以扩展您的实施。