集成 SDK
集成神策分析 SDK
在使用弹窗 SDK 前,请确保已经集成了神策分析 SDK,版本需要在 v6.7.0 及以上,详细集成步骤请参照 Android SDK 埋点集成使用帮助文档。
如果使用多 module,请确保神策分析 SDK 和神策弹窗 SDK 在同一 module 中引入,或者确保引用神策弹窗 SDK 的 module 能引用到神策分析 SDK。
集成神策弹窗 SDK
在 build.gradle 文件中添加神策弹窗 SDK 依赖:
dependencies {
//添加 SensorsFocus SDK 依赖
implementation 'com.sensorsdata.analytics.android:SensorsFocusSDK:0.6.3'
}
弹窗 SDK 集成 Demo,可参考 GitHub。
初始化 SDK
首先您需要初始化初始化神策分析 SDK,具体可参考:初始化神策分析 SDK。
初始化神策分析 SDK 完成之后,再初始化神策分析弹窗 SDK。弹窗 SDK 和神策分析 SDK 都需要在 Application 类的 onCreate() 方法主线程初始化。在弹窗 SDK 初始化时需要传入弹窗服务端地址,请联系运营人员获取。
// 初始化神策分析 SDK
...
// 初始化神策弹窗 SDK
SFConfigOptions sfOptions = new SFConfigOptions("弹窗服务端地址")
SensorsFocusAPI.startWithConfigOptions(this, sfOptions);
延迟初始化 SDK 会导致弹窗计划拉取、前后台判断异常,从而会导致弹窗可能无法弹出。若 App 有合规需求,可参考 Android 合规步骤。
设置自定义占位图
SDK 内部有预置的占位图逻辑,如果想设置自定义的占位图,可通过如下接口来设置
sfOptions.setPlaceholderResourceId(R.drawable.xxx); // xxx 代表图片在资源文件 res/drawable 目录下的名字
同时,对于占位图不存放在 res/drawable 中或者非本地的, SDK 也提供了另外一种设置方式
sfOptions.setPlaceholderImage(bitmap); // 占位图的二进制数据,Bitmap 类型
- SDK 内部处理的占位图优先级为 setPlaceholderResourceId > setPlaceholderImage > 内置占位图
- SDK 版本号要求 >= 0.5.4
配置 Scheme
关于 Scheme 的配置方法,参考:获取 Scheme。
实现弹窗回调
在 SensorsFocusAPI 初始化时,可以通过 SFConfigOptions 的 setCampaignListener 方法设置弹窗的回调监听(SensorsFocusCampaignListener),提供了五个监听接口:
public interface SensorsFocusCampaignListener {
/**
* 准备触达
*
* @param sfCampaign sfCampaign
* @return true 表示准备好了,触达即将开始;false 表示不进行触达
*/
boolean campaignShouldStart(SFCampaign sfCampaign);
/**
* 触达开始
*
* @param sfCampaign 触达内容
*/
void onCampaignStart(SFCampaign sfCampaign);
/**
* 触达结束
*
* @param sfCampaign 触达内容
*/
void onCampaignEnd(SFCampaign sfCampaign);
/**
* 触达点击
*
* @param sfCampaign 触达内容
*/
void onCampaignClick(SFCampaign sfCampaign);
/**
* 触达失败
*
* @param sfCampaign 弹窗数据
* @param errorCode 错误码
* @param errorMessage 错误信息
*/
void onCampaignFailed(SFCampaign sfCampaign, int errorCode, String errorMessage);
}
设置回调示例:
SensorsFocusAPI.startWithConfigOptions(this, new SFConfigOptions(apiBaseUrl)
.setCampaignListener(new SensorsFocusCampaignListener() {
@Override
public boolean campaignShouldStart(SFCampaign sfCampaign) {
//如果是自定义触达
if(SFCampaign.Type.CUSTOMIZED == sfCampaign.getType()){
try {
JSONObject jsonObject = new JSONObject(sfCampaign.getContent());
} catch (JSONException e) {
e.printStackTrace();
}
}else if(SFCampaign.Type.PRESET == sfCampaign.getType()){
}
return true;
}
@Override
public void onCampaignStart(SFCampaign sfCampaign) {}
@Override
public void onCampaignClick(SFCampaign sfCampaign) {
switch (sfCampaign.getAction()) {
case OPEN_LINK:
// 自定义处理打开链接操作
String url = sfCampaign.getAction().getValue();
Log.d(TAG, "url = " + url);
break;
case COPY:
// 自定义处理复制操作
Log.d(TAG, "copyText = " + sfCampaign.getAction().getValue());
Log.d(TAG, "copyTip = " + sfCampaign.getAction().getExtra().optString("copied_tip"));
break;
case CLOSE:
// 处理 close
Log.d(TAG, "关闭弹窗");
break;
case CUSTOMIZE:
// 处理自定义操作
JSONObject customizeJson = sfCampaign.getAction().getExtra();
Log.d(TAG, "customize" + customizeJson.toString());
break;
}
}
@Override
public void onCampaignEnd(SFCampaign sfCampaign) {}
@Override
public void onCampaignFailed(SFCampaign sfCampaign, int errorCode, String errorMessage) {}
}));
名词解释
名词 | 解释 / 定义 | 备注 |
---|---|---|
自定义触达 | 使用神策智能运营,满足运营条件后,客户可以自定义的触达方式,例如可以发券、弹窗、跳转、红包雨等等 |
API 使用
版本要求
禁用弹窗在闪屏页使用
初始化 SF SDK 时通过 setDelayPopupActivity 接口设置禁止弹窗的闪屏页页面:
//初始化
HashSet<Class<?>> ignoreClass = new HashSet<>();
ignoreClass.add(SplashActivity.class);
SensorsFocusAPI.startWithConfigOptions(this, new SFConfigOptions(apiBaseUrl)
.setDelayPopupActivity(ignoreClass)
如果设置启动事件为弹窗条件,那么弹窗可能会弹在闪屏页,会被主页遮盖,那么可以使用此 API,防止弹窗弹在闪屏页。enablePopup/enablePopup 接口在 v0.4.8 及以后版本已被设置过期,可使用 setDelayPopupActivity 接口替代。
API 说明
数据结构
SFCampaign 数据结构介绍:
名称 | 类型 | 说明 |
planId | String | 计划 ID,为下发字段的 plan_id 获取 |
name | String | 计划名称,为下发字段的 cname 获取 |
content | String | 计划内容,为下发计划字段的 popup_window_content 中的 content 字段 |
type | Type | 触达类型,为 SDK 内枚举,PRESET 为预置弹窗,CUSTOMIZED 为自定义触达 |
action | SensorsFocusActionModel | 弹窗点击动作,为 SDK 内枚举,目前支持的操作有:关闭弹窗、跳转链接、复制文本、自定义链接。 |
SensorsFocusActionModel 类型介绍:
序号 | 类型 | 弹窗响应 | type | value | extra |
---|---|---|---|---|---|
1 | 关闭弹窗 | 点击后弹窗关闭 | SensorsFocusActionModel.CLOSE | null | null |
2 | 跳转链接 | 点击后弹窗关闭 | SensorsFocusActionModel.OPEN_LINK | URL 跳转链接 | null |
3 | 复制文本 | 点击后弹窗不关闭 | SensorsFocusActionModel.COPY | 被复制的文本 | JSONObject |
4 | 自定义链接 | 点击后弹窗关闭 | SensorsFocusActionModel.CUSTOMIZE | null | 自定义的 key-value |
状态码说明
失败或成功状态码,失败时会回调 campaignFailed,并且触发的 $PlanPopupDisplay 的 $sf_succeed 为 false,$sf_fail_reason 值为失败原因。
触达接口调用情况 | 发生情况 | 失败原因(errorMessage) | 失败状态码 (errorCode) | 备注 | |
---|---|---|---|---|---|
1 | 失败 | SensorsFocusCampaignListener 接口为空 | 自定义触达计划未实现弹窗生命周期回调 | 1006 | |
2 | is_trigger 为 false | 计划下发 is_trigger 为 false | 1005 | ||
3 | campaignShouldStart 返回 false | campaignShouldStart 接口返回 false | 1004 | ||
4 | 对照组,旧版逻辑 | 对照组 | 1003 | 旧版本兼容处理 | |
5 | Activity 在后台,仅限弹窗,旧版逻辑 | 内部记录失败原因为空字符串,不会传递给开发者 | 1002 | 旧版本仍然会触发 $PlanPopupDisplay 为成功的事件($sf_succeed 为 true,且没有 $sf_fail_reason 属性) iOS 不会有这种情况,所以考虑的是 Android 保持现状,和之前一样的逻辑 | |
6 | 预览 JSON 信息解析失败,旧版逻辑 | 预览信息解析失败,请检查计划配置 | 1001 | ||
8 | 成功 | 展示弹窗 | - | - | |
9 | 自定义触达 | - | - |
弹窗测试
创建运营计划
首先在神策智能运营中创建运营计划,并且“触发条件”中的“平台类型”选择 Android,然后配置好“触达配置”就可以点击右侧的“测试弹窗”按钮以打开二维码。
扫描二维码
使用已安装了测试 App 的设备,通过手机自带的系统浏览器扫描二维码,扫码后会在浏览器中打开二维码对应的网页。
唤起 App
点击网页中的“前往 App 测试弹窗”按钮,若 App 已经成功集成 SDK 则会直接唤起 App 或提示询问是否唤起 App。如果不能正常打开 App,请强杀 App 后重试。
测试弹窗效果
跳转成功后,会在 App 内弹出弹窗。弹窗后的关闭弹窗、点击按钮等效果与创建的运营计划一致。