iOS端应用统计SDK开发简介

一、应用统计SDK开发的作用:

  • 应用趋势:清晰展现应用的新增用户、活跃用户、启动次数、版本分布、行业指标等数据,方便从整体掌控应用的运营情况及增长动态
  • 渠道分析:在哪里推广最有效?从哪里获取的用户最有价值?友盟统计渠道分析功能可以实时查看各渠道的新增用户、活跃用户、次日留存率等用户指标,通过数据对比评估不同渠道的用户质量和活跃程度,从而衡量推广效果。
  • 留存分析:可以掌握每日(周/月)的新增用户在初次使用后一段时间内的留存率,留存率的高低一定程度上反映了产品和用户质量的好坏
  • 用户属性:用户的基本属性和行为特征,帮助您全面了解用户。

  • 行为分析:针对性地进行应用内的数据统计,了解用户的产品使用细节及行为特征,帮助团队寻找产品改进的突破点,评估产品优化的效果


二、应用统计SDK开发应该注意的地方

  1. 所有类别加上前缀,避免在项目中和别的类别重名
  2. 需要适配所有设备,ios的sdk应该适配iphone、ipad、ipod touch等设备,例如:如果采集运营商信息要注意区分设备,因为部门ipad和ipod touch是没有SIM卡的,如果没有做区分,则会引起异常。
  3. 严格遵守苹果公司审核规则,不去调用私有api。
  4. 适配声明的系统,一般支持6.0以上。
  5. 不要把第三方库打包进SDK

三、应用统计SDK的设计逻辑

  1. 服务端分配appId和appKey,前端SDK启动时进行验证。
  2. SDK向服务端发送appId和appKey进行启动验证时,如果验证通过将会返回前端指定的日志上传策略。策略共有启动上传、实时上传和定时上传三种,前端SDK默认策略为启动上传。(注意:打开调试模式-debug模式后,数据实时发送,不受发送策略控制)
    • 启动上传 每次启动前将上次缓存的操作发送到采集服务器。
    • 实时上传 每次有操作日志都立刻上传到服务器。
    • 定时上传 到了或者超过了设置的时间自动上传到服务器。
  3. 设置sessionID,为了区分用户操作,采用sessionID来辨别用户具体操作,应用切换到后台默认停留超过30秒时间将重新生成一个sessionID,也可以给出接口让开发者自行设置生产sessionID时间。
  4. 页面的统计:页面统计集成正确,才能够获取正确地页面访问路径、访问深度(PV)的数据,因此需要在控制器的生命周期函数中配对使用sdk的接口去进行统计:

    //页面开始跳转监听,请在每个viewviewWillApear中调用

    +(void)beginEvent:(NSString*)page;

    //页面结束跳转监听,请在每个view viewWillDisApear中调用

    +(void)endEvent:(NSString*)page;

  5. 自定义事件统计:自定义事件统计可以实现在应用程序中埋点来统计用户的点击行为,例如:文章或者信息分享到社交平台、详情点击阅读等等。当然也可以参照与服务器约定的事件ID进行传值。其相关接口定义为:

    +(void)postEvent:(NSString*)operateType seviceParm:(NSString*)seviceParm operateObjID:(NSString*)operateObjID;

    operateType:用户操作类型,与服务器约定;

    serviceParm:服务描述,可为nil;

    operateObjID:操作对象,可为nil。

  6. 采集用户地理位置信息,可给出接口,让开发者设置是否采集用户地理位置信息。
  7. 上传及记录日志采用异步的形式,不影响主线程。
四、webView中使用JS调用SDK接口


1WebViewJavascriptBridge文件拖进你的工程中,弹出框中不要选Copy items into desination group’s folder,选择Creat groups for any folders

2引入头文件

#import "WebViewJavascriptBridge.h"

3UIWebView实例化WebViewJavascriptBridge

代码:

WebViewJavascriptBridge* bridge = [WebViewJavascriptBridge bridgeForWebView:webView handler:^(id data, WVJBResponseCallback responseCallback) {

NSLog(@"Received message from javascript: %@", data);

NSDictionary *dic = (NSDictionary*)data;

NSString *operateType = [dic objectForKey:@”operateType”];

NSString *serviceParm = [dic objectForKey:@” serviceParm”];

NSString *operateObjID = [dic objectForKey:@” operateObjID”];

[Analytics postEvent:operateType serviceParm:serviceParm operateObjID:operateObjID];

    responseCallback(@"Right back atcha");

}];

//注:此处的data数据即为OBJC接收到得中javascript处发送给OBJC端的数据(此处数据请参看5中发送的数据),使用SDK监听webView事件只需在此处接收数据,并使用SDK的接口,将接收的数据作为参数,这里的参数webView即为需要监听的webview对象.

4OBJCjavascript发送数据:

[bridge send:@"Well hello there"];

[bridge send:[NSDictionary dictionaryWithObject:@"Foo" forKey:@"Bar"]];

[bridge send:@"Give me a response, will you?" responseCallback:^(id responseData) {

    NSLog(@"ObjC got its response! %@", responseData);

}];

注:此处与调用SDK接口无关,有需要的可以自行调用,否则无需在程序中实现此步骤。

5javascript处进行设置

代码:

function connectWebViewJavascriptBridge(callback) {

    if (window.WebViewJavascriptBridge) {

        callback(WebViewJavascriptBridge)

    } else {

        document.addEventListener('WebViewJavascriptBridgeReady', function() {

            callback(WebViewJavascriptBridge)

        }, false)

    }

}


connectWebViewJavascriptBridge(function(bridge) {


    /* Init your app here */


    bridge.init(function(message, responseCallback) {

        alert('Received message: ' + message)   

        if (responseCallback) {

            responseCallback("Right back atcha")

        }

})

//2

    bridge.send('Hello from the javascript')

    bridge.send('Please respond to this', function responseCallback(responseData) {

        console.log("Javascript got its response", responseData)

    })

})

注:bridge.send()方法即为向objc发送数据的接口,要调用bridge.send()方法必须在connectWebViewJavascriptBridge(function(bridge)){}中进行调用,否则无效,在此处进行设置监听的方法,例如:

HTML文件中有元素<button id=”buttton”>click</button>

则可在javascript(2)中使用下列代码对button进行监听,触发时向OBJC发送数据:

document.getElementById(“button”).οnclick=function()

{

var data={‘operateType:’001’,’serviceParm’:’测试’,’operateObjId’:’01001’}

bridge.send(data)

或者

bridge.send(data,function(responseData){

})

}




  • 启动上传 每次启动前将上次缓存的操作发送到采集服务器。
  • 实时上传 每次有操作日志都立刻上传到服务器。
  • 定时上传 到了或者超过了设置的时间自动上传到服务器。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值