FireData SDKs帮助文档

JavaScript SDK/IOS SDK/Android SDK帮助文档
让你全面了解如何为你的系统添加追踪代码

1. FireData JS SDK

JavaScript SDK 适用于网页的追踪。

1.1. 添加JS代码

要跟踪页面,需要在头部或者页面尾部添加上一段js代码,导入FireData js sdk,代码如下

<script type="text/javascript">
  // install FireDATA sdk
  !function(key, params){
      var w = window, d = document, _fd=w._fd=w._fd||[], methods = ["pageView","event","event2app","autoEvent2app","setUserInfo","setContentInfo","setParams"];
      var fac=function(t){return function(){var e=Array.prototype.slice.call(arguments);e.unshift(t);_fd.push(e);return _fd}};
      for(var t=0;t<methods.length;t++){var e=methods[t];_fd[e]=fac(e)};_fd.setParams(params);
      var g = d.createElement('script'), s = d.getElementsByTagName('script')[0];g.type = 'text/javascript';g.async = true;g.defer = true;g.src = '//sdk.firedata.cc/js/'+key+'.js';s.parentNode.insertBefore(g, s);
  }('你的APP KEY'/*, {'paramName':'paramValue'}可选*/);

  _fd.pageView();  //pageView方法必须调一次才会发送PV事件,还可以带参数调用 _fd.pageView('页面名称')
</script>

1.2. JS-自定义页面名称

为了更好的区分页面,每个页面可以通过定义页面名称,可以有两种方式来定义

第一种方式:meta定义,在页头中添加meta标签

 <!-- page-name表示页面名称,content是页面名称的值,本例中代表页面是“详情页” -->
 <meta name="page-name" content="详情页"> 

第二种方式:是在JavaScript中设置,如下

<script type="text/javascript">
  _fd.pageView('详情页');//PV日志记录,第二个参数就是页面名称,如果出现该调用,就不需要 _fd.pageView(); 
  // ...
</script>

1.3. JS-设置用户信息

FireData js sdk允许你设置用户信息,用户信息一旦设置,会存放在cookie中,跟随在各个页面上,方便在统计时识别各种不同的用户。这也是用于跨屏追踪同一个用户行为的方法。共有三种方式来设置用户信息

第一种方式:在页头中添加meta标签,所有的user属性,name值都会以user-开头,后面的部分代表属性名,其中user-id通常代表注册登陆用户的ID编号,

 <!-- user-id代表用户的id号,会取出放到uid字段中。 -->
 <meta name="user-id" content="user1234"> 
 <meta name="user-你的参数名" content="你的参数值">
 <!-- 例如: -->
 <meta name="user-name" content="张三"> 
 <meta name="user-account" content="1234元">  

第二种方式:是在JavaScript中设置,如下

<script type="text/javascript">
  /* 设置用户信息, 用户信息会被存入cookie
   * param userinfo json对象,keyvalue格式
   * "id"会被取出,其他作为uvar字段处理
   * 空对象{}表示删除信息
   */
  _fd.setUserInfo({'id' : 'user123',"age" : 123});
  // ...
</script>

第三种方式:直接在服务器端种植cookie, 名字为_fd_u.你的站点ID,值为一个json串,如下

 // cookie名:_fd_u.fb
 {"id": "user123", "name":"张三", "age":23}

1.4. JS-设置内容信息

内容信息是指用户当前浏览的内容是什么,通常代表“一个视频”,“一篇文章”,“一个商品”,“一个投资产品”等,你可以用它来抽象任何你想表达的用户看见的内容的相关信息,在统计中打入这些信息,有助于统计内容的情况,如最受欢迎的产品统计等。 其中有三个属性有特殊意义,他们是:

  • id:内容id号
  • channel:内容一级分类,可选的

第一种方式:在页头中添加meta标签,所有的content属性,name值都会以content-开头,后面的部分代表属性名,其中有三个属性有特殊意义, 他们是content-idcontent-channel

 <!-- content-id代表内容的id号,会取出放到cid字段中。 -->
 <meta name="content-id" content="product1234"> 
 <meta name="content-你的参数名" content="你的参数值">
 <!-- 例如: -->
 <meta name="content-title" content="苹果手机IPhone10"> 
 <meta name="content-price" content="3.15元"> 

