最近项目做页面统计,作为一个基础不大好的菜鸟,果断祭出文档啊,然造化弄人,看着文档给出的有且仅有的两段代码,菜鸟内心好忧伤。
木有办法,就这样硬上吧,摸索了几个小时,终于完成,内心不是不愉悦,关键是菜鸟终于会自己捉虫子吃了,虽然虫子不大,好歹还能凑合凑合,呵呵哒。
基本的SDK集成可参考:http://dev.umeng.com/analytics/ios-doc/integration
主要就遇到的问题进行总结:
1,项目一般有很多页面,我们是不可能一个一个手动加的,既浪费时间又不利于维护,于是自然而言就会想到提取基类,然后在基类中实现以下方法:
- (void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
[MobClick beginLogPageView:self.title];
}
- (void)viewWillDisappear:(BOOL)animated{
[super viewWillDisappear:animated];
[MobClick endLogPageView:self.title];
}
2,那么问题来了,beginLogPageView / endLogPageView 中的 pageName 该怎么设置,当然不能写死啊是吧,这个我都知道,其实这个问题很简单,当时我傻了,一直在考虑传值的问题,钻了牛角尖以至于走了好久的弯路,其实方法就在眼前,每个控制器都有title,直接self.title就OK了;
3,这个问题解决了,另一个问题又来了,为什么有的页面进入后控制台没有LOG?
我当时的解决思路是这样的:
1)犯蠢了啊,我压根就没设置title啊,喝口水平静一下,设置好title;
2)如果不是像我一样犯蠢了,那就看一下是不是基类的问题,因为我的基类是继承自UIViewController,而当点击的页面继承自UITableViewControler或UINavgationViewController时,因为这两个没有业务关系,此时是可以忽略的,只需要关注其子控制器就好;
3)其实这个问题跟问题 2) 有关,其子控制器的title是这样设置的,self.navigationItem.title,打印时作出判断即可。
4)所以此时再在基类中实现上面那两个方法,就需要加逻辑判断了:
- (void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
if (self.title.length > 0) {
[MobClick beginLogPageView:self.title];
} else{
[MobClick beginLogPageView:self.navigationItem.title];
}
}
- (void)viewWillDisappear:(BOOL)animated{
[super viewWillDisappear:animated];
if (self.title.length > 0) {
[MobClick endLogPageView:self.title];
} else{
[MobClick endLogPageView:self.navigationItem.title];
}
}
4,我做的项目是关于音频播放的,所以在播放音频时,导航条的title是根据获取到的数据(所播放音频的名字)动态设置的,而我们在做页面统计时需要归类,需要将不确定的页面分类进行统计(如不管播放了什么音频都统一统计为播放音频),这个时候有个问题,导航条title与self.title如何运用的问题。纠结过这个问题的同学应该都知道,self.navigationItem.title
是动态的,而页面统计必须就这些页面用self.title设一个不变的值,而self.title固定,会优先选择显示self.title,所以self.navigationItem.title
也会固定。
此时我们需要在导航条内自定义一个UILabel,用它来显示动态数据,而用来做页面设置的self.title可以这样设置:
- (void)viewWillAppear:(BOOL)animated
{
self.title = UISTRING(@"albumList");
[super viewWillAppear:animated];
}
- (void)viewWillDisappear:(BOOL)animated
{
self.title = UISTRING(@"albumList");
[super viewWillDisappear:animated];
}
思路是不管你中间的self.navigationItem.title
怎么变,只要进退页面时self.title固定一个值就行。
不过,我仍然还在摸索阶段,有问题随时来更新。