[UWP] 对应用进行A/B测试
【对A/B测试的看法】
开发者在Dev Center中设置几种应用变体,这几种变体有几个变量的值不一样,比如有变体A和变体B(当然还可以加上变体C,Dev Center最多支持5个变体),A和B的不同在于Button的颜色btnColor,A是Amber,B是Blue
这些值设置好之后,Dev Center通过设置的变体比例随机返回变体的变量值 ,比如变体A:变体B = 1:3,那么返回的btnColor值中Amber : Blue = 1:3
开发者根据这些值对应用做一些改变,不同的返回值对应不同的应用表现(比如界面的颜色,某个Button是否显示等等),开发者直接在应用内用随机数也可以粗浅的实现类似的效果,但Dev Center的A/B测试比应用内随机数强大太多了,比如可以方便的使用户在不同的变体间转化,还有日志功能
至于A/B测试的用途,让一小部分用户先用新功能,根据反馈数据决定是否全面上新版的用法我很喜欢,其他的自己搜吧
微软官方的例子是两种变体,差别在于Button的Content和背景色,用的事件有用户看到Button和点击Button,从这里就能看出一点A/B测试的用途了,用于判断哪种UI设计更优,然而本文的A/B测试并没有实际用途,只是我想试用一下这个新功能,做完后的效果应该是一半人看的到翻译按钮,一般人看不到翻译按钮
【进行A/B测试前置条件】
1.要测试的应用是UWP应用
2.设置好自己的开发机
- 搭建好一个UWP的开发环境,然后解锁设备,注册开发者账号,GetSetup
- 下载Microsoft Store Engagement and Monetization SDK,这个SDK取代了以前的Microsoft Universal Ad Client SDK,有A/B测试,应用反馈,显示广告的api
【Dev Center中创建一个实验】
首先进入Dev Center的仪表板,网页左边会列出你所有的应用,选择要进行A/B测试的应用,选中服务下的实验模块,先新建一个API密钥, 点击 新API密钥给这个密钥取个名字 ,然后点击API密钥上方的新实验

输入实验名称
下面的测试实验CheckBox 选中后 实验激活了之后还可以继续编辑,可以通过勾选这个来测试客户端是否真的获取到了变量的值 ,方法为将某一个变体的 分配 调整到100%然后观察程序的表现
但微软说这个应该只在内部测试的时候勾上
Note Check this box only if you are creating a test experiment to validate parameters through internal testing. Do not check this box if you are creating an experiment that you will release to customers.

查看事件名称是用来向Dev Center写日志的,在这里的事件是 “用户看到翻译按钮”
- 目标名称
对测试目标的描述,比如我这里的Add Translate Button,这个之后会显示在【结果摘要】里
- 转换事件名称
A conversion event is an arbitrary string that represents an objective for this goal. Your app code will send this conversion event string to Dev Center when the user reaches an objective
这里我的理解是,转换事件名称就代表一个目标,在程序中使用这个转换事件名称写Log时就代表这个目标完成了
- 目标
最大化或最小化转换事件的发生,这个不太清楚是什么意思,原文提到每个用户24h只记录一次事件,那这个最大化或最小化有什么区别呢?
Note Dev Center reports only the first conversion event for each user view in a 24-hour time period. If a user triggers multiple conversion events in your app within a 24-hour period, only the first conversion event is reported. This is intended to help prevent a single user from skewing the experiment results for a sample group of users when the goal is to maximize the number of users who perform a conversion.

然后是变体和设置
这里设置了两个变体 一个是Translate,代表显示翻译按钮,另一个NoTranslate代表不显示翻译按钮。
下方的三个输入框 分别填 设置名(可以理解成变量名) 变体1该设置的值 变体2该设置的值
值可以填String、Integer、Double、Boolean类型的,在写代码的时候有对应的方法直接获取

填完之后点保存,然后再点激活,Dev Center里的设置就完成了,下面开始敲代码
【应用内编写代码】
- 首先添加Microsoft Store Engagement SDK的引用
- 在项目的引用上右键单击 选择添加引用

