数字广告测量及验证统一SDK、OTT广告测量及验证统一SDK及MMA广告测量通用SDK隐私政策

更新日期:2021年12月2日

前言
为了净化数字广告生态环境,给数字广告测量和验证提供统一性和便利性,规范、促进移动互联网广告市场的健康发展,营造风清气正、真实客观的数据市场环境和“良币驱逐劣币”的广告经营环境,上海亦拓广告有限公司(以下简称“我们”)协调多家行业媒体和第三方广告测量及验证服务提供商(以下简称“第三方”),在共同讨论和努力下,协作开发并推出了开源和全行业通用的 “数字广告测量及验证统一SDK”、“OTT广告测量及验证统一SDK”、“MMA广告测量通用SDK”(以下统称“SDK”)。SDK对全行业开源并免费使用。

我们非常重视用户的隐私保护和个人信息保护,我们希望通过本隐私政策向您介绍我们对用户的个人信息的处理方式,清晰、准确和完整地说明SDK采集哪些信息,如何处理这些信息,以及我们提供的控制、保护这些信息的方式。
本政策与您的权益息息相关,请仔细完整的阅读并了解SDK在使用过程中隐私保护与数据安全的合规性及相关标准的资质认证。

本隐私政策将帮助您了解以下内容:
一、 SDK的使用者
二、 SDK采集的信息
三、 信息的处理
四、 信息的安全
五、 其他
六、 第三方公司及其隐私政策
七、 变更
八、 联系我们

一、 SDK的使用者
通常,SDK由媒体植入自己的App或者OTT终端内,并由媒体选择配置第三方,从而实现广告测量及验证的作用。另外,SDK采集到的数据在第三方、广告主、广告代理商同时取得用户授权的前提下,可能会由第三方提供给广告主或者广告代理商。

在媒体进行SDK接入测试之前,需要提供相关的必要信息。例如:企业信息及联系人的电话号码、电子邮箱等数据用于业务的开展和问题的反馈。用户在使用媒体App或者OTT终端时应仔细阅读媒体和第三方的隐私政策。

SDK根据媒体的配置采集、处理、临时存储并向媒体选择的第三方发送广告测量和验证所需要的数据信息,第三方对信息收取、处理参照第三方的隐私政策的规定,在已经查看并接受其隐私政策之前,请谨慎选择和配置第三方信息。需要特别说明的是,我们本身并不采集、处理任何数据,媒体和其选择的第三方也不会与我们共享相关数据。

未经我们书面许可,任何使用者不得对SDK进行全部或部分分解、修改其他破坏完整性的行为。

二、 SDK采集的信息
1. 用户的设备硬件信息,包括:用户的移动设备和智能电视配置信息和设备标识码,包括硬件类型(机型)、屏幕尺寸、IMEI、MAC、 IDFA、AAID、OAID。
2. 用户设备系统信息,包括:操作系统类型、操作系统版本号。
3. 用户设备网络信息,包括:接入的WIFI信息(名称、BSSID)。
4. 用户设备定位信息,包括:经维度。
5. 广告可见性信息,包括:广告开始渲染(BtR)、可见曝光区域、广告曝光详细时间片信息。
6. 媒体信息,包括:软件唯一标识符名称、软件版本、签名字符串。
以上信息中, IMEI、MAC、 IDFA/AAID、OAID、操作系统类型是为了实现广告测量,第三方必须采集项;其余是可选采集项,可由媒体在征得用户授权的情况下自行选择是否采集,具体请查阅媒体和第三方的隐私政策。

三、 信息的处理
1. 采集的信息原则上可以仅存储于用户设备的内存中,实时发送到广告测量和验证服务的服务器中,之后内存中临时存储的对应数据会被删除。
2. 为了保证采集信息的连续性和安全,内存中的数据可以同时在当前用户媒体的沙箱中保存一个副本作为本地临时存储,防止因为程序关闭或设备关闭造成的采集数据丢失,以保证采集信息在未发送到广告测量和验证服务的服务器前是安全有效的。
3. 当用户媒体关闭后被再次被打开时,位于临时本地存储的采集信息会被加载到内存中根基规则继续向广告测量和验证服务的服务器发送。
4. 采集信息直到被成功的发送到广告测量和验证服务的服务器后,位于内存中的临时存储和位于本地的临时存储会被立即删除。如果采集信息发送失败则会在下一个发送周期内尝试发送。

四、 信息的安全
1. 我们努力为用户的信息安全提供保障,以防止信息的丢失、不当使用、被窃取或篡改。
2. 我们将在合理的安全水平内使用各种安全保护措施以保障信息的安全。例如,我们会使用加密技术(例如,签名、SSL)、匿名化处理等手段来保护用户的个人信息。
3. 我们将主动申请第三方安全评估机构的安全及隐私风险的分析,审核SDK的安全性控制措施,并邀请有意愿的媒体一起对SDK进行各项测试。
4. 我们会尽力保护用户的个人信息。
5. SDK对用户的敏感信息进行MD5加密。
6. 媒体可以通过变更服务器设置的方式随时关闭我们的SDK。

