跟踪代码管理器服务

授权用户可以通过 Google 跟踪代码管理器服务访问跟踪代码管理器 API 的数据。通过使用此服务,跟踪代码管理器用户可管理跟踪代码管理器的账号容器环境版本工作区文件夹变量触发器代码用户权限

参考

有关此服务的详情,请参阅跟踪代码管理器 API V2 的参考文档。

与 Apps 脚本中的所有高级服务一样,跟踪代码管理器服务使用的对象、方法和参数均与公共 API 相同。如需了解详情,请参阅方法签名的确定方式

如需报告问题并寻求其他支持,请参阅 Google 跟踪代码管理器帮助中心

示例代码

下面示例代码演示如何使用跟踪代码管理器服务的部分功能。

创建带有变量、触发器和代码的容器版本。

以下示例代码先使用跟踪代码管理器 API V2 创建了一个容器,并在命名时加入当前日期的时间戳,以提高名称的唯一性。然后,创建一个带有随机值变量的工作区,以及一个可针对任何网页浏览进行触发的触发器。接下来,示例代码使用该触发器任意创建了一个像素代码,使之针对任何以缓存无效化宏结尾的 //example.com 网址激发像素。最后,使用上述实体创建、记录和返回相关容器版本,供以后使用。

advanced/tagManager.gs
/**
 * Creates a container version for a particular account
 * with the input accountPath.
 * @param {string} accountPath The account path.
 * @return {string} The tag manager container version.
 */
function createContainerVersion(accountPath) {
  const date = new Date();
  // Creates a container in the account, using the current timestamp to make
  // sure the container is unique.
  try {
    const container = TagManager.Accounts.Containers.create(
      {
        name: `appscript tagmanager container ${date.getTime()}`,
        usageContext: ["WEB"],
      },
      accountPath,
    );
    const containerPath = container.path;
    // Creates a workspace in the container to track entity changes.
    const workspace = TagManager.Accounts.Containers.Workspaces.create(
      { name: "appscript workspace", description: "appscript workspace" },
      containerPath,
    );
    const workspacePath = workspace.path;
    // Creates a random value variable.
    const variable = TagManager.Accounts.Containers.Workspaces.Variables.create(
      { name: "apps script variable", type: "r" },
      workspacePath,
    );
    // Creates a trigger that fires on any page view.
    const trigger = TagManager.Accounts.Containers.Workspaces.Triggers.create(
      { name: "apps script trigger", type: "PAGEVIEW" },
      workspacePath,
    );
    // Creates a arbitary pixel that fires the tag on all page views.
    const tag = TagManager.Accounts.Containers.Workspaces.Tags.create(
      {
        name: "apps script tag",
        type: "img",
        liveOnly: false,
        parameter: [
          { type: "boolean", key: "useCacheBuster", value: "true" },
          {
            type: "template",
            key: "cacheBusterQueryParam",
            value: "gtmcb",
          },
          { type: "template", key: "url", value: "//example.com" },
        ],
        firingTriggerId: [trigger.triggerId],
      },
      workspacePath,
    );
    // Creates a container version with the variabe, trigger, and tag.
    const version = TagManager.Accounts.Containers.Workspaces.create_version(
      { name: "apps script version" },
      workspacePath,
    ).containerVersion;
    console.log(version);
    return version;
  } catch (e) {
    // TODO (Developer) - Handle exception
    console.log("Failed with error: %s", e.error);
  }
}

发布容器版本并快速预览当前容器草案。

通过使用跟踪代码管理器 API V2,以下示例代码接受了上述示例代码中创建的容器版本,并从该版本中检索账号、容器和版本 ID。然后,利用这些 ID 实时发布容器版本。最后,创建并记录新工作区的快速预览版本。

advanced/tagManager.gs
/**
 * Publishes a container version publically to the world and creates a quick
 * preview of the current container draft.
 * @param {object} version The container version.
 */
function publishVersionAndQuickPreviewDraft(version) {
  try {
    const pathParts = version.path.split("/");
    const containerPath = pathParts.slice(0, 4).join("/");
    // Publish the input container version.
    TagManager.Accounts.Containers.Versions.publish(version.path);
    const workspace = TagManager.Accounts.Containers.Workspaces.create(
      { name: "appscript workspace", description: "appscript workspace" },
      containerPath,
    );
    const workspaceId = workspace.path;
    // Quick previews the current container draft.
    const quickPreview =
      TagManager.Accounts.Containers.Workspaces.quick_preview(workspace.path);
    console.log(quickPreview);
  } catch (e) {
    // TODO (Developer) - Handle exceptions
    console.log("Failed with error: $s", e.error);
  }
}

创建并重新授权用户环境。

以下示例代码使用跟踪代码管理器 API V2 接受容器版本,并提取账号、容器和版本 ID。然后,利用这些 ID 创建指向相关输入容器版本的用户环境,并予以记录该用户环境。最后,记录已重新授权的用户环境。

advanced/tagManager.gs
/**
 * Creates and reauthorizes a user environment in a container that points
 * to a container version passed in as an argument.
 * @param {object} version The container version object.
 */
function createAndReauthorizeUserEnvironment(version) {
  try {
    // Creates a container version.
    const pathParts = version.path.split("/");
    const containerPath = pathParts.slice(0, 4).join("/");
    // Creates a user environment that points to a container version.
    const environment = TagManager.Accounts.Containers.Environments.create(
      {
        name: "test_environment",
        type: "user",
        containerVersionId: version.containerVersionId,
      },
      containerPath,
    );
    console.log(`Original user environment: ${environment}`);
    // Reauthorizes the user environment that points to a container version.
    TagManager.Accounts.Containers.Environments.reauthorize(
      {},
      environment.path,
    );
    console.log(`Reauthorized user environment: ${environment}`);
  } catch (e) {
    // TODO (Developer) - Handle exceptions
    console.log("Failed with error: $s", e.error);
  }
}

记录账号中的所有电子邮件和容器访问权限。

以下示例代码使用跟踪代码管理器 API V2 查找跟踪代码管理器账号中所有权限的列表。然后,记录用户的电子邮件地址、容器 ID 以及每个条目的容器访问权限类型。

advanced/tagManager.gs
/**
 * Logs all emails and container access permission within an account.
 * @param {string} accountPath The account path.
 */
function logAllAccountUserPermissionsWithContainerAccess(accountPath) {
  try {
    const userPermissions =
      TagManager.Accounts.User_permissions.list(accountPath).userPermission;
    for (let i = 0; i < userPermissions.length; i++) {
      const userPermission = userPermissions[i];
      if ("emailAddress" in userPermission) {
        const containerAccesses = userPermission.containerAccess;
        for (let j = 0; j < containerAccesses.length; j++) {
          const containerAccess = containerAccesses[j];
          console.log(
            `emailAddress:${userPermission.emailAddress} containerId:${containerAccess.containerId} containerAccess:${containerAccess.permission}`,
          );
        }
      }
    }
  } catch (e) {
    // TODO (Developer) - Handle exceptions
    console.log("Failed with error: $s", e.error);
  }
}