- 一次只运行一个实验,并由Google分配变量,您可以使用
chooseVariation()
获得该变量;或者 - 同时运行几个实验并自行分配变量,使用
setChosenVariation()
。
chooseVariation()
获得该变量;或者setChosenVariation()
。我认为你没有漏掉任何内容。我的理解是,GA实验API允许您使用“选择变体”命令将访问者分配给单个A/B/N测试的任何版本:(参见此处)。
cxApi.chooseVariation();
<!-- 1. Load the Content Experiments JavaScript Client -->
<script src="//www.google-analytics.com/cx/api.js"></script>
<!-- 2. See if the visitor has seen an experiment already -->
<script>
// loop through all active experiments server-side.
cxApi.getChosenVariation(
$experimentId
);
<!-- 3. Bucket the visitor if he isn't bucketed already -->
// loop through your live experiments
cxApi.setChosenVariation(
$chosenVariation, // The index of the variation shown to the visitor
$experimentId // The id of the experiment the user has been exposed to
);
</script>
您需要决定是否让访问者一次只查看一个实验或同时输入多个实验。
第一种选择可能更可靠,但意味着您将不得不将访问者分成很多小组,这意味着您的测试将花费很长时间才能返回结果。
如果选择第二个选项,则需要小心:如果您的实验不是独立的,则无法信任Google Analytics中的测试结果,因为Content Experiments中使用的统计测试假定独立性。即使您的实验是独立的,您仍需要在所有变化组合中均匀分配。
希望这可以帮助到您!
setChosenVariation()
中设置$chosenVariation
呢? - Jake Wilson这个解决方案对我非常有效,其优点如下:
Javascript模块提供执行多个Google实验的所有功能:
var runExperiment = (function(jQ) {
var apiUrl = '/ga-experiments-api.php?preview=true&experimentId=',
experimentId,
variations;
var chooseAndApplyNewVariation = function() {
if (typeof jQ !== 'undefined') {
jQ.ajax({
type: 'get',
url: apiUrl + experimentId,
success: function(data, status){
var choosenVariation = data.choosenVariation;
if (typeof choosenVariation !== 'undefined' && choosenVariation >= 0) {
cxApi.setChosenVariation(choosenVariation, experimentId);
applyVariation(choosenVariation);
}
}
});
}
};
var applyVariation = function(chosenVariation) {
var variationFunction = (typeof variations[chosenVariation] === 'function') ? variations[chosenVariation] : false;
if (variationFunction) {
variationFunction.apply();
sentGaEvent();
console.log(experimentId, chosenVariation);
}
};
var sentGaEvent = function() {
if (typeof ga !== 'undefined') {
ga('send', 'event', 'experiment', 'view');
}
};
return function(experiment) {
experimentId = experiment.id;
variations = experiment.variations;
if (typeof cxApi !== 'undefined') {
var chosenVariation = cxApi.getChosenVariation(experimentId);
if (chosenVariation >= 0) {
applyVariation(chosenVariation);
} else {
chooseAndApplyNewVariation();
}
}
};
})(jQuery);
运行单个实验的JavaScript片段 - 可以在页面上多次集成:
(function(jQ) {
var experiment = {
'id': 'RHwa-te2T_WnsuZ_L_VQBw',
'variations': [
function() {},
function() {
jQ('#nav #menu-item-2000927 a').text('Shop + Abo');
}]
};
runExperiment(experiment);
}(jQuery));
通过Google API生成新变体的PHP (API),我使用了这个类:
https://github.com/thomasbachem/php-gacx
<?php
use UnitedPrototype\GoogleAnalytics;
require_once dirname(__FILE__) . '/libs/googleAnalytics/Experiment.php';
$experimentId = (!empty($_GET['experimentId'])) ? $_GET['experimentId'] : null;
$returnData = array(
'experimentId' => $experimentId,
);
try {
$experiment = new GoogleAnalytics\Experiment($experimentId);
$variation = $experiment->chooseNewVariation();
if (is_integer($variation)) {
$returnData['success'] = true;
$returnData['choosenVariation'] = $variation;
}
} catch (Exception $exception) {
$returnData['success'] = false;
$returnData['error'] = $exception;
}
header('Content-Type: application/json');
echo json_encode($returnData);
我使用了一个node.js脚本来解决这个问题。
Google Content Experiments默认情况下让你选择:
因此,我对google cxApi js进行了一些反向工程,发现它只是将实验信息(变化权重)捆绑在文件中间。 我手动操作该包添加了多个实验,现在我可以为每个实验调用cxApi.chooseVariation(experimentId)
,效果很好!
权重每12小时更改一次,所以我将其自动化了。我创建了一个node.js小应用程序,用于下载来自Google的cxApi,然后针对您指定的每个实验重复下载并修补具有所有实验的cxApi。
万事大吉!任何页面上都可以进行多个实验。
这是repo: https://github.com/benjamine/mutagen,欢迎fork
这个node.js应用程序将为多个实验修补cxApi,并且还会打包(和缩小)您的变化