五、 其他
1. 在使用SDK时,媒体和第三方须遵守中华人民共和国法律法规,包括但不限于关于数据隐私保护的相关法律法规。因我们并不采集、处理任何数据并且媒体和第三方也并不会与我们共享任何数据,因此如果媒体和第三方使用SDK过程中违反法律法规或损害任何其他方的合法权益的,由媒体和第三方承担赔偿责任。
2. 在获得用户的个人信息之前,通过 SDK可能获得个人信息的相关方,如第三方、媒体、广告主、广告代理商均须通过用户的主动授权同意。
3. 若用户要求停止搜集其个人信息,媒体应当停止对该用户的信息采集。
4. 通过SDK可能获得个人信息的相关方,如第三方、媒体、广告主、广告代理商,须按照法律法规规定,将境内收集的用户个人信息存储于中国境内。不得从中国境内转移到境外。

六、 第三方公司及其隐私政策
秒针系统:https://www.miaozhen.com/cn/privacy
上海腾徽软件科技有限公司:https://rtbasia.com/privacy/
尼洱市场研究(上海)有限公司:https://www.in-neo.com/privacy.html
北京国双科技有限公司:https://gridsum.com/policy.html
北京腾云天下科技有限公司:https://www.talkingdata.com/privacy.jsp?languagetype=zh_cn

七、 变更
基于我们业务发展、产品功能、联系方式或相关法律法规及监管的要求,我们可能会适时对本政策进行修改更新,该等修改构成本《隐私政策》的一部分。我们将在网站上发布更新后的隐私政策,您可以随时前往我们的网站查看更新后的《隐私政策》:https://mmachina.cn/

八、 联系我们
如您对本《隐私政策》及您的个人信息相关事宜有任何疑问、意见或建议,请通过以下方式与我们取得联系:
联系邮箱: mma@mmachina.cn
联系地址:上海市徐汇区云锦路600号12A

关于MMA SDK
为了净化数字广告生态环境,规范并为数字广告测量和验证提供统一性和便利性,在多家行业媒体和第三方测量公司的共同讨论和努力下协作开发并推出了开源和全行业通用的MMA SDK,既满足了行业第三方广告测量公司的测量需求,同时SDK内部的调用方法保持一致,也降低了开发成本。

MMA广告测量通用SDK(2013年7月发布)
开发维护组:优酷土豆、爱奇艺、腾讯、搜狐视频、精硕科技和秒针系统;
验证组:联合利华、百胜中国、品迪、亿动广告传媒、秒针系统、PP视频
和优酷土豆。

数字广告测量及验证统一SDK(2018年1月发布)
开发组:组长秒针系统,副组长上海腾徽软件科技有限公司,组员尼尔森;
测试组:组长亿动广告传媒,副组长荷格科技、尼尔森;
评估组:组长尼尔森,副组长央视市场研究,组员宝洁。

OTT广告测量及验证统一SDK(2020年9月发布)
开发组:组长秒针系统,组员上海腾徽软件科技有限公司、央视市场研究;
测试组:组长国双,组员勾正数据;
评估组:组长尼尔森,组员央视市场研究。

OTT广告测量及验证统一SDK

OTT广告测量及验证统一SDK

以下为 OTT广告测量及验证统一SDK 压缩包中 README.md 文件内容:

#数字广告测量及验证OTT SDK (Android) 部署指南

##适用范围

Android OTT SDK适用于 Android 4.0.3(API Level 15)及以上的设备。

集成SDK

步骤1: 导入SDK

请根据所用IDE选择导入方式:

Eclipse ADT

将 SDK 中的 jar 文件拷贝到工程的 libs 文件夹中:右键选择jar包 –> Build Path –> Add to Build Path

Android Studio

  1. 在 Android Studio 项目的 app 文件夹中,新建 libs 文件夹。
  2. 将 SDK jar 文件拷贝到新建的 libs 文件夹中。
  3. 修改 app 文件夹中的 build.gradle 文件,添加 dependencies 依赖项:
dependencies {
      …
      implementation files('libs/mmachina_ott_sdk.jar') 
      …
  }

####导入签名库

将SDK中的 libMMASignature.so 文件拷贝到工程 libs/armeabi 目录下, SDK lib_abi 目录下对应不同CPU架构下的库文件,建议拷贝该目录下所有到工程 app/libs 文件夹下,如果考虑APK大小,至少要包含主流架构:armeabiarmeabi-v7aarm64-v8a

导入离线配置

sdkconfig.xml 配置文件拷贝到工程的 assets 目录下,在网络不好或者离线状态下读取缺省配置可以正常测量。同时 配置文件 上传到 web 服务器,使其可以通过 web 方式访问,便于后期灵活远程变更配置。

配置权限

常规权限

满足基本测量需要如下权限:

权限 用途
INTERNET 允许程序联网和上报测量数据。
ACCESS_NETWORK_STATE 允许检测网络连接状态,在网络异常状态下避免数据发送,节省流量和电量。
READ_PHONE_STATE 允许访问手机设备的信息,通过获取的信息来唯一标识用户。
ACCESS_WIFI_STATE 允许读取WiFi相关信息,在合适的网络环境下更新配置。
扩展权限

在基本测量的基础上,如果想要回传位置相关信息,除了测量代码对应sdkconfigCompany标签的项设置为true,还额外需要如下权限:

