app内有新的功能发布时,为了确定功能的效果及影响往往会进行灰度。 只让一部分用户参与试用此功能。
需求:一个新功能每个版本有 1/5的用户试用此功能 。
取deviceid 进行hash ,然后取hash后的值得后两位, 如果后两位的值 <=20 ,则认为该用户可以当做试用用户。
这种实现简单方便,但是有一个问题:每次都是同一批用户参与该功能的实验, 如果想每次换不同批次的用户参与实验的话就需要判断后两位值的范围 。
例如:第一批用户 deviceid hash 后的值 <=20 , 那么在下个版本设置 deviceid hash后两位的值 >20 && <=40 ,同理往下继续...... 。这样就可以分批次的对不同用户进行灰度。这种方案的好处是参与功能的用户不会重复,用户参与了第一批次的实验,就没法参与下一个批次的试验了 。
NSString *deviceid = [UIDevice uniqueDeviceIMEI];
NSUInteger hashValue = [deviceid hash];
/** 取后两位 */
NSUInteger percentValue = hashValue % 100;
if ( percentValue <= 20) {
// 参与实验
return YES;
} else {
// 不参与实验
}
还有一种方式是使用随机数 。如控制1/5的用户参与功能,则需要进行 random ,判断random 的数字 == 1 ,则参与该功能的实验 。这种方式比较简单,但是可能会有重复参与实验的用户 。