然后就可以敲代码了,这个很明显要在各个页面中使用,所以写成一个Helper类
LogTranslateViewed在页面加载的时候调用,LogTranslateClick在翻译按钮点击时调用
public static class ExperimentHelper
{ #region const strings
private const string API_KEY = "Your Key Here"; public const string TranslateButtonVisibility = "TranslateButtonVisibility"; private const string UseTranslateButton = "useTranslateButton"; private const string ViewEventName = "userViewedTranslateButton";
#endregion private static ExperimentClient experimentClient; private static ExperimentVariation variation; private static ExperimentVariationResult result; static ExperimentHelper()
{
experimentClient = new ExperimentClient(API_KEY);
} /// <summary>
/// 获取变量
/// </summary>
private static async void GetExperimentVariation()
{
result = await experimentClient.GetVariationAsync();
variation = result.Variation;
} /// <summary>
/// 检查变量是否需要更新
/// </summary>
private static void CheckVariationUpdate()
{
if (result.ErrorCode != EngagementErrorCode.Success || result.Variation.NeedsRefresh)
{
UpdateExperimentVariation();
}
} /// <summary>
/// 更新变量
/// </summary>
private static async void UpdateExperimentVariation()
{
result = await experimentClient.RefreshVariationAsync();
if (result.ErrorCode == EngagementErrorCode.Success)
{
variation = result.Variation;
}
} /// <summary>
/// 获取int类型变量
/// </summary>
/// <param name="name">变量设置名称</param>
/// <param name="defaultValue">默认值</param>
/// <returns></returns>
public static int GetInt(string name, int defaultValue)
{
CheckVariationUpdate();
return variation.GetInteger(name, defaultValue);
} public static bool GetBool(string name,bool defaultValue)
{
CheckVariationUpdate();
return variation.GetBoolean(name, defaultValue);
} public static double GetDouble(string name,double defaultValue)
{
CheckVariationUpdate();
return variation.GetDouble(name, defaultValue);
} public static string GetString(string name,string defaultValue)
{
CheckVariationUpdate();
return variation.GetString(name, defaultValue);
} /// <summary>
/// 向Dev Center写日志
/// </summary>
public static void LogEventToDevCenter(string eventName,ExperimentVariation variation)
{
StoreServicesCustomEvents.Log(eventName, variation);
} /// <summary>
/// 翻译按钮点击
/// </summary>
public static void LogTranslateClick()
{
LogEventToDevCenter(UseTranslateButton, variation);
} /// <summary>
/// 用户看到翻译按钮
/// </summary>
public static void LogTranslateViewd()
{
LogEventToDevCenter(ViewEventName, variation);
}
}
ExperimentHelper.cs
我的应用使用了MVVM,所以在vm里加一个属性IsTranslateVisible
/// <summary>
/// 翻译按钮显示
/// </summary>
public bool IsTranslateVisible
{
get
{
return ExperimentHelper.GetBool(ExperimentHelper.TranslateButtonVisibility,false);
}
}
翻译按钮是否显示
然后把这个属性绑定到UI上就完成了(当然要使用一个Converter,太简单就不说了)
【运行应用收集数据】
把应用Run起来,看看我的翻译按钮是不是显示的,有种抽奖的感觉,我的pc端和模拟器分到了不同的变体,一个有翻译按钮,一个没有
获取更新的变量需要一点时间
Note that it may take up to two minutes for your app to receive an updated variation assignment.