第二种方式:是在JavaScript中设置,如下

<script type="text/javascript">
  /* 设置内容信息,比如设置
   * param info kv对象,空对象{}表示删除信息
   * "id", "channel[可选]", "subchannel[可选]"会被取出,其他作为cvar字段处理
   */
  _fd.setContentInfo({"id" : "123","可投金额" : 0});
  // ...
</script>

1.5. JS-PV跟踪

PV跟踪用于记录用户访问页面的行为,页面可以是top页,也可以是内嵌的窗口页面,需要通过JavaScript才能触发pv日志记录

<script type="text/javascript">
  _fd.pageView('页面名称[可选]', {'页面属性': '可选'});//PV日志记录
  //....
</script>
除此之外,还可以在其他地方展示的时候记录PV,比如一个内嵌的tab页面,添加onclick事件
<div id="tab-abc" onclick="_fd.pageView('内嵌tab-abc')">.....</div>

1.6. JS-Event事件跟踪

事件跟踪用于跟踪页面内发生的事件行为,例如登录点击,视频播放暂定,商品列表页里的商品点击行为等等,记录事件,事件包括3个参数,分别为:

  • category: 事件分类 (如:Videos, Music, Games...)
  • action: 动作 (如Play, Pause, Duration, Buy)
  • evar: 自定义事件属性, JSON格式,如:{"title": 'abc'}

第一种方式:注解的方式,在需要跟踪点击行为的元素上添加注解, 告诉sdk自动捕获点击行为,注解属性以data-event为前缀

  • data-event-category == category,可选,默认值为"/"
  • data-event == action,必选
  • data-event-customVar = "属性值1", [可选],自定义的事件属性,以“data-event-”开头 == {"customVar": "属性值1"}
  • data-event-price = "123", [可选] == {"price": "123"}
<!--此例子为:点击页头的导航回到首页-->
<a href="/" data-event-category="navbar" data-event="tohome" data-event-text="首页">首页</a>
//等同于,href会被自动记录
_fd.event('navbar', 'tohome', {"text": "首页", 'link': '/'});

其他form表单的元素埋点类似,例如:
<input data-event-category="注册" data-event="输入身份证号码" type="text"/>

<input data-event-category="登录" data-event="登录按钮" type="submit" value="登录"/>

<div class="registerBtn" data-event-category="注册" data-event="注册按钮">立即注册</div>

<select data-event-category="注册" data-event="选择城市">
  <option value ="Beijing">北京</option>
  <option value ="Shanghai">上海</option>
  <option value="Guangzhou">广州</option>
</select>

**注意1**:如果不想采集form表单中的某个input的值,用如下的方式:
<input data-event-v="@off" data-event-category="注册" type="text"/>
用data-event-v来设置关闭,其他属性有无都无所谓。

**注意2**:这里有一个原则,表单中的所有输入input或者select不标注也会采集,默认依次会用id或name值来设置data-event的值,如果id/name都没有则不会采集,建议显式设置data-event和data-event-category属性,如果要屏蔽一个元素,也建议显式屏蔽。

**注意3**:对于form表单中input等元素很多的情况,data-event-category属性可以放在form中,form内的input等只需要加data-event属性即可。

**注意4**:对于form表单外的点击,无论是超连接或者其他div等,都需要显式标注采集,不标注即不采集。

**注意5**:data-event和data-event-category的值建议直接使用中文即可,简单明了。

第二种方式:用JavaScript触发

<script type="text/javascript">
  /* 记录自定义event事件
   * param category 事件分类 (如:Videos, Music, Games...)
   * param action 动作 (如Play, Pause, Duration, Buy)
   * param evar 自定义事件属性, JSON格式,如:{"price": 123}
   */
  //如下例子为: 事件分类为touzi,动作是购买,产品ID:licai123,金额为1000
  _fd.event('touzi', 'buy', {'amout': 1000, 'id': 'licai123'});
  //....