权限 用途
ACCESS_FINE_LOCATION 通过GPS方式获取位置信息。
ACCESS_COARSE_LOCATION 通过WiFi或移动基站的方式获取位置信息。

示例代码

<!--?xml version="1.0" encoding="utf-8"?-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="cn.com.mma.ott.tracking.demo">
    <!-- SDK 所需常规权限 -->
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
     <!-- 如果获取位置信息,需要声明以下权限 -->
     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
     <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<application ......>
  <activity ......>
  ......
  </activity>
    </application>
</manifest>

步骤2:使用方法

引入类

在您需要使用 SDK 测量功能的类中,import 相关类:

import cn.com.mma.ott.tracking.api.Countly;

SDK初始化

接口定义:

public void init(Context context, String configURL)

参数说明:

参数 类型 说明
context Context APP or Activity 上下文
configURL String 更新sdkconfig配置的远程地址

代码示例:在您的工程中的 Application 或者 Activity 中的 onCreate 中添加如下代码:

Countly.sharedInstance().init(this, "sdkconfig远程地址");

####曝光测量

SDK曝光测量接口现已升级为曝光/Track Ads接口, 支持曝光或Tracked Ads测量。

曝光的定义:只有广告物料已经加载在客户端并至少已经开始渲染(Begin to render,简称BtR)时,才应称之为“曝光”事件。
“渲染”指的是绘制物料的过程,或者指将物料添加到文档对象模型的过程。

接口定义:

public  void onExpose(String adURL,View adview,int type)

参数说明:

参数 类型 说明
adURL String 广告位曝光测量代码
adview View 广告展示视图对象
type int 0 代表Tracked Ads测量; 1 代表曝光

示例代码:

Countly.sharedInstance().onExpose("http://example.com/axxx,bxxxx,c2,i0,h",adview,1);

广告曝光延时上报测量

接口定义:

public void onDelayExpose(String adURL, long delayTime)

参数说明:

参数 类型 说明
adURL String 广告位曝光测量代码
delayTime long SDK延时广告曝光测量的情况下,广告实际发生的时间

SDK提供延时测量的功能,需要传入广告实际发生的时间,延时上报用于满足特定情形下的需求,即,广告发生时,SDK可能尚未启动、设备也可能尚未联网。因此提供一个延时曝光上报接口,在调用该接口时需要传入广告实际发生时间,用来完成广告延时上报。
示例代码:


String adURL = "http://vxyz.miaozhen.com.cn/w/a86218,b1778712,c2343,i0,m202,8a2,8b2,2j,h";
long delayTime  = 1570798938;
//调用延时上报接口
Countly.sharedInstance().onDelayExpose(TRACKING_URL, delayTime);

点击测量

接口定义:

public  void onClick(String adURL)

参数说明:

参数 类型 说明
adURL String 广告位点击测量代码

示例代码:

Countly.sharedInstance().onClick("http://example.com/axxx,bxxxx,c3,i0,h");

可见性曝光测量

描述:对广告进行可见性测量时,广告必须是满足开始渲染(Begin to render,简称BtR)条件的合法曝光,否则SDK不会执行可见测量。
在调用可见曝光测量接口时,SDK会查验传入的广告View对象是否已开始渲染,如果是,则SDK会向测量方发出曝光上报,并继续进行可见测量,直到满足可见/不可见条件,再结束可见测量流程;如果不是,则SDK会向测量方发出Tracked Ads上报,并结束可见测量流程。

接口定义:

public  void onExpose(String adURL, View adView)

参数说明:

参数 类型 说明
adURL String 广告位曝光测量代码
adView View 广告展示视图对象

注意:对于需要可见性曝光的广告测量,第二个参数(View)为必选项,且需要传入当前广告展示的视图对象,否则可能造成SDK无法成功可见性曝光测量。

示例代码:

Countly.sharedInstance().onExpose("http://vxyz.miaozhen.com.cn/w/a86218,b1778712,c2343,i0,m202,8a2,8b2,2j,h",adview);

可见性视频曝光测量

接口定义:

public void onVideoExpose(String adURL, View videoView, int videoPlayType)

参数说明:

参数 类型 说明
adURL String 广告位曝光测量代码
videoView View 视频广告展示视图对象
videoPlayType int 视频播放类型
1-自动播放,2-手动播放,0-无法识别

注意:对于需要可见性视频曝光的广告测量,第二个参数(View)为必选项,需要传入当前广告展示的视图对象且测量代码需要配置视频时长及进度测量点,否则可能造成SDK无法成功可见性视频曝光测量。

示例代码:

        String adURL = "http://v.miaozhen.com.cn/i/a90981,b1899468,c2,i0,m202,8a2,8b2,2p,2u2,2g,2f=3,2v50,2w15,2x0010,va1,2a2p,2j,2d1234,h";
        Countly.sharedInstance().onVideoExpose(adURL, adView, 2);

停止可见性测量

接口定义:

public void stop(String adURL)

参数说明:

参数 类型 说明
adURL String 广告位曝光测量代码

SDK提供主动关闭可见性测量的功能,需要传入已经开启可见性测量的广告位曝光测量代码,如果传入错位的测量代码可能导致停止不生效。

