码迷,mamicode.com
首页 > 其他好文 > 详细

文章标题

时间:2015-05-20 18:29:48      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:友盟   ios   

基于友盟的用户分析模块的设计

移动应用开发中基本都要用到用户分析,大部分的应用选择的友盟统计,我们也不例(其实不是没有内部的统计,是实在是人手不足,做的没人家好用啊).这篇文章题主就来分享下自己是如何封装的统计模块.

业务需求

业务需求经过抽象后,基本可以分为两层

ui层

  • 点击

业务层

  • 开始
  • 完成
  • 失败(默认带失败原因)

我们的一个上报信息就由模块名 + 页面名 + 事件名字 + 事件类型 +事件子类型 + 上报的数据组成

设计思路

  • 两套接口
  • 需要继承一个类

接口一: 抽象工厂模式

@interface TestUserAction : UserAction
+ (instancetype)usertAction1;
+ (instancetype)usertAction2;
@end

@implementation TestUserAction

- (instancetype)init
{
    self = [super init];
    if (self) {
        self.module = @"__untiTest1";
    }
    return self;
}
+ (instancetype)usertAction1
{
    TestUserAction *userAction = [TestUserAction uiTapEvent:@"event1" atPage:@"page1"];

    return userAction;
}

+ (instancetype)usertAction2
{
    TestUserAction *userAction = [TestUserAction businessStartEvent:@"event1" atPage:@"page1"];
    userAction.userInfo = @{ @"rid" : @"100",
                             @"uid" : @"1000" };
    userAction.autoSource = YES;

    return userAction;
}
@end

// test
UXY_DESCRIBE( test1 )
{
    [[ReportingService instance] removeASourceAtUserActionClassType:@"TestUserAction"];
    [[ReportingService instance] addASource:@"来自火星" atUserActionClassType:@"TestUserAction"];
    [[ReportingService instance] addASource:@"测试页面" atUserActionClassType:@"TestUserAction"];
    [[ReportingService instance] removeASourceAtUserActionClassType:@"TestUserAction"];
}

UXY_DESCRIBE( test2 )
{
    UXY_TIMES(10)
    {
        [[ReportingService instance] reportUserAction:[TestUserAction usertAction1]];
        [[ReportingService instance] reportUserAction:[TestUserAction usertAction2]];
    }
}

接口二: 建造者模式

// test
UXY_DESCRIBE( test3 )
{
    UXY_TIMES(10)
    {
        TestUserAction.ACTION(nil)
            .MODULE(@"__untiTest2")
            .PAGE(@"page1")
            .EVENT(@"event2")
            .SOURCE(@"test3")
            .UI()
            .TAP()
        .REPORT();

        TestUserAction.ACTION(nil)
            .PAGE(@"page1")
            .EVENT(@"event2")
            .AUTOSOURCE()
            .BUSINESS()
            .START()
        .REPORT();
    }
}

UXY_DESCRIBE( test4 )
{
    UXY_TIMES(10)
    {
        // 分开设置来源, 小模块, 事件类型, 事件名称
        {
            TestUserAction.ACTION(@"myEvent")
                .SOURCE(@"test3");
        }

        {
            TestUserAction.ACTION(@"myEvent")
                .PAGE(@"page1");
        }

        {
            TestUserAction.ACTION(@"myEvent")
                .UI()
                .TAP();
        }

        {
            TestUserAction.ACTION(@"myEvent")
                .EVENT(@"event2")
            .REPORT();
        }
    }
}

不足

  • 存在了循环依赖,消除的方法也有,但是考虑到这是一个独立的模块,就没去弄了.

工作流

  • 提需求
  • 开发加代码(加新的,删旧的,暂时友盟不删)
  • 测试按照流程走一遍
  • 导出txt,归档
  • 和旧版本对比,生成上报友盟的txt(自动化)
  • 验证有没有漏报
  • 上传到友盟
  • 去友盟验证

未来

  • 给所有UI事件加埋点,指定关心的事件上报

文章标题

标签:友盟   ios   

原文地址:http://blog.csdn.net/uxyheaven/article/details/45873007

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!