</script>

  点击购买的例子,
<button value="立即购买" onclick="_fd.event('touzi', 'buy', {'amout': 1000, 'id': 'licai123'});"/>

1.7. JS-Event全局事件属性的设置

如果在一个页面中,所有的event都需要自定义相同的事件属性,这时可以把这些相同的扩展属性提取出来作为页面级别的全局事件属性,由统一的方法埋点,那么该页面中所有的event事件都会带上这些属性。埋点方式如同页面内容设置的meta标注:

 <!-- 例如:每个事件需要传订单号和账号余额 -->
 <meta name="event-orderid" content="JD201605301020301"> 
 <meta name="event-account" content="1234元">  

1.8. JS-event2app将事件写给APP

_fd.event2app 方法,用来将事件记录给Android/IOS APP

  • 首先需要在APP中bindWebview绑定,然后就可以用此方法写事件给app了
  • _fd.event2app接口参数同_fd.event接口
  • 可以通过_fd.autoEvent2app(true)方法,设置将所有的事件都自动传给app,包括pv

1.9. JS-流量来源跟踪

流量来源跟踪,用于记录用户从哪个渠道来的,这个需要你在用户着陆页url中添加参数来告诉FireData sdk,用户从哪里来的,这两个参数分别是:

  • 推广活动的名称:参数为'fd_campaign', '_from', '_ref', 'utm_campaign', 'utm_source', 'utm_medium'中的一个。
  • 推广活动的值[可选]:参数为'fd_kwd', 'utm_term'中的一个,通常为搜索关键词,或者推广员的名字等

例如:

  • http://your domain/index.html?_from=weixin表示从微信来的
  • http://your domain/index.html?utm_source=baidu_2qi&utm_term=关键字表示从百度投放的竞价广告来的
  • http://your domain/index.html?_from=yuangong&utm_term=zhangsan表示从员工张三的推广带来的流量

用好此Feature,可以帮你更好的测算不同渠道,不同推广方式的效果及RIO

2. FireData Android SDK

Android版数据采集sdk,最新版本下载地址:Android-SDK-v3.0 示例 (更新于2016.06.20)

2.1. AndroidManifest配置

第一步,需要在配置文件中添加权限

  • 添加权限android.permission.INTERNET, 向统计服务器发送用户分析数据。
  • 添加权限android.permission.READ_PHONE_STATEandroid.permission.ACCESS_WIFI_STATE, 这两个权限是为了获取用户手机的IMEI以及WiFi的Mac地址,用来唯一的标识用户。
  • android.permission.ACCESS_NETWORK_STATE ,用以检测网络状态。
  • android.permission.READ_LOGS, 用于获取客户端crash log。通过将crash log汇报到服务器上,您可以了解您的应用crash的原因以及次数。
  • android.permission.WRITE_EXTERNAL_STORAGE , 用于保存离线报告的缓存数据。
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

[可选]appId和Channel信息也可以配置在Manifest文件中,请加到application中

<application android:icon="@drawable/icon" android:label="@string/app_name" >
...
    <meta-data android:name="firedata_appkey" value="你的APP_KEY" />
    <meta-data android:name="firedata_channel" value="渠道信息" />
...
</application>

2.2. Android初始化

请在你的app的onCreate方法中对sdk进行初始化操作,代码如下:

import com.firedata.sdk.Firedata;

public class YourApp extends Application{

    @Override
    public void onCreate() {
        super.onCreate();
        Firedata.init(this);
        //或者
        //Firedata.init(this, "{{appKey}}", "{{channel}}");
        //设置调试
        Firedata.setDebug(true);

    }
} 

init方法如下:

/**
 * 初始化sdk, appId和channel信息从Manifest中读取。
 * @param context application 上下文信息
 */
public static void init(Context context)
/**
 * 初始化sdk
 * @param context application 上下文信息
 * @param appKey 本应用的appKey,`该appKey由FireDATA按照应用来分配,一个应用对应一个appKey,下同`
 * @param channel 本应用的分发渠道信息
 */