示例代码:

        String adURL = "http://vxyz.miaozhen.com.cn/w/a86218,b1778712,c2343,i0,m202,8a2,8b2,2j,h";
        Countly.sharedInstance().onExpose(adURL, adView);
        new Handler().postDelayed(new Runnable(){
            public void run() {
                //5s后停止测量
                Countly.sharedInstance().stop(adURL);
            }
        }, 5000);

调试模式

调试模式下,SDK会有LOG输出,APP发布时建议不要开启。(请在初始化之前设置Log开关,默认为false)。

接口定义:

public void setLogState(boolean debugmode)

参数说明:

参数 类型 说明
debugmode boolean true为打开SDK Log, false为关闭SDK Log

示例代码:

Countly.sharedInstance().setLogState(true);

释放内存

SDK提供释放内存的接口,一般在应用即将退出时调用,或者等待系统内存管理自动释放。

接口定义:

public  void terminateSDK()

示例代码:

Countly.sharedInstance().terminateSDK();

混淆配置

如果开发者的应用需要混淆,请在 Proguard 混淆配置文件中增加以下规则,以避免 SDK 不可用。

# SDK用到了v4包里的API,请确保v4相关support包不被混淆
-keep class android.support.v4.** { *; }
-dontwarn android.support.v4.**

步骤3:验证和调试

SDK 的测试有两个方面:

  1. 参数是否齐全,URL 拼接方式是否正确。
  2. 请求次数和第三方测量平台是否能对应上。

请联系第三方测量平台完成测试。

数字广告测量及验证统一SDK(iOS)

数字广告测量及验证统一SDK(iOS)

 

# 数字广告测量及验证统一SDK (iOS) 部署指南