做完上面的步骤之后,就可以开始等了,Dev Center的数据更新一直都不及时,官方的文档也说明了,坐和放宽,等几个小时吧,然后就能看到实验结果了
Note As soon as you activate an experiment, Dev Center immediately starts collecting data from any apps that are instrumented to log data for your experiment. However, it can take several hours for experiment data to appear in the dashboard.
【参考链接】
Create and run your first experiment with A/B testing
Monetize your app and engage customers with the Microsoft Store Engagement and Monetization SDK
Run app experiments with A/B testing
Define your experiment in the Dev Center dashboard
Code your app for experimentation
[UWP] 对应用进行A/B测试的更多相关文章
- 2019-11-25-加强版在国内分发-UWP-应用正确方式-通过win32安装UWP应用
原文:2019-11-25-加强版在国内分发-UWP-应用正确方式-通过win32安装UWP应用 title author date CreateTime categories 加强版在国内分发 UW ...
- C#单元测试面面观
标题有点标题党,但相信各位看完这篇文章一定会所收获,如果之前没有接触过单元测试或了解不深通过本文都能对单元测试有个全新认识.本文的特点是不脱离实际,所测试的代码都是常见的模式. 写完这篇文章后,我看了 ...
- xamarin.forms uwp app部署到手机移动设备进行测试,真机调试(device portal方式部署)
最近学习xamarin.刚好 手上有一个lumia 930.所以试一试把uwp app部署到手机上,并真机调试一把. 目前环境: 1.开发pc电脑是win10,版本1607.加入了insider,所以 ...
- UWP简单测试
随便写下,试试.Net Core与UWP开发,后台WCF XAML <Page x:Class="App3.MainPage" xmlns="http://sche ...
- UWP中实现自定义标题栏
UWP中实现自定义标题栏 0x00 起因 在UWP开发中,有时候我们希望实现自定义标题栏,例如在标题栏中加入搜索框.按钮之类的控件.搜了下资料居然在一个日文网站找到了一篇介绍这个主题的文章: http ...
- MVVM框架从WPF移植到UWP遇到的问题和解决方法
MVVM框架从WPF移植到UWP遇到的问题和解决方法 0x00 起因 这几天开始学习UWP了,之前有WPF经验,所以总体感觉还可以,看了一些基础概念和主题,写了几个测试程序,突然想起来了前一段时间在W ...
- UWP学习目录整理
UWP学习目录整理 0x00 可以忽略的废话 10月6号靠着半听半猜和文字直播的补充看完了微软的秋季新品发布会,信仰充值成功,对UWP的开发十分感兴趣,打算后面找时间学习一下.谁想到学习的欲望越来越强 ...
- UWP开发之Mvvmlight实践七:如何查找设备(Mobile模拟器、实体手机、PC)中应用的Log等文件
在开发中或者后期测试乃至最后交付使用的时候,如果应用出问题了我们一般的做法就是查看Log文件.上章也提到了查看Log文件,这章重点讲解下如何查看Log文件?如何找到我们需要的Packages安装包目录 ...
- UWP开发之Mvvmlight实践六:MissingMetadataException解决办法(.Net Native下Default.rd.xml配置问题)
最近完成一款UWP应用,在手机端测试发布版(Release)的时候应用莫名奇妙的强行关闭,而同样的应用包在PC端一点问题都没有,而且Debug版在两个平台都没有问题,唯独手机的Release版有问题. ...
随机推荐
- GJM : AlloyTouch实战--60行代码搞定QQ看点资料卡
原文链接:https://github.com/AlloyTeam/AlloyTouch/wiki/kandian 先验货 访问DEMO你也可以点击这里 源代码可以点击这里 如你体验所见,流程的滚动的 ...
- 移动Web利器transformjs入门
简介 在过去的两年,越来越多的同事.朋友和其他不认识的童鞋进行移动web开发的时候,都使用了transformjs,所有必要介绍一下,让更多的人受益,提高编程效率,并享受编程乐趣.(当然transfo ...
- Android任务栈的运行规律
一:前台栈表示应用A,后台栈则是应用B 前台栈/taskAffinity/launchMode 后台栈/taskAffinity/launchMode ActivityB/com.lpn.teston ...
- web移动端开发技巧与注意事项汇总
一.meta的使用 1.<meta name="viewport" content="width=device-width,initial-scale=1.0, m ...
- 解决ie6下li左浮动文字换行的问题
问题: 使用li左浮动来自动换行,当父标签剩下宽度不够一个li的宽度时,在ie6中最后一个li中的文字出现换行 解决办法: ul{ white-space:nowrap;} /*强制文字不换行*/
- 以前写的一段aop,远程接口调用的日志。
using System;using System.Collections.Generic;using System.Linq;using System.Text; using Microsoft.P ...
- [AlwaysOn Availability Groups]AG排查和监控指南
AG排查和监控指南 1. 排查场景 如下表包含了常用排查的场景.根据被分为几个场景类型,比如Configuration,client connectivity,failover和performance ...
- 安装.NET Framework进度条卡住不动的解决方案
VS在安装之前需要安装.NET Framework,我安装的是4.0版本.但是安装进度条到一半左右时就卡住不动了.前前后后重试多次,还有几次重新开机,但都没用. 开始还以为是安装的系统有问题.后来在网 ...
- 数据库实战案例—————记一次TempDB暴增的问题排查
前言 很多时候数据库的TempDB.日志等文件的暴增可能导致磁盘空间被占满,如果日常配置不到位,往往会导致数据库故障,业务被迫中断. 这种文件暴增很难排查,经验不足的一些运维人员可能更是无法排查具体原 ...
- VS2015调试时没有启动IIS Express Web服务器 或者停止调试时 IIS Express 跟着关闭
解决方法: 打开 解决方案资源管理器 -> 点选 Web 项目选择 -> 属性 -> Web "服务器" 去掉勾选"将服务器设置应道所有用户" ...