Mixpanel 可视化ABTest分析 —— iOS篇

因为这篇文章主要分析Mixpanel中可视化ABTest部分,所以代码中会忽略其他部分代码,其他代码部分会用"…"表示,且文章描述中仅针对ABTest部分。

1. 添加手势开启websocket

Mixpanel的初始化函数比较多,主要的初始化函数为下面这个。该函数初始化了websocket的url,并添加了开启websocket的手势。

- (instancetype)initWithToken:(NSString *)apiToken
                launchOptions:(NSDictionary *)launchOptions
                flushInterval:(NSUInteger)flushInterval
                 trackCrashes:(BOOL)trackCrashes
        automaticPushTracking:(BOOL)automaticPushTracking
               optOutTrackingByDefault:(BOOL)optOutTrackingByDefault
{
   
	......
	// switchboardURL为websocket连接的url地址
	self.switchboardURL = @"wss://switchboard.mixpanel.com";
	......
	// Mixpanel通过版本控制了是否支持可视化ABTest,v3.0.1之后的版本均支持,在后续代码中会看到关于enableVisualABTestAndCodeless的判断
#if defined(DISABLE_MIXPANEL_AB_DESIGNER) // Deprecated in v3.0.1
    self.enableVisualABTestAndCodeless = NO;
#else
    self.enableVisualABTestAndCodeless = YES;
#endif
	......	
	// setUpListeners会设置手势用于启动websocket服务
	[self setUpListeners];
	......
}

- (void)setUpListeners
{
   
	......
    [self initializeGestureRecognizer];
}

/**
 *	通过UILongPressGestureRecognizer手势开启websocket服务
 */
- (void)initializeGestureRecognizer
{
   
#if !MIXPANEL_NO_NOTIFICATION_AB_TEST_SUPPORT
    if (![Mixpanel isAppExtension]) {
   
        dispatch_async(dispatch_get_main_queue(), ^{
   
            self.testDesignerGestureRecognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self
                                                                                               action:@selector(connectGestureRecognized:)];
            self.testDesignerGestureRecognizer.minimumPressDuration = 3;
            self.testDesignerGestureRecognizer.cancelsTouchesInView = NO;
#if TARGET_IPHONE_SIMULATOR
            self.testDesignerGestureRecognizer.numberOfTouchesRequired = 2;
#else
            self.testDesignerGestureRecognizer.numberOfTouchesRequired = 4;
#endif
            // because this is in a dispatch_async, if the user sets enableVisualABTestAndCodeless in the first run
            // loop then this is initialized after that is set so we have to check here
            self.testDesignerGestureRecognizer.enabled = self.enableVisualABTestAndCodeless;
            [[Mixpanel sharedUIApplication].keyWindow addGestureRecognizer:self.testDesignerGestureRecognizer];
        });
    }
#endif // MIXPANEL_NO_NOTIFICATION_AB_TEST_SUPPORT
}

其中[Mixpanel sharedUIApplication]函数用于获取UIApplicaiton:

+ (UIApplication *)sharedUIApplication
{
   
    if ([[UIApplication class] respondsToSelector:@selector(sharedApplication)]) {
   
        return [[UIApplication class] performSelector:@selector(sharedApplication)];
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值