### 步骤1:添加iOS SDK 到工程中
1. [点此下载](http://event.mmachina.cn/download/1401.html) (下载内容为:测量及验证统一SDK (iOS) 安装包)iOS SDK (如需浏览此开源项目和 demo 工程请到 https://gitee.com/MMAChinaSDK 注册账号)
2. 将SDK发布文件中,release目录下的**MobileTracking.h** 、**libMobileTracking.a**、**sdkconfig.xml** 三个文件拷贝到项目工程中,将 **sdkconfig.xml** 上传到 web 服务器,使其可以通过 web 方式访问,假设其地址为 **http://xxxxxx.com/sdkconfig.xml**(其后会用到)。
3. 在项目工程 App 的 Target Build Settings 中的 **Other Linker Flags** 选项里添加 **-lxml2** **-all_load** 或 **-lxml2** **-force_load** 静态库的绝对路径
4. 添加SDK需要的Framework
   在需要添加SDK的项目的 Xcode 开发环境中选择 TARGETS–>Build Phases–>Link Binary With Libraries–> + 添加以下framework框架:
“`
    CoreLocation.framework
    libxml2.2.tbd
AdSupport.framework
CoreTelephony.framework
  SystemConfiguration.framework
“`
### 步骤2:使用方法
在使用的文件中引用
**#import “MobileTracking.h”**.
使用说明:
#### 1、初始化方法
在进行测量之前,必须进行初始化,通过以上的代码进行初始化操作
“`
[MobileTracking sharedInstance]
“`
#### 2、配置远程配置文件地址方法
SDK 会自动下载远程的配置文件,使用最新的配置文件进行参数的组装。
“`
[[MobileTracking sharedInstance] configFromUrl:@“http://xxxxxx.com/sdkconfig.xml”];
“`
#### 3、曝光的测量
通过调用以下的代码进行曝光的测量,
– view:参数为第三方公司的测量地址
– ad:参数为当前广告视图对象(**可视化广告测量为必传字段,普通广告测量默认缺省。**)
– videoPlayType:参数为当前视频广告的播放类型(**视频可视化广告测量为可选字段,1-自动播放,2-手动播放,0-无法识别。**)
– impressionType:参数为曝光的类型。(**普通广告测量的类型为必选字段,0-Tracked ads,1-曝光**)
3.1 曝光测量
“`
// impressionType=1 表示这是曝光测量。此时如果传0,表示这是Tracked ads测量
[[MobileTracking sharedInstance] view:@”http://example.com/xxxxxx” ad:adView impressionType:1];
“`
  备注:SDK曝光测量接口现已升级为曝光/Track Ads接口, 支持曝光或Tracked Ads测量。
    1、曝光的定义:只有广告物料已经加载在客户端并至少已经开始渲染(Begin to render,简称BtR)时,才应称之为“曝光”事件。“渲染”指的是绘制物料的过程,或者指将物料添加到文档对象模型的过程。
    2、Tracked Ads的定义:当测量代码已经下载到客户端时(即便广告不一定渲染),称该事件为“Tracked Ads”事件。
    开发者应根据广告实际展示情况,选择调用曝光或Tracked Ads测量,详细调用过程如上面的示例。如果进行曝光调用,则SDK会查验传入的广告View对象是否已开始渲染,如果是,则SDK会向测量方发出曝光上报;如果不是,则SDK会向测量方发出Tracked Ads上报。如果进行Tracked Ads调用,则SDK会直接向测量方发出Tracked Ads上报。
3.2 可见性广告测量
“`
[[MobileTracking sharedInstance] view:@”http://example.com/xxxxxx” ad:adview];
“`
   备注:对广告进行可见性测量时,广告必须是满足开始渲染(Begin to render,简称BtR)条件的合法曝光,否则SDK不会执行可见测量。在调用可见曝光测量接口时,SDK会查验传入的广告View对象是否已开始渲染,如果是,则SDK会向测量方发出曝光上报,并继续进行可见测量,直到满足可见/不可见条件,再结束可见测量流程;如果不是,则SDK会向测量方发出Tracked Ads上报,并结束可见测量流程。
3.3 视频可见性广告测量
“`
[[MobileTracking sharedInstance] viewVideo:@”http://example.com/xxxxxx” ad:adview videoPlayType:type];
“`
3.4 可见性广告JS测量
“`
[[MobileTracking sharedInstance] jsView:@”http://example.com/xxxxxx” ad:adview];
“`
3.5 视频可见性广告JS测量
“`
[[MobileTracking sharedInstance] jsViewVideo:@”http://example.com/xxxxxx” ad:adview];
“`
3.6 可见性广告测量停止,广告播放结束时调用
“`
[[MobileTracking sharedInstance] stop:@”http://example.com/xxxxxx”];
“`
#### 4、点击测量
通过调用以下的代码进行点击的测量,参数为第三方公司的测量地址
“`
[[MobileTracking sharedInstance] click:@”http://example.com/xxxxxx”];
“`
#### 5、进入后台时调用
主要用于保存当前测量数据,不被丢失。建议放在AppDelegate的applicationDidEnterBackground方法中
“`
[[MobileTracking sharedInstance] didEnterBackground];
“`
#### 6、回到前台时调用
重新读取缓存数据,主要用于保证当前测量数据,及时上报,建议放在AppDelegate的applicationWillEnterForeground方法中
“`
[[MobileTracking sharedInstance] didEnterForeground];
“`
#### 7、应用结束时调用
主要用于保存当前测量数据,不被丢失。
“`
[[MobileTracking sharedInstance] willTerminate];
“`
#### 7、开启调试日志
建议在测试时候打开
“`
[[MobileTracking sharedInstance] enableLog:YES];
“`
### 步骤3:验证和调试
SDK 的测试有两个方面:
1. 参数是否齐全,URL 拼接方式是否正确
2. 请求次数和第三方测量平台是否能对应上
请联系第三方测量平台完成测试

数字广告测量及验证统一SDK(Android)

数字广告测量及验证统一SDK(Android)

 

# 数字广告测量及验证统一SDK (Android) 部署指南

## 适用范围
  Android SDK适用于 **Android 2.3.3(API Level 10)**及以上的设备。
  ## 集成SDK
  ### 步骤1: 导入SDK
  [点此下载](http://event.mmachina.cn/download/1402.html) (下载内容:测量及验证统一SDK (Android) 安装包)Android SDK (如需浏览此开源项目和 demo 工程请到 https://gitee.com/MMAChinaSDK 注册账号)
  请根据所用IDE选择导入方式:
  #### Eclipse ADT
  将 SDK 中的  `jar` 文件拷贝到工程的 `libs` 文件夹中:右键选择jar包 **–>** **Build Path –> Add to Build Path**。
#### Android Studio
1. 在 Android Studio 项目的 `app` 文件夹中,新建 `libs` 文件夹。
2. 将 SDK `jar` 文件拷贝到新建的 `libs` 文件夹中。
3. 修改 `app` 文件夹中的 `build.gradle` 文件,添加 `dependencies` 依赖项:
“`
dependencies {
      …
      implementation files(‘libs/mmachina_sdk.jar’)
      …
  }
“`
#### 导入签名库
将SDK中的 `libMMASignature.so`  文件拷贝到工程 `libs/armeabi` 目录下, SDK `lib_abi` 目录下对应不同CPU架构下的库文件,建议拷贝该目录下所有到工程 **app/libs **文件夹下,如果考虑APK大小,至少要包含主流架构:`armeabi`、`armeabi-v7a`、`arm64-v8a`。
#### 导入离线配置
将 `sdkconfig.xml` 配置文件拷贝到工程的 `assets` 目录下,在网络不好或者离线状态下读取缺省配置可以正常测量。同时 **配置文件** 上传到  web 服务器,使其可以通过 web 方式访问,便于后期灵活远程变更配置。
#### 配置权限
##### 常规权限
满足基本测量需要如下权限:
| 权限                 | 用途                                                         |
| ——————– | ———————————————————— |
| INTERNET             | 允许程序联网和上报测量数据。                                 |
| ACCESS_NETWORK_STATE | 允许检测网络连接状态,在网络异常状态下避免数据发送,节省流量和电量。 |
| READ_PHONE_STATE     | 允许访问手机设备的信息,通过获取的信息来唯一标识用户。       |
| ACCESS_WIFI_STATE    | 允许读取WiFi相关信息,在合适的网络环境下更新配置。           |
##### 扩展权限
在基本测量的基础上,如果想要回传**位置相关信息**,除了测量代码对应**sdkconfig**内**Company**标签的<isTrackLocation>项设置为**true**,还额外需要如下权限:
| 权限                   | 用途                                   |
| ———————- | ————————————– |
| ACCESS_FINE_LOCATION   | 通过GPS方式获取位置信息。              |
| ACCESS_COARSE_LOCATION | 通过WiFi或移动基站的方式获取位置信息。 |
示例代码
“`
<!–?xml version=”1.0″ encoding=”utf-8″?–>
<manifest xmlns:android=”http://schemas.android.com/apk/res/android”
    package=”cn.com.mma.mobile.tracking.demo”>
    <!– SDK 所需常规权限 –>
    <uses-permission android:name=”android.permission.INTERNET” />
    <uses-permission android:name=”android.permission.ACCESS_NETWORK_STATE” />
    <uses-permission android:name=”android.permission.READ_PHONE_STATE” />
    <uses-permission android:name=”android.permission.ACCESS_NETWORK_STATE”/>
  <!– 如果获取位置信息,需要声明以下权限 –>
  <uses-permission android:name=”android.permission.ACCESS_FINE_LOCATION”/>
  <uses-permission android:name=”android.permission.ACCESS_COARSE_LOCATION”/>
<application ……>
  <activity ……>
  ……
  </activity>
    </application>
</manifest>
“`
### 步骤2:使用方法
#### 引入类
在您需要使用 SDK 测量功能的类中,**import** 相关类:
“`
import cn.com.mma.mobile.tracking.api.Countly;
“`
#### SDK初始化
接口定义:
“`
public void init(Context context, String configURL)
“`
参数说明:
| 参数      | 类型    | 说明                        |
| ——— | ——- | ————————— |
| context   | Context | APP or Activity 上下文      |
| configURL | String  | 更新sdkconfig配置的远程地址 |
代码示例:在您的工程中的 Application 或者 Activity 中的 **onCreate** 中添加如下代码:
“`
Countly.sharedInstance().init(this, “sdkconfig远程地址”);
“`
#### 曝光测量
SDK曝光测量接口现已升级为曝光/Track Ads接口, 支持曝光或Tracked Ads测量。
曝光的定义:只有广告物料已经加载在客户端并至少已经开始渲染(Begin to render,简称BtR)时,才应称之为“曝光”事件。
“渲染”指的是绘制物料的过程,或者指将物料添加到文档对象模型的过程。
接口定义:
“`
public  void onExpose(String adURL,View adview,int type)
“`
参数说明:
| 参数   | 类型   | 说明                               |
| —— | —— | ———————————- |
| adURL  | String | 广告位曝光测量代码                 |
| adview | View   | 广告展示视图对象                   |
| type   | int    | 0 代表Tracked Ads测量; 1 代表曝光 |
示例代码:
“`
Countly.sharedInstance().onExpose(“http://example.com/axxx,bxxxx,c2,i0,h”,adview,1);
“`
#### 点击测量
接口定义:
“`
public  void onClick(String adURL)
“`
参数说明:
| 参数  | 类型   | 说明               |
| —– | —— | —————— |
| adURL | String | 广告位点击测量代码 |
示例代码:
“`
Countly.sharedInstance().onClick(“http://example.com/axxx,bxxxx,c3,i0,h”);
“`
#### 可见性曝光测量
描述:对广告进行可见性测量时,广告必须是满足开始渲染(Begin to render,简称BtR)条件的合法曝光,否则SDK不会执行可见测量。
在调用可见曝光测量接口时,SDK会查验传入的广告View对象是否已开始渲染,如果是,则SDK会向测量方发出曝光上报,并继续进行可见测量,直到满足可见/不可见条件,再结束可见测量流程;如果不是,则SDK会向测量方发出Tracked Ads上报,并结束可见测量流程。
接口定义:
“`
public  void onExpose(String adURL, View adView)
“`
参数说明:
| 参数   | 类型   | 说明               |
| —— | —— | —————— |
| adURL  | String | 广告位曝光测量代码 |
| adView | View   | 广告展示视图对象   |
注意:对于需要可见性曝光的广告测量,第二个参数(**View**)为必选项,且需要传入当前广告展示的视图对象,否则可能造成SDK无法成功可见性曝光测量。
示例代码:
“`
Countly.sharedInstance().onExpose(“http://vxyz.admaster.com.cn/w/a86218,b1778712,c2343,i0,m202,8a2,8b2,2j,h”,adview);
“`
#### 可见性视频曝光测量
接口定义:
“`
public void onVideoExpose(String adURL, View videoView, int videoPlayType)
“`
参数说明:
| 参数          | 类型   | 说明                                               |
| ————- | —— | ————————————————– |
| adURL         | String | 广告位曝光测量代码                                 |
| videoView     | View   | 视频广告展示视图对象                               |
| videoPlayType | int    | 视频播放类型<br>1-自动播放,2-手动播放,0-无法识别 |
注意:对于需要可见性视频曝光的广告测量,第二个参数(**View**)为必选项,需要传入当前广告展示的视图对象且测量代码需要配置**视频时长及进度测量点**,否则可能造成SDK无法成功可见性视频曝光测量。
示例代码:
“`
        String adURL = “http://v.admaster.com.cn/i/a90981,b1899468,c2,i0,m202,8a2,8b2,2p,2u2,2g,2f=3,2v50,2w15,2×0010,va1,2a2p,2j,2d1234,h”;
        Countly.sharedInstance().onVideoExpose(adURL, adView, 2);
“`
#### 停止可见性测量
接口定义:
“`
public void stop(String adURL)
“`
参数说明:
| 参数  | 类型   | 说明               |
| —– | —— | —————— |
| adURL | String | 广告位曝光测量代码 |
SDK提供主动关闭可见性测量的功能,需要传入**已经开启可见性测量的广告位曝光测量代码**,如果传入错位的测量代码可能导致停止不生效。
示例代码:
“`
        String adURL = “http://vxyz.admaster.com.cn/w/a86218,b1778712,c2343,i0,m202,8a2,8b2,2j,h”;
        Countly.sharedInstance().onExpose(adURL, adView);
        new Handler().postDelayed(new Runnable(){
            public void run() {
                //5s后停止测量
                Countly.sharedInstance().stop(adURL);
            }
        }, 5000);
“`
#### 可见性曝光JS测量
接口定义:
“`
public void onJSExpose(String adURL, View adView)
public void onJSVideoExpose(String adURL, View adView)
“`
参数说明:
| 参数   | 类型   | 说明               |
| —— | —— | —————— |
| adURL  | String | 广告位曝光测量代码 |
| adView | View   | 广告展示视图对象   |
SDK提供通过 `JS方式` 对广告进行可见性测量,需要在 `sdkconfig` 添加JS测量配置,且需要传入当前广告展示的视图对象,否则可能造成SDK无法进行可见性曝光JS测量。
示例代码:
“`
String adURL = “http://vxyz.admaster.com.cn/w/a86218,b1778712,c2343,i0,m202,8a2,8b2,2j,h”;
Countly.sharedInstance().onJSExpose(adURL, adView);
Countly.sharedInstance().onJSVideoExpose(adURL, adView);
“`
#### 调试模式
调试模式下,SDK会有LOG输出,APP发布时建议不要开启。(请在**初始化之前设置Log开关**,默认为false)。
接口定义:
“`
public void setLogState(boolean debugmode)
“`
参数说明:
| 参数      | 类型    | 说明                                   |
| ——— | ——- | ————————————– |
| debugmode | boolean | true为打开SDK Log, false为关闭SDK Log |
示例代码:
“`
Countly.sharedInstance().setLogState(true);
“`
#### 释放内存
SDK提供释放内存的接口,一般在应用即将退出时调用,或者等待系统内存管理自动释放。
接口定义:
“`
public  void terminateSDK()
“`
示例代码:
“`
Countly.sharedInstance().terminateSDK();
“`
#### 混淆配置
如果开发者的应用需要混淆,请在 `Proguard` 混淆配置文件中增加以下规则,以避免 SDK 不可用。
“`
# SDK用到了v4包里的API,请确保v4相关support包不被混淆
-keep class android.support.v4.** { *; }
-dontwarn android.support.v4.**
“`
### 步骤3:验证和调试
SDK 的测试有两个方面:
1. 参数是否齐全,URL 拼接方式是否正确。
2. 请求次数和第三方测量平台是否能对应上。
请联系第三方测量平台完成测试。

MMA广告测量 通用 SDK (Android)

MMA广告测量 通用 SDK (Android)

 

MMA 通用 SDK 说明文档

MMA Android SDK 部署指南

步骤1:添加 MMA Android SDK 到工程中

  1. 点此下载MMA Android SDK (如需浏览此开源项目和 demo 工程请到http://git.oschina.net/注册账号后邮件联系 fuliuwei@admaster.com.cn)
  2. 将 MMA SDK 的 mma_android_sdk_v1.3.3.jar 拷贝到 libs 目录下并添加为 JAR 包;
  3. 将libMMANDKSignature.so 拷贝到 libs\armeabi 目录下;
  4. 把sdkconfig.xml配置文件拷贝到工程里的assets目录下,同时将 sdkconfig.xml 上传到 web 服务器,使其可以通过 web 方式访问,假设其地址为 CONFIG_URL(其后会用到)。

对于Eclipse工程,请参照下面的步骤添加 JAR 包:

  1. 在 “Package Explorer” 窗口中右击你的工程并选择 “Properties”
  2. 在左侧面板中选择 “Java Build Path”
  3. 在主窗口中选择 “Libraries”页签
  4. 点击“Add JARs…”按钮
  5. 选择您拷贝到libs目录下的 mma_sdk.jar
  6. 点击 “OK” 完成添加。

步骤2:修改 AndroidManifest.xml 文件

修改 AndroidManifest.xml 文件,新增网络连接请求和读取手机状态的权限:

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="android.permission.READ_PHONE_STATE" />

步骤3:为广告添加测量代码

在有广告测量需求的 Activity 中的 onStart() 方法中调用 Countly.sharedInstance().init(this, CONFIG_URL); 进行初始化,其中 CONFIG_URL 为远程配置文件的地址,当广告产生曝光时,控制触发以下代码

String TEST_TRACKING_URL = "http://admaster.mobi/android/log/a222,c123,b132,";//TEST_TRACKING_URL 为对应的曝光代码  
Countly.sharedInstance().onExpose(TEST_TRACKING_URL);

当广告被点击时,控制触发以下代码

String TEST_TRACKING_URL = "http://admaster.mobi/android/log/a222,c123,b132,";//TEST_TRACKING_URL 为对应的曝光代码
Countly.sharedInstance().onClick(TEST_TRACKING_URL); 

代码示例(具体请见 demo 项目源码)

package com.mmandroid_demo;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import cn.com.mma.mobile.tracking.api.Countly;
import cn.com.mma.mobile.tracking.util.Logger;
/**
 * 此工程是为使用SDK的用户提供的demo
 * 
 * @author lincoln
 * 
 */
public class MainActivity extends Activity {
 int count = 0;
/**
 * sdkconfig.xml配置文件服务器存放地址
 */
 public static final String CONFIG_URL = "http://admaster.mobi/sdkconfig.xml";
 /**
 * 点击测量地址
 */
 public static final String TEST_TRACKING_URL = "http://admaster.mobi/android/log/a222,c123,b132,";
@Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
/**
 * 初始化SDK
 */
 Countly.sharedInstance().init(this, CONFIG_URL);
}
/**
 * 点击广告,发送消息
 */
 public void sendClickMsg(View view) {
 Countly.sharedInstance().onClick(TEST_TRACKING_URL);
 }
 /**
 * 曝光广告,发送消息
 */
 public void sendExposeMsg(View view) {
 Countly.sharedInstance().onExpose(TEST_TRACKING_URL);
 }
}

步骤4:验证和调试

SDK 的测试有两个方面:

  1. 参数是否齐全,URL 拼接方式是否正确
  2. 请求次数和第三方测量平台是否能对应上

针对第一点,使用 Admaster SDK 测试平台进行测试和验证,登入 http://developer.admaster.com.cn/, 根据页面上的提示进行调用, 页面会实时显示出服务器接收到的信息,如果和本地的设备相关信息一致,则表示测试通过。

针对第二点,建议使用第三方测量系统的正式环境进行测试,主要对比媒体自身广告系统测量数据和第三方测量数据数量上的差异。

MMA广告测量 通用 SDK (iOS)

MMA广告测量 通用 SDK (iOS)

 

MMA 通用 SDK 说明文档

MMA iOS SDK 部署指南

步骤1:添加 MMA iOS SDK 到工程中

  1. 点此下载MMA iOS SDK (如需浏览此开源项目和 demo 工程请到http://git.oschina.net/注册账号后邮件联系 fuliuwei@admaster.com.cn)
  2. 将SDK发布文件中,release目录下的MobileTracking.hlibMobileTracking.asdkconfig.xml三个文件拷贝到项目工程中,将 sdkconfig.xml 上传到 web 服务器,使其可以通过 web 方式访问,假设其地址为 http://xxxxxx.com/sdkconfig.xml(其后会用到)。
  3. 在项目工程 App 的 Target Build Settings 中的 Other Linker Flags 选项里添加 -lxml2 -all_load-lxml2 -force_load静态库的绝对路径

步骤2:配置文件sdkconfig.xml的使用方法

在使用的文件中引用 #import “MobileTracking.h”.

使用说明:

1、初始化方法

[MobileTracking sharedInstance]

在进行测量之前,必须进行初始化,通过以上的代码进行初始化操作,建议放在AppDelegate的didFinishLaunchingWithOptions方法中。

2、配置远程配置文件地址方法

[[MobileTracking sharedInstance] configFromUrl:@“http://xxxxxx.com/sdkconfig.xml”];

SDK 会自动下载远程的配置文件,使用最新的配置文件进行参数的组装。

3、点击和曝光的测量

通过调用以下的代码进行曝光的测量,参数为第三方公司的测量地址

[[MobileTracking sharedInstance] view:@"http://vxyz.admaster.com.cn/v/a17298,b81949763,c3194,i0,m201”];

通过调用以下的代码进行点击的测量,参数为第三方公司的测量地址

[[MobileTracking sharedInstance] click:@"http://vxyz.admaster.com.cn/v/a17298,b81949763,c3194,i0,m201"];

4、进入后台时调用

[[MobileTracking sharedInstance] didEnterBackground];

建议放在AppDelegate的applicationDidEnterBackground方法中

5、回到前台时调用

[[MobileTracking sharedInstance] didEnterForeground];

建议放在AppDelegate的applicationWillEnterForeground方法中

6、应用结束时调用

[[MobileTracking sharedInstance] willTerminate];

7、开启调试日志

[[MobileTracking sharedInstance] enableLog:YES];

建议在测试时候打开

步骤3:验证和调试

SDK 的测试有两个方面:

  1. 参数是否齐全,URL 拼接方式是否正确
  2. 请求次数和第三方测量平台是否能对应上

针对第一点,使用 Admaster SDK 测试平台进行测试和验证,登入 http://developer.admaster.com.cn/, 根据页面上的提示进行调用, 页面会实时显示出服务器接收到的信息,如果和本地的设备相关信息一致,则表示测试通过。

针对第二点,建议使用第三方测量系统的正式环境进行测试,主要对比媒体自身广告系统测量数据和第三方测量数据数量上的差异。