Javascript 在我的测试页面上,我在cookie中找到了一个与优化gui中的id匹配的实验id。但是,我之前在该页面上测试了ContextExperiments,因此如果不再次查看代码,我无法100%确定。gaData和我的属性ID存在,但它只包含键命中数;没有实验键,

Javascript 在我的测试页面上,我在cookie中找到了一个与优化gui中的id匹配的实验id。但是,我之前在该页面上测试了ContextExperiments,因此如果不再次查看代码,我无法100%确定。gaData和我的属性ID存在,但它只包含键命中数;没有实验键,,javascript,google-analytics-api,google-optimize,Javascript,Google Analytics Api,Google Optimize,在我的测试页面上,我在cookie中找到了一个与优化gui中的id匹配的实验id。但是,我之前在该页面上测试了ContextExperiments,因此如果不再次查看代码,我无法100%确定。gaData和我的属性ID存在,但它只包含键命中数;没有实验键,即使我的实验当前正在运行。其他人能看到吗?回复:更新答案。谷歌应该为开发者提供的解决方案非常好。作为提醒,我注意到它只在实验运行的页面上起作用。如果用户看到了实验,然后转到另一个页面,那么此代码将不会在随后的页面上返回实验id或变体。这一点很重


在我的测试页面上,我在cookie中找到了一个与优化gui中的id匹配的实验id。但是,我之前在该页面上测试了ContextExperiments,因此如果不再次查看代码,我无法100%确定。
gaData
和我的属性ID存在,但它只包含键
命中数
;没有
实验
键,即使我的实验当前正在运行。其他人能看到吗?回复:更新答案。谷歌应该为开发者提供的解决方案非常好。作为提醒,我注意到它只在实验运行的页面上起作用。如果用户看到了实验,然后转到另一个页面,那么此代码将不会在随后的页面上返回实验id或变体。这一点很重要,因为这意味着您可能希望获得实验和变体,并将cookie设置为用户在后续页面上看到该实验/变体的记录(例如表单提交)。我想这就是“旧答案”的由来。@ØyvindHolmstad我和Georg有同样的问题,我的
gaData
不包含
experiments
属性,而只包含
hitcount
属性。你知道如何解决这个问题吗?嗨,我已经用GTM实现了优化服务器端实验。我目前正在优化仪表板中查看数据,以便确认实验是否有效。然而,当尝试这个答案中提到的代码片段时,我一直没有定义。我想知道这个优化Javascript API是否遭到了反对,或者我遇到的问题是否是由于我的实现(只是使用gtm.js,而不是上面链接的Google支持文档中提到的gtag.js)。您是否有使用GTM优化回调的工作示例?这里也有相同的问题。
// We need to use `windows` here, because if we define a variable 
// with `var`, it will be limited to the scope of the Google Optimize
// function.
window["google_optimize_exp_id"] = "Experiment #1";
window["google_optimize_exp_var_id"] = "Variant A";
var propertyId = "UA-1234567-33";
var experimentId = Object.keys(gaData[propertyId].experiments)[0];
var variationId = gaData[propertyId].experiments[experimentId];
function getCookieValue(cookieName) {
    var result = document.cookie.match('(^|;)\\s*' + cookieName + '\\s*=\\s*([^;]+)');
    return result ? result.pop() : '';
}

function getExperimentId() {
    var cookie = getCookieValue('_gaexp');
    if (cookie == undefined) {
        return undefined;
    } else {
        var fields = cookie.split('.');
        return fields[2];
    }
}

function getVariationId() {
    var cookie = getCookieValue('_gaexp');
    if (cookie == undefined) {
        return undefined;
    } else {
        var fields = cookie.split('.');
        return fields[4];
    }
}

var experimentId = getExperimentId();
var variationId = getVariationId();
gaData["UA-XXXXXXXX-X"].experiments['ZYkOuNLKEoeLytt-dLWw3x']
gaData["UA-XXXXXXXX-X"].experiments
google_optimize.get('<experimentId>');
function gtag() {dataLayer.push(arguments)}

function implementExperimentA(value) {
  if (value ==  '0') {
    // Provide code for visitors in the original.
  } else if (value == '1') {
    // Provide code for visitors in first variant.
  }

gtag('event', 'optimize.callback', {
    name: '<experiment_id_A>',
    callback: implementExperimentA
 });
function implementManyExperiments(value, name) {
  if (name == '<experiment_id_A>') {
    // Provide implementation for experiment A
    if (value ==  '0') {
      // Provide code for visitors in the original.
    } else if (value == '1') {
      // Provide code for visitors in first variant.
    ...
  } else if (name == '<experiment_id_B>') {
    // Provide implementation for experiment B
    ...
}

gtag('event', 'optimize.callback', {
    callback: implementManyExperiments
 });
Object.keys(window.gaData["YOUR-GA-PROPERTY ID"].experiments).forEach(function(key, index){

var value = window.gaData["YOUR-GA-PROPERTY ID"].experiments[key];
console.log("Info", key, value, index);

 });
    //READ THE COOKIE
    function readCookie(name) {
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');

    for(var i=0;i < ca.length;i++) {
       var c = ca[i];
       while (c.charAt(0)==' ') c = c.substring(1,c.length);
       if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
   }
   return null;
   };

   // GET THE COOKIE
   let getCookie = readCookie("_gaexp");
   console.log('getCookie', getCookie);
   // WILL RETURN A STRING IN THIS FORMAT
   // GAX1.2.YOUREXPERIMENTID.18803.0
   // The long number in the middle is your experiment ID
   // The number at the end is your variant number (0)

   // SPLIT THE COOKIE
   let splitCookie = readCookie("_gaexp").split("!");
   // SPLIT THE COOKIE SO YOU CAN ACCESS THE EXPERIMENT ID AND VARIANT NUMBER
function returnDate() {
  var today = new Date();
  var dd = String(today.getDate()).padStart(2, '0');
  var mm = String(today.getMonth() + 1).padStart(2, '0'); //January is 0!
  var yyyy = today.getFullYear();
  
  today = mm + '/' + dd + '/' + yyyy;
  return today;
}

var dateToday = returnDate();

var ABTest = {

      id: 'YOUREXPERIMENTID',
      name: 'Title of your test',
      description:  'Test description',
      date: dateToday, //The launch date of AB Test.
      variant: 1,
      totalVariants: 5
  };

// AND THEN PUSH ALL THAT INFORMATION INTO THE DATALAYER 
dataLayer.Tests.push(ABTest);