使用 SDK
基本使用
初始化 SDK
在 Application
的 onCreate
方法中,对ICDP SDK
进行初始化:
class YourApplication {
@Override
private void onCreate() {
...// 其他初始化代码
ICDPApplication.init(context, serverAddress, appId, deviceId, uid, tencentMapAppkey);
...// 其他初始化代码
}
}
其中:
context
为上下文环境。serverAddress
展位信息服务器地址。appId
应用注册号。deviceId
设备唯一号,可空,空则由 SDK 自生成。uid
用户 ID。tencentMapAppkey
腾讯地图服务 appkey 可空, 为空则需要 App 主动更新城市信息。
接入展位视图
控件化展位施示例
在 layout 布局中使用单图展位组件:
<com.tencent.tmf.icdp.ICDPImageView
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/icdp_image"
android:layout_width="match_parent"
android:layout_height="150dp"
app:boothIdentityId="imageId"/>
注意:控件不能以
WARP_CONTENT
设置控件layout_width
layout_height
宽高,这将导致控件尺寸变为0。
ICDPImageView imageView = (ICDPImageView) findViewById(R.id.icdp_image);
动态创建单图展位组件:
ICDPImageVIew imageView = new ICDPImageView(context);
viewGroup.addView(imageView, LayoutParmas.MATCH_PARENT, 400);
代码中设置展位标识 ID:
imageView.setBoothIdentityId("imageId");
其中: "imageId"
为展位标识 ID。
为控件展位添加事件监听:
imageView.setOnAdClickListener(new ICDPOnAdClickListener() {
@Override
void onClick(@NonNull String boothIdentityId, @Nullable String url, @NonNull View icdpInstance,String ext) {
// 展位被点击回调
}
})
imageView.setOnLoadBoothInfoListener(new ICDPOnLoadBoothInfoListener() {
@Override
void onLoadComplete(@NonNull String boothIdentityId, @NonNull View icdpView) {
// 展位信息获取完成回调
}
@Override
void onLoadFailed(@NonNull String boothIdentityId, @NonNull View icdpView, @NonNull String reason) {
// 展位信息获取失败回调
}
})
ICDPBroadcastView broadcastView;
broadcastView.setOnCloseClickListener(new ICDPOnCloseClickListener() {
@Override
void onClick(@Nullable String boothIdentityId, @NonNull View icdpInstance) {
// 关闭按钮被点击回调
}
})
控件化展位类型表
类名 | 描述 | 加载监听 | 点击监听 | 关闭监听 |
---|---|---|---|---|
ICDPImageVIew | 单图组件 | Y | Y | N |
ICDPBannerVIew | 轮播组件 | Y | Y | N |
ICDPBroadcastView | 公告组件 | Y | Y | Y |
ICDPListView | 热门活动 | Y | Y | N |
弹窗展位示例
ICDPPopupView.showAsDialogFragmentAsync(popupId, activity, new DialogListener() {
@Override
boolean onShowDialog(@NonNull DialogFragment dialogFragment) {
// 即将显示弹窗回调
// dialogFragment 为目标弹窗
// return true 显示 false 不显示
}
});
支持的监听、点击、关闭。
闪屏页示例
在项目首个 activity
源文件中加入如下代码:
class YourActivity extends Activity implements ICDPOnAdClickListener, ICDPOnLoadBoothInfoListener {
@Override
void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ICDPSplashActivity.registerOnAdClickListener(new WeakReference<>(this));
ICDPSplashActivity.registerOnLoadBoothInfoListener(new WeakReference<>(this));
Intent intent = new Intent(context, ICDPSplashActivity.class);
intent.putExtra(ICDPSplashActivity.EXTRA_KEY_BOOTH_ID, "splashId");
context.startActivity();
// ... 其他初始化逻辑
}
@Override
void onLoadComplete(@NonNull String boothIdentityId, @NonNull View icdpView) {
// 展位加载成功回调
}
@Override
void onLoadFailed(@NonNull String boothIdentityId, @NonNull View icdpView, @NonNull String reason) {
// 展位加载失败回调
}
void onClick(@NonNull String boothIdentityId, @Nullable String url, @NonNull View icdpInstance,String ext) {
// 展位点击回调
}
}
切屏广告接入示例
切屏广告通过 HotSplashManager 类进行接入,接入方式如下:
class App extends Application{
public void onCreate(){
HotSplashManager
.newBuilder()
.bootId("切屏广告ID")
.observe(application)//填写Application对象
//切屏广告展示策略如下
// HotSplashDisplayPolicy.ALL 所有Activity从后台切换前台,都展示切屏广告
// HotSplashDisplayPolicy.NONE 所有Activity从后台切换前台,都不展示切屏广告
// HotSplashDisplayPolicy.ALL_EXCEPT 所有Activity从后台切换前台都展示
// HotSplashDisplayPolicy.ONLY_SPECIFIED 只在指定的Activity显示
.displayPolicy(HotSplashManager.HotSplashDisplayPolicy.ONLY_SPECIFIED)
//指定的Activity不显示,配合切屏策略:HotSplashDisplayPolicy.ALL_EXCEPT 使用
.exclude("com.tencent.tmf.icdp.demo.DemoMainActivity")
//指定的Activity显示,配合切屏策略:HotSplashDisplayPolicy.ONLY_SPECIFIED 使用
.include("com.tencent.tmf.icdp.demo.BoothActivity")
.build();
}
}
切屏广告可以监听广告点击事件和广告加载事件,添加监听方式如下:
class App extends Application{
public void onCreate(){
//注册广告点击的监听
HotSplashManager.registerOnAdClickListener(adClickListener);
//注册广告关闭点击监听
HotSplashManager.registerOnCloseClickListener(onCloseListener);
//注册广告加载监听
HotSplashManager.registerOnLoadBoothInfoListener(onLoadBoothInfoListener);
}
}
展位样式示例
诊断日志
通过以下代码获取诊断日志缓存文件,获取 SDK
诊断日志有助于分析异常。
File file = ICDPApplication.getLogFile()
城市定位
智慧投放需要城市位置信息精准投放展位。
有两种方式使 SDK
能正确获取当前位置。
方式1:使用内部腾讯定位模块 初始化使传入非空
腾讯位置服务
开发密钥,请先 申请开发密钥。ICDPApplication.init(context, serverAddress, appId, deviceId, uid, tencentMapAppkey);
其中
tencentMapAppkey
为开发密钥。方式2:自主更新 当初始化时传入
腾讯位置服务
开发密钥为空时,需要调用方手动更新城市信息。ICDPApplication.setCity("深圳");
事件上报
ICDP
通过内置 QAPM
模块完成用户对展位曝光点击进行上报。
使用前需对 QAPM
进行初始化。
class YourApplication {
@Override
private void onCreate() {
...// 其他初始化代码
ICDPApplication.init(context, serverAddress, appId, deviceId, uid, tencentMapAppkey);
configQapm();
...// 其他初始化代码
}
private void configQapm() {
// 设置Application(必需)
QAPM.setProperty(QAPM.PropertyKeyAppInstance, context);
// 设置AppKey(必需,用于区分上报的产品,该值由移动监控的产品配置页面获取 )
QAPM.setProperty(QAPM.PropertyKeyAppId, appId);
// 设置产品版本,用于后台检索字段(必需)
QAPM.setProperty(QAPM.PropertyKeyAppVersion, "1.0.0");
// 设置用户ID,用于后台检索字段(必需)
QAPM.setProperty(QAPM.PropertyKeyUserId, uid);
// 设置Log等级,(可选)
QAPM.setProperty(QAPM.PropertyKeyLogLevel, QAPM.LevelLog);
// 设置QAPM的上报域名(必需)
QAPM.setProperty(QAPM.PropertyKeyHost, qapmHost);
// 设置用户行为的上报域名(必需)
QAPM.setProperty(QAPM.PropertyKeyAthenaHost, athenaHost);
// 设置用上报间隔(可选)
BreadCrumbConfig.UPLOAD_MIN_INTERVAL = com.tencent.tmf.icdp.Config.QAPM_UPLOAD_MIN_INTERVAL;
BreadCrumbConfig.UPLOAD_MODE = UploadStrategy.CRON_LOG;
BreadCrumb.getInstance().start();
// 启动QAPM
QAPM.beginScene(QAPM.SCENE_ALL, QAPM.ModeStable);
}
}
其中:
qapmHost
为事件上报地址。athenaHost
为用户行为上报地址。
更多参数设定和功能使用,请参见QAPM(移动监控) > 接入Android
故障排查
展位显示空白
当展位显示空白时,按照如下步骤检查。
手机如果有条件观察
logcat
过滤tmf-icdp
观察是否有请求失败相关日志。如果存在请求错误,检查服务器地址是否设置正确。
当存在
{"code":0,"message":"成功","result":null}
结果时,检查展位标识 ID 是否配置正确。
展位图片显示比例不正确
当展位图片显示比例不对时,这通常是由于后台配置的图片尺寸比例与图片文件实际比例不符导致。后台配置正确的尺寸参数可以修复该问题。