public static void init(Context context, String appKey, String channel) 

2.3. Android 全局开关设置

可以设置app crash掉以后上报日志,以及app被切换到后台,全局设置一次即可。

/**
 * 打开App Crash上报开关,全局在app启动后设置一次即可。
 */
public static synchronized void enableCrashReporting()

/**
 * 打开自动跟踪程序切换到后台,打开后,记录的使用时间更准确, 注意:`Android 4.0 以上版本有效(即API >= 14)`
 * @param app Application
 */
public static void enableForegroundTracking(Application app)

2.4. Android 区分渠道

设置渠道,可以帮助区分不同渠道用户的行为。如上所说,有两种方法来设置渠道信息

第一种: 在Manifest文件中设置 meta-data: firedata_channel

第二种: 在调用init初始化的时候传入参数init(Context context, String appKey, String channel)

2.5. Android设置用户信息

Firedata sdk提供了接口来记录用户的信息,可以用在跨平台用户分析,以及根据用户的属性不同做区分分析

使用onLogin设置用户信息,使用onLogout移除用户信息

调用的方式如:Firedata.methodName(...); methodName和参数见下面说明。

接口说明如下:

/**
 * 记录登陆用户
 * @param userId 用户的ID
 * @param userInfoKV [optinal] 用户的属性,用key-value结构,奇数参数为属性名,偶数则为属性值
 */
public static void onLogin(String userId, String ... userInfoKV)

/**
 * 记录登陆用户
 * @param userId 用户的ID
 * @param userInfo 用户的属性,可以为null
 */
public static void onLogin(String userId, Map<String, Object> userInfo)

/**
 * 用户退出登陆,记录的信息中不再包含用户信息
 */
public static void onLogout()

此外,你还可以通过sdk的setUserInfo接口变更用户属性信息,例如:修改用户的当前账户余额,修改用户的会员状态等, 接口如下:

/**
 * 设置单个用户属性,如,当用户购买了会员后,可以设置用户会员状态为true
 * @param key 用户属性名
 * @param value 用户属性值
 */
public static void setUserInfo(String key, Object value)

/**
 * 移除用户的某个属性,例如当用户的会员过期后,移除其会员属性
 * @param key 属性名
 */
public static void removeUserInfo(String key)

2.6. Android PageView

PV跟踪用于记录用户访问页面的行为,页面可以是一个Activity,也可以是一个Tab,Fragment等等,根据你的业务逻辑设定

开发者需要在所有页面添加Firedata.pageViewStart(...), 并在页面结束时添加Firedata.pageViewEnd(...),必须成对出现。

/**
 * 请注意,一定要调用{@link Firedata#pageViewEnd(String)} 才会记录pv信息
 * @param pageName 页面名称
 */
public static void pageViewStart(String pageName)


/**
 * 请注意,一定要调用{@link Firedata#pageViewEnd(String)} 才会记录pv信息
 * @param pageName 页面名称
 * @param props 参见下文Props定义
 */
public static void pageViewStart(String pageName, Props props) 

/**
 * 页面结束退出pageView
 * @param pageName 页面名称
 */
public static void pageViewEnd(String pageName)

2.7. Android 事件跟踪

事件跟踪用于跟踪页面内发生的事件行为,例如登录点击,视频播放暂定,商品列表页里的商品点击行为等等,记录事件,事件包括3个参数,分别为:

  • category: 事件分类 (如:Videos, Music, Games...)
  • action: 动作 (如Play, Pause, Duration, Buy)
/**
 *记录事件
 * @param category  事件分类 (如:Videos, Music, Games...)
 * @param action    动作 (如Play, Pause, Duration, Buy)
 */
public static void event(String category, String action) 


/**
 * 记录事件
 * @param category 事件分类 (如:Videos, Music, Games...)
 * @param action   动作 (如Play, Pause, Duration, Buy)
 * @param props    参见下文Props定义
 */
