开源:想在 Mac 中使用 Google Analytics ?点这里!

2016-05-18 07:32:48 +08:00
 quietjosen

Google Analytics 是个很棒的数据统计服务,但无奈没有 Mac OS X SDK ...

MacGoogleAnalytics 就是为了弥补这一缺憾而诞生的 开源库

MacGoogleAnalytics 的原理

核心的原理就是,在网络上部署一个 html 文件,在 OS X 模拟打开这一网页,并将要统计的数据信息以参数的形式传递。最终, html 文件将这些数据发送给 Google Analytics.

MacGoogleAnalytics 怎么使用

最简单的,只要集成 2 个 Swift 文件。

更新一个文件中的配置信息,如 Google Analytics id 、 app 名称、版本、等。

在程序启动、结束时,相应地启动 Google Analytics.

func applicationDidFinishLaunching(aNotification: NSNotification) {    
  GAHelper.startGoogleAnalytics()
}
  
func applicationWillTerminate(notification: NSNotification) {
  GAHelper.stopGoogleAnalytics()
}

之后,就可以这样发送 Event.

GA.sendEvent("menu", event: "click", label: "rate")

来个效果图:

能上架 Mac App Store 吗?

必须能。 我的这几个 App 都已经上架了:

有点意思

那就去 这里 瞧瞧吧,感兴趣点个赞,能帮到忙不妨请我喝杯咖啡 :)

3741 次点击
所在节点    程序员
23 条回复
honeycomb
2016-05-18 07:45:54 +08:00
ga 一般是屏蔽掉的
quietjosen
2016-05-18 08:01:29 +08:00
@honeycomb 但感觉事实上不是,我一起在用 GA ,一直有数据的,比如我在实时查看里就立马能看到的(测试的是在手机 4G 网络、未科学上网)

但确实不排除被屏蔽了不知道的情况。
Slienc7
2016-05-18 08:31:57 +08:00
@honeycomb @quietjosen
部分动荡地区可能在某些特殊时间 ISP 级别屏蔽;偶尔出现“全国”范围“网络故障”;
正常情况下 GA 一类都是指向谷歌的北京服务器,不过墙。
aliuwr
2016-05-18 08:54:22 +08:00
ga 是有提供 HTTP 接口的…
quietjosen
2016-05-18 09:05:40 +08:00
@Slienc7 专家啊;一般丢失一部分 GA 数据,还是不影响整体的判断;谁让 GA 实在太好用了,国内的统计服务实在差太多。
quietjosen
2016-05-18 09:06:34 +08:00
@aliuwr 有心基于 API 级别进行适配,但这相当于自己写个 Google Analytics SDK ,这轮子大了点,还是讨巧的实现比较容易。
aliuwr
2016-05-18 09:22:10 +08:00
@quietjosen 我之前写的就实现了两个 API ( view/event),也就不到 200 行,加上发送队列的逻辑不到 300 。
你的这个方案看起来要加载浏览器引擎。。。资源和效率我都没法接受。。。
quietjosen
2016-05-18 09:26:45 +08:00
@aliuwr 那期待你的完整实现啦。

GA 的数据有很多,如操作系统、浏览器、位置、等等,要全部实现代码肯定不少。我目前的实现还不够优雅,但也确实实用,可以收集到所有 GA 支持的数据。
typcn
2016-05-18 09:33:14 +08:00
GA 就发个 HTTP 请求。。。。 10 行代码就能实现
quietjosen
2016-05-18 09:35:29 +08:00
@typcn 是吗?求科普,能贴出来共赏吗?
haranhuang
2016-05-18 09:37:12 +08:00
你这个是采集 MAC 软件的信息的?
quietjosen
2016-05-18 09:40:02 +08:00
@haranhuang 严格的说,不是。不是采集 MAC 信息,而是在 Mac 上运行的 App 的一些信息,比如名称、版本、启动次数、等等。也就是 Google Analytics 匿名收集的基础数据。
crystone
2016-05-18 09:42:16 +08:00
想法不错,做好的话可以大销量啊
typcn
2016-05-18 09:45:42 +08:00
@quietjosen

NSString *POSTDATA = [NSString stringWithFormat:@"v=1&tid=网站 ID&cid=%@""&t=screenview&an=应用名&av=%@&aid=包名&cd=%s",启动生成一串随机 ID,ver,view];
NSURL* URL = [NSURL URLWithString:@"http://www.google-analytics.com/collect"];
NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:URL];
request.HTTPMethod = @"POST";
request.HTTPBody = [POSTDATA dataUsingEncoding:NSUTF8StringEncoding];
NSURLConnection* connection = [NSURLConnection connectionWithRequest:request delegate:nil];
[connection start];

7 行,其实还可挤一挤
quietjosen
2016-05-18 09:59:00 +08:00
@typcn 哦,你是说用 Measurement Protocol 对吧?我之前也简单看过,但觉得自己封装不同类型的数据麻烦,就搁置了,有时间再试试。
https://developers.google.com/analytics/devguides/collection/protocol/v1/devguide

通过你上面的代码,能自动收集到操作系统、浏览器、位置、等数据吗?还是说这些基础数据也要自己封装?
quietjosen
2016-05-18 09:59:28 +08:00
@crystone “大销量”,目前是开源的哦,你想买吗?可以哦,哈哈
quietjosen
2016-05-18 10:16:19 +08:00
@typcn 简单试了下你的代码,真是可以发送 event ,我再验证下其它的数据是不是自动收集的。
typcn
2016-05-18 10:34:40 +08:00
@quietjosen 位置是根据 IP 估计的,操作系统和浏览器的话拼装一个 UA 即可
quietjosen
2016-05-18 10:41:11 +08:00
@typcn 好吧,明白了。具体到发送某一个数据(比如 event )是没什么问题,问题只是要自己封装所有感兴趣的数据,难度不大,就是繁琐些。

我刚才验证了下,位置是有的,但操作系统、浏览器、屏幕分辨率之类的数据都是没有的。
honeycomb
2016-05-18 10:53:59 +08:00
@quietjosen 啊,抱歉, 1 楼想表达“一般自己会在 hosts 里屏蔽掉 ga 的域名”的意思。

举个例子: Evernote 的 log 会一直报 ga 无法连接

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/279413

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX