V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
quietjosen
V2EX  ›  程序员

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

  •  
  •   quietjosen ·
    atjason · 2016-05-18 07:32:48 +08:00 · 3631 次点击
    这是一个创建于 2893 天前的主题,其中的信息可能已经有所发展或是发生改变。

    07:34:46 AM

    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")
    

    来个效果图:

    1750021

    能上架 Mac App Store 吗?

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

    有点意思

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

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

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

    GA 的数据有很多,如操作系统、浏览器、位置、等等,要全部实现代码肯定不少。我目前的实现还不够优雅,但也确实实用,可以收集到所有 GA 支持的数据。
    typcn
        9
    typcn  
       2016-05-18 09:33:14 +08:00
    GA 就发个 HTTP 请求。。。。 10 行代码就能实现
    quietjosen
        10
    quietjosen  
    OP
       2016-05-18 09:35:29 +08:00
    @typcn 是吗?求科普,能贴出来共赏吗?
    haranhuang
        11
    haranhuang  
       2016-05-18 09:37:12 +08:00
    你这个是采集 MAC 软件的信息的?
    quietjosen
        12
    quietjosen  
    OP
       2016-05-18 09:40:02 +08:00
    @haranhuang 严格的说,不是。不是采集 MAC 信息,而是在 Mac 上运行的 App 的一些信息,比如名称、版本、启动次数、等等。也就是 Google Analytics 匿名收集的基础数据。
    crystone
        13
    crystone  
       2016-05-18 09:42:16 +08:00
    想法不错,做好的话可以大销量啊
    typcn
        14
    typcn  
       2016-05-18 09:45:42 +08:00   ❤️ 1
    @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
        15
    quietjosen  
    OP
       2016-05-18 09:59:00 +08:00
    @typcn 哦,你是说用 Measurement Protocol 对吧?我之前也简单看过,但觉得自己封装不同类型的数据麻烦,就搁置了,有时间再试试。
    https://developers.google.com/analytics/devguides/collection/protocol/v1/devguide

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

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

    举个例子: Evernote 的 log 会一直报 ga 无法连接
    typcn
        21
    typcn  
       2016-05-18 10:59:21 +08:00
    @quietjosen 这些都是一个 post 参数的事。。
    quietjosen
        22
    quietjosen  
    OP
       2016-05-18 11:09:09 +08:00
    @honeycomb 这样子啊,没用 Evernote ,不知道还有这事。
    quietjosen
        23
    quietjosen  
    OP
       2016-05-18 11:09:51 +08:00
    @typcn 恩,是的。有时间我再把常用的统计组装下,到时更新下这个库。感谢提醒 API 的事。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   4981 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 42ms · UTC 09:39 · PVG 17:39 · LAX 02:39 · JFK 05:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.