public static void event(String category, String action, Props props) 

2.8. Android 记录异常接口

/**
 * 记录程序异常
 * @param e 异常
 * @param msg 错误消息
 */
public static void exception(Throwable e, String msg)

2.9. Android 关于Props类的定义和用法

用于帮助生成'用户属性','内容属性','事件属性'。在一个事件中,往往需要指定设置不止很多属性值,为了方便设定这些值,我们定义了一个统一的属性类:

例子1:生成Props对象并设置事件属性 Props.eventProps('by', 'click');

例子2:用户购买了两件小米5手机,价格是1999元 Props.contentInfoSet('电子产品', 'mi5').content('price', 1999).content('name', '小米5').event('buy_amount', 2);

例子3:用户账户余额有1234元,是VIP用户,购买了两件小米5手机 Props.userProps('balance', 1234).user('vip', '是').contentInfo('电子产品', 'mi5').event('buy_amount', 2);

     /**
     * 新建一个Props对象,并为其指定'事件属性'
     * @param name 事件属性的名字
     * @param value 事件属性的值
     * @return 新的Props对象
     */
    public static Props eventProps(String name, Object value);

    /**
     * 新建一个Props对象,并将Map里的属性复制到此对象中,作为'事件属性'
     * @param props 事件属性的keyvalue
     * @return 新的Props对象
     */
    public static Props eventProps(Map<String, Object> props);

    /**
     * 为本Props对象指定'事件属性'
     * @param name 事件属性的名字
     * @param value 事件属性的值
     * @return this
     */
    public Props event(String name, Object value);

    /**
     * 为本Props对象设置多个'事件属性'
     * @param props 事件属性的keyvalue
     * @return this
     */
    public Props event(Map<String, Object> props);

    /**
     * 新建一个Props对象,并为其指定'内容属性'
     * @param name 内容属性的名字
     * @param value 内容属性的值
     * @return 新的Props对象
     */
    public static Props contentProps(String name, Object value);

    /**
     * 新建一个Props对象,并将Map里的属性复制到此对象中,作为'内容属性'
     * @param props 内容属性的keyvalue
     * @return 新的Props对象
     */
    public static Props contentProps(Map<String, Object> props);

    /**
     * 为本Props对象指定'内容属性'
     * @param name 内容属性的名字
     * @param value 内容属性的值
     * @return this
     */
    public Props content(String name, Object value);

    /**
     * 为本Props对象设置多个'内容属性'
     * @param props 内容属性的keyvalue
     * @return this
     */
    public Props content(Map<String, Object> props);

    /**
     * 新建一个Props对象,并为其指定内容的基本信息,包括'内容分类'和'内容ID'
     * @param contentCat 内容分类
     * @param contentId 内容ID
     * @return 新的Props对象
     */
    public static Props contentInfoSet(String contentCat, String contentId);

    /**
     * 为本对象指定内容的基本信息,包括'内容分类'和'内容ID'
     * @param contentCat 内容分类
     * @param contentId 内容ID
     * @return this
     */
    public Props contentInfo(String contentCat, String contentId);

    /**
     * 新建一个Props对象,并为其指定'用户属性',<b>注意:此用户属性不会覆盖全局的用户属性,只对本事件有效</b>
     * @param name 用户属性的名字
     * @param value 用户属性的值
     * @return 新的Props对象
     */
    public static Props userProps(String name, Object value);

    /**
     * 新建一个Props对象,并为其指定'用户属性',<b>注意:此用户属性不会覆盖全局的用户属性,只对本事件有效</b>
     * @param props 用户属性的keyvalue
     * @return 新的Props对象
     */
    public static Props userProps(Map<String, Object> props);

    /**
     * 为本对象其指定'用户属性',<b>注意:此用户属性不会覆盖全局的用户属性,只对本事件有效</b>
     * @param name 用户属性的名字
     * @param value 用户属性的值
     * @return this
     */
    public Props user(String name, Object value);

    /**
     * 为本对象指定'用户属性',<b>注意:此用户属性不会覆盖全局的用户属性,只对本事件有效</b>
     * @param props 用户属性的keyvalue
     * @return 新的Props对象
     */
    public Props user(Map<String, Object> props);

    /**
     * 复制一个新的Props对象,并将本对象的内容复制过去,同<code>clone()</code>函数
     * @return 新的Props对象
     */
    public Props copy();

