5.3 Android 接入文档中文版
开发环境
- Android 版本
- Android SDK 要求最低系统版本为 API 17(Android 4.2),集成之前请将Android SDK升级到API 17及以上。
- v4兼容包 SDK内部使用到了Pair类,需要依赖android-support-v4.jar,请在工程内集成或替换最新版本的v4包即可。
集成 SDK
第1步:导入SDK
Eclipse ADT
登录及策网站,点击右下角设置,进入APP信息管理页面,点击Andriod SDK按钮下载SDK。将
jicesdk.jar
拷贝到工程的libs目录下,重新build工程即可。
第2步: 添加相关权限到 AndroidManifest.xml
导入我方SDK后,需配置设备信息相关权限到 AndroidManifest.xml,我方才可以获取用户相关设备信息,配置完成后默认授权我方进行数据采集,同时建站方应在用户首次激活APP时添加相关隐私协议声明获取用户同意。
<!-- 网络权限 -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- 网络状态相关权限 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!-- 设备信息相关权限 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!-- 缓存推送活动图片文件读写权限 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
初始化 SDK
第1步: 从Jice网站获取appkey
登录及策网站,点击右下角设置,进入APP信息管理页面,获取appkey.
第2步: 在AndroidManifest.xml
中配置appkey
在你的应用AndroidManifest.xml文件的application节点下为应用配置AppKey。
<meta-data android:name="com.admaster.jicesdk.appKey" android:value="Jice网站为您分配的appkey" />
第3步: 在 main activity 中引入Jice instance
在程序入口Activity
中引入 com.admaster.jicesdk.api.JiceSDK,调用 getInstance(Context context, JiceConfig config)
初始化SDK;
说明:建议开发者将初始化接口放到android:name="android.intent.category.LAUNCHER"
属性Activity的onCreate()
方法中,确保每次启动APP时都能调用即可。如果在自定义的Application内初始化SDK,可能会由第三方服务在独立进程工作使自定义Application多次初始化,会引起JiceSDK初始化时统计事件异常。
- API参数
appKey
: JICE系统为您分配的应用唯一标识符.config
:SDK 配置类,如果你想做一些自定义设置,可以移步自定义SDK配置查看更详细的说明.
JiceSDK mJiceAPI = JiceSDK.getInstance(getApplicationContext(), new JiceConfig());
恭喜,按照上述步骤,您已经完成了SDK的基础集成,您可以重新启动app,登录Jice系统,进入事件分析,按截图选择启动事件,如果事件总数不为0,则说明,您已经嵌入成功。您可能需要等几分钟才能看到数据。
追踪事件
在完成了SDK的基础集成后,您可以调用mJiceAPI.trackEventName
来进行事件追踪。在进行事件追踪之前,需要您的运营人群在Jice网站定义好需要追踪的事件,并导出代码文件给您,您只需要把事件追踪代码放到事件触发的位置即可。
- API参数
eventname
:事件名称,需为英文,例如addtocart.eventlabels
: 事件属性,属性的key需为英文,例如,itemprice。
void trackEventName(String eventName,HashMap<String, ?> eventlabels)
- 示例
//加入购物车时
HashMap<String, Object> eventlabel = new HashMap<String, Object>();
eventlabel.put("pid", 22473); // item id
eventlabel.put("itemname", "tshirt"); // item name
eventlabel.put("itemprice", 800); // item price
mJiceAPI.trackEventName("productview", eventlabel);
您也可以调用如下方法进行事件追踪。
void trackEventName(String eventname)
void trackEventName(String eventname, JSONObject eventlabels)
注意事项:
- 事件名称参数必填,事件属性可选;
- 事件名称 key 和事件属性 key 必须和在Jice系统中设置的相同,否则无法在Jice系统中查看该事件的数据;
- 最多可以支持 50 个事件,每个事件最多能添加 20 个属性。
恭喜,按照上述步骤,您已经完成了SDK的事件追踪设置,您可以登录Jice系统,进入事件分析,选择您追踪的事件,如果事件总数不为0,则说明,您已经嵌入成功。您可能需要等几分钟才能看到数据。
追踪用户信息
如果想进一步追踪触发事件的用户信息,您需要调用mJiceAPI.addUserIdentifier方法。在进行用户信息追踪之前,需要您的运营人群在Jice网站定义好需要追踪的用户属性,并导出代码文件给您。
- 当用户注册时候进行调用该接口,传入用户的属性。
当用户编辑更新个人信息后需要调用重新设置用户属性;
API参数
userid
: 用户的唯一标识符,不能为空。properties
:用户属性, 例如:昵称、性别等,用户属性key需为英文。
void addUserIdentifier(String userId, HashMap<String, Object> properties)
- 示例
HashMap<String, Object> profile = new HashMap<String, Object>();
profile.put("name", "Jim");//昵称
profile.put("gender", "Male");//性别
profile.put("birthday", "1990-10-12");//生日
profile.put("email","vip@jice.com");//邮箱
mJiceAPI.addUserIdentifier("421484", profile);//421484 用户id
注意事项:
- 用户属性key和在Jice系统中设置的必须一致,否则无法在Jice系统中查看该事件的数据。
恭喜,按照上述步骤,您已经完成了SDK的用户信息追踪设置。您可以登录Jice系统,进入用户分析,当用户注册成功后,您可以在用户列表中看到该用户。您可能需要等几分钟才能看到数据。
应用内推送设置
Jice系统提供强大的应用内消息推送功能,可以将特定的消息推送给特定的人群,在使用这个神奇的功能之前,您需要做如下工作:
第1步: 定义展示推送消息的时机
例如,您是一名电商app的开发人员,您的运营人员希望在用户进入生鲜类商品列表页面时,展示一条推送消息,那么您需要做如下事情。
在AndroidManifest.xml
中的application
标签内添加 JiceSDK推送视图。
<activity android:name="com.admaster.jicesdk.api.JicePushActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
目标Activity
界面,例如生鲜类商品列表页面Activity的OnCreate()
方法中调用addJicePushView
接口。
- API参数
context
: 上下文环境对象。jiceViewCallback
:如果您想在展示推送或点击推送时做一些额外的操作,例如,点击推送后进入到某个页面,您需要实现JiceViewListener
中相应的方法,具体见下一步。
void addJicePushView(Context context,JiceViewListener jiceViewCallback)
- 示例
mJiceAPI.addJicePushView(MainActivity.this, new JiceViewListener() {
@Override
public void onJiceViewWillShow() {
//todo something
}
@Override
public void onJiceViewShowed() {
//todo something
}
@Override
public void onJiceViewError(String errorMsg) {
//todo something
}
@Override
public void onJiceViewDismissed() {
//todo something
}
@Override
public void onJiceViewClicked(String clickUrl) {
//todo something
}
});
第2步: 定义点击推送消息后的操作
例如,用户点击推送消息后,您希望他进入某个页面,那么您需要实现JiceViewListener
中的onJiceViewClicked:
方法。其中clickUrl
是在Jice系统中填写的跳转链接。SDK统一作为字符串传输,开发者可以根据需求对其他格式的数据自行解析进行相应处理
当然,你也可以实现JiceViewListener
中的其他方法,在推送展示和点击的过程中进行其他处理。
- 示例
mJiceAPI.addJicePushView(MainActivity.this, new JiceViewListener() {
@Override
public void onJiceViewWillShow() {
//todo something
}
@Override
public void onJiceViewShowed() {
//todo something
}
@Override
public void onJiceViewError(String errorMsg) {
//todo something
}
@Override
public void onJiceViewDismissed() {
//todo something
}
//Open clickUrl in the default operater
@Override
public void onJiceViewClicked(String clickUrl) {
Intent intent = new Intent();
intent.setAction("android.intent.action.VIEW");
Uri destUri = Uri.parse(clickUrl);
intent.setData(destUri);
startActivity(intent);
}
});
- 在onJiceViewError方法中可用的错误码枚举值
JicePushShowError.JicePushNoData = 1000, // 没有推送数据
JicePushShowError.JicePushIsShowing = 1001, // 推送正在展示中
JicePushShowError.JicePushNoNet = 1002, // 暂时没有网络
JicePushShowError.JicePushIsDownloading = 1003;// 推送正在下载中
第3步: 集成线上测试模式
我们建议在正式推送消息前,先进行真机测试,这样可以查看推送活动的展示和点击效果是否和预期的一致。
- 定义url scheme, 在
Manifest
中的MainActivity标签内添加scheme
属性。
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- url scheme -->
<data android:scheme="com.admaster.jicedemo" />
</intent-filter>
- 在Jice网站中录入此url scheme.
- 在
MainActivity
的onCreate()
方法中加入如下代码. 其中getIntent()
将会返回被测试推送消息的相关信息。mJiceAPI.handleOpenURL(getIntent());
在完成上述步骤后,应用内推送的设置就已经完成了。您或者您的运营人员登录及策系统,新建推送活动,通过二维码扫描测试,如果活动流程正常,则表示已经嵌入成功。您可能需要等几分钟才能看到数据。
自定义SDK设置
SDK还支持一些自定义设置,例如发送监测数据包的网络策略等,如果有相关需求,可以在JiceSDK.getInstance(Context context, JiceConfig config)
时,通过实例化 JiceConfig
类来控制相关策略。
API参数
isEventWifiOnly
: 追踪事件的上报网络策略,可以设置为true或者false.默认值为false,代表在wifi或者(2/3/4G)网络下都进行上报。isPushWifiOnly
:推送活动展示的网络策略. 可以设置为true或者false.默认值为false,代表在wifi或者(2/3/4G)网络下都进行展示。debugMode
: 设置为调试模式,可以看到内部打印的Log日志,方便调试。isOldUser
: 设置设备已激活,标识用户是否在SDK使用前已经激活过设备,开发者如果设置为true,则后台不会再把这台设备算为新激活用户,默认为false。pushServerURL
: 支持私有化部署,设置推送下发的服务器地址,默认会发送到jice推送服务器地址。trackServerURL
: 支持私有化部署,设置事件上报的服务器地址,默认会发送到jice事件服务器地址。
JiceConfig(boolean isEventWifiOnly, boolean isPushWifiOnly, boolean debugMode, boolean isOldUser, String pushServerURL, String trackServerURL)
- 示例
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
JiceSDK.getInstance(this, new JiceConfig(false,false,true,false,null,null));
//如果不需要标识旧用户和私有化部署,可以使用三个参数的初始化函数
//JiceSDK.getInstance(this, new JiceConfig(false, false, false));
}
混淆配置
如果您的项目使用了 Proguard
混淆打包,为了避免 SDK 被二次混淆导致无法使用,请在 proguard-project.txt
中添加以下代码:
-dontwarn com.admaster.**
-keep class com.admaster.** {
*;
}