2.10. Android 嵌入HTML5的埋点

Android页面通过WebView嵌入HTML5后,如何直接在HTML5中直接完成埋点?Android和HTML5都需要做一些处理:

第一步:在Android代码中显式调用bindWebview方法,注意:Android 4.2 以上版本有效(即API >= 17)

/**
 * 为WebView注入一个JS对象<code>FiredataAPP</code>, 可以在页面中调用此对象记录日志,日志会发送到APP日志中
 * Android 4.2以上版本有效
 * @param webView webView对象<b></b>
 * @param eventCategoryPrefix 事件所属分类的前缀,可以为null
 * @param props 事件属性,可以为null
 */
public static void bindWebview(WebView webView, String eventCategoryPrefix, Props props)

第二步:完成第一步后,在WebView的HTML5中就可以直接得到一个FiredataAPP的js对象,接口直接操作FiredataAPP的接口,完成APP的埋点。

特别说明:如果你的html中集成了FireDATA js,sdk,则请可以不用这步,直接参看JS-event2app将事件写给APP

首先,在HTML5中需要声明一段JavaScript代码,例如:

<html>
  <head>
      <script type="text/javascript">
      (function(win, name, u) {
        var f = win['FiredataAPP'], d = typeof f !== u;
      win[name] = {
          getGUID: function(){if(d) return f.getGUID();},
          getUserId: function(){if(d) return f.getUserId();},
          event: function(cat, action, props){if(d)f.event(cat, action, JSON.stringify(props||{}))}
      };
     })(window, '_fdapp', 'undefined');
      </script>
  </head>
  <body>
  </body>
</html>

然后,就可以调用js中的函数进行埋点了,例如:记录一个事件的写法如下:

<script type="text/javascript">
  //example
 _fdapp.event('/登陆', '密码错误', {'username': 'abc'});
</script>

2.11. Android 其他接口

除了以上接口之外,还提供了其他配置和工具类接口若干。

/**
 * 获取用户GUID
 * @return guid
 */
public static String getGuid()

/**
 * 获取服务器端的配置信息
 * @param key 配置的key,区分大小写
 * @param defaultVal 默认值
 * @return 配置参数
*/
public static Object getConfigParam(String key, Object defaultVal) 

3. FireData iOS SDK

最新版本下载地址:iOS-SDK-v3.0 示例

iOS埋点的机制与Android类似,在埋点时使用到的头文件(FireData.h)函数定义如下:

#import <Foundation/Foundation.h>

@protocol FireDataDelegate <NSObject>

@optional
/* 统计SDK捕获到异常,程序即将崩溃时,回调此函数 */
- (void)onCrash;

/**
 定义协议函数,在SDK内部捕获到对应崩溃事件,并将对应的崩溃事件添加到事件队列后进行对应的事件处理,并将当前获取到的异常信息对象传递
 */
- (void)onCrashAfterAddedToEventArrWithCrashInfo:(NSDictionary *)exception;

@end

@interface FireData : NSObject


+ (FireData *)sharedInstance;

///---------------------------------------------------------------------------------------
/// @name  设置
///---------------------------------------------------------------------------------------

@property (nonatomic, weak) id<FireDataDelegate> delegate;
@property (nonatomic, assign) BOOL debugMode;                   // Debug模式,此时打印调试日志,默认为NO
@property (nonatomic, assign) BOOL enableCrashReport;           // 是否收集APP异常崩溃事件,默认为YES
@property (nonatomic, assign) BOOL enableLocationReport;        // 是否收集地理位置, 默认为NO
@property (nonatomic, assign) int sendTimeInterval;             // check 本地缓存日志间隔,默认为15分钟
@property (nonatomic, assign) int sessionInterval;              // 会话时间间隔,默认为10分钟
@property (nonatomic, assign) int bufferNumber;                 // 日志缓存最高条数限制,默认为50条

@property (nonatomic, strong) NSString *sendBaseUrl;

@property (nonatomic, assign) BOOL enableIDFA;                  // 是否允许获取 IDFA, 默认为允许 YES
@property (nonatomic, assign) BOOL enableIDFV;                  // 是否允许获取 IDFA, 默认为允许 YES
/*
 初始化设置
 */
- (void)initWithAppKey:(NSString *)appKey             // 用户APP的唯一标识
          distributors:(NSString *)channelId;        // app 渠道

///---------------------------------------------------------------------------------------
/// @name  事件
///---------------------------------------------------------------------------------------
/*
 用户登录
 */
- (void)loginWithUserid:(NSString *)uid uvar:(NSDictionary *)uvar;
/*
 用户退出登录
 */
- (void)logout;


/**
 在该页面展示时调用beginLogPageView:,当退出该页面时调用endLogPageView:
 @param pageName 当前所处的页面名称.
 @param attributes pv级作用域的参数, 应包含 cid:cid, cch:channel
 @param cvar 内容额外参数
 @return void.
 */
- (void)beginLogPageView:(NSString *)pageName
              attributes:(NSDictionary *)attributes
                    cvar:(NSDictionary *)cvar;

/**
 必须配对调用beginLogPageView:和endLogPageView:两个函数来完成自动统计,若只调用某一个函数不会生成有效数据。
 在该页面展示时调用beginLogPageView:,当退出该页面时调用endLogPageView:
 @param pageName 统计的页面名称.
 @return void.
 */
- (void)endLogPageView:(NSString *)pageName;

/*
 自定义事件
 @param category 事件分类 (如:Videos, Music, Games...)
 @param action 动作 (如Play, Pause, Duration, Buy)
 @param evar 事件统计参数(json格式)
 @param attributes 额外统计参数(可选,预留,若有值则以 key1=value1&key2=value2的形式加入post参数中)
 @return void.
 */
- (void)eventWithCategory:(NSString *)category
                   action:(NSString *)action
                     evar:(NSDictionary *)evar
               attributes:(NSDictionary *)attributes;

/*
 重置各级作用域的相关参数
 @return void.
 */
- (void)resetUserid:(NSString *)uid
               uvar:(NSDictionary *)uvar
               cvar:(NSDictionary *)cvar
          contentId:(NSString *)cid
         contentCat:(NSString *)cch;

///---------------------------------------------------------------------------------------
/// @name  公用参数
///---------------------------------------------------------------------------------------
- (NSString *)userid;
- (NSString *)guid;
- (NSString *)idfa;
- (NSString *)idfv;
- (NSString *)analyticsSDKVersion;
@end

关于webwiew绑定参见下面的代码:

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import <JavaScriptCore/JSExport.h>

@protocol FiredataJSProtocol <JSExport>
JSExportAs
(event  /** eventWithCategory:action:evar 作为js方法的别名, evar 为 JSON 格式的字符串 */,
 - (void)eventWithCategory:(NSString *)category action:(NSString *)action evar:(NSString *)evar
 );
- (NSString *)getGuid;
- (NSString *)getuserId;

@end

@interface FiredataApp : NSObject <FiredataJSProtocol>

@property (strong, nonatomic) JSContext *context;

/*
 ** 绑定 webview
 ** @param webview 为必选参数
 ** @param prefix 为事件分类前缀,可以为空
 ** @param uvar, cvar, evar, cid, cch 可以为空。为空时保持 FireData sdk 已存储的默认值。若传入新值则更新 sdk 中的对应值。
 */

- (void)bindWebView:(UIWebView *)webView
     categoryPrefix:(NSString *)prefix
               uvar:(NSDictionary *)uvar
               cvar:(NSDictionary *)cvar
               evar:(NSDictionary *)evar
          contentId:(NSString *)cid
         contentCat:(NSString *)cch;
@end
返回顶部