1. APP唤起APP/小程序
本文档面向LinkActive媒体方,通过调用本文档中的接口来获取拉活的广告资源及回调广告行为。
调用文档接口前,请先联系LinkedME开通LinkActive平台权限,以获取媒体方唯一的linkedme_key。
新增APP唤起微信小程序功能,广告获取接口同APP唤起APP接口一致,返回的参数中包含微信小程序必要的参数,请参考返回参数中红色字体部分;微信小程序的跳转逻辑请参考代码示例部分。
1.1. API接入前提
您的APP需要满足一定条件才能够通过API接入,概括为两点:
能检测广告主的APP是否安装,并能直接唤起广告主APP(安装才展示广告,没有安装则不展示)
能获取到唤起广告主APP的状态,并回传给LinkActive
如果您的APP能支持以上两点,则可只接入服务端;若不支持则需要客户端做相应发版更新。
具体要求参见:API接入前提
1.2. 整体接入流程示意
1.3. LinkActive各端交互图及步骤说明
1.3.1. 服务端对接说明
建议广告请求过程通过媒体方服务端进行,客户端只处理广告展示及广告行为回调。
服务端需要对接 获取广告 的接口(图中2)
服务端处理返回的广告结果(图中3)并回传给客户端(图中4)
1.3.2. 客户端对接说明
客户端在用户访问时,向自己服务器请求广告(图中1)
客户端需要对服务端返回的广告(图中4)进行处理之后展示,返回结果处理详见 广告展示规则
广告行为发生之后,需要调用 回调广告行为 的接口(图中5)通知LinkActive服务端,回调的值参见 发送回调通知说明
回调广告行为之后处理LinkActive服务端返回的结果(图中6)
广告展示规则
LinkActive的接口请求广告时,返回的是按照优先级排序的每个广告主对应的广告素材,需要根据返回的字段“check_install_status”处理每个广告素材是否保留:如果该条广告check_install_status值为 1,需要判断用户安装状态,app未安装则删除该素材;如果该条广告check_install_status值为0,则不需判断app安装状态,直接展示。
为了防止一个设备对同一广告主产生两次拉活,在完成拉活之后需要做如下处理: 客户端从当次请求的广告列表中删除该条广告,并将其余广告向前顺移。具体流程如下图所示。
包括如下几个主要步骤: 1. 判断广告资源是否为空,若为空则自行处理 2. 判断该广告是做拉活还是拉活兼拉新,如果只是拉活则需要判断广告主APP是否安装,将未安装的APP对应的广告删除;如果是拉活兼拉新,则不需判断广告主APP的安装状态 3. 获得有效广告列表,并按照顺序给用户做展示 4. 为了防止用户重复点击广告,删除已被点击的广告,并将广告列表中的其他广告向前顺移
注意事项
拿到广告列表后首先需要处理将有效的广告保留下来,将无效(需要拉活但实际检测未安装的APP)的广告删除
用户点击广告后,客户端就应该把该次广告立即删除,以免产生二次点击
注意处理返回的广告为空,或者用户点击广告后无有效广告的情况
1.4. 分平台逻辑及代码示例
1.4.1. Android端逻辑
调用“/ad/openapi/v2/get_ad”接口获取广告列表数据(建议服务端调用),LinkedME可能返回多条广告;获取数据后,根据check_install_status字段的值确认是否需要判断安装状态,如需要则通过pkg_name逐条判断应用是否已安装,最终获得有效广告列表,顺次显示广告;若均无效则不展示广告。
用户点击广告唤起APP 当用户点击广告时,通过uri scheme唤起APP(如果第一步展示了未安装的APP广告,跳转到h5地址,建议同时后台下载apk包)。
调用“/ad/openapi/v2/record_status”接口向LinkedME服务器发送广告行为通知。
1.4.2. Android端代码示例
// adInfoArrayList对象为调用get_ad接口获取的广告列表,AdInfo为广告实体
ArrayList adInfoArrayList = new ArrayList<>();
for (int i = 0; i < adInfoArrayList.size(); i++) {
AdInfo adInfo = adInfoArrayList.get(i);
// 不同的广告类型走不同的处理逻辑
// 广告类型:0:普通广告(默认)2:微信小程序广告
if (adInfo.getAdType() == 2) {
// 2:小程序广告,此广告可直接展示
// 展示广告后,调用track的imp_urls字段中的链接上报状态
break;
}else if (adInfo.getAdType() == 0){
// 0:普通广告
// 判断应用是否需要检查App的安装状态
if ("1".equals(adInfo.getCheckInstallStatus())) {
// 需要检查安装状态
if (isAppInstalled(this, adInfo.getPackageName())) {
// 根据返回的包名检查广告主App是否安装,安装则此广告可展示
// 展示广告后,调用track的imp_urls字段中的链接上报状态
break;
}
} else {
// 不需要检查安装状态
// 此广告可展示
// 展示广告后,调用track的imp_urls字段中的链接上报状态
break;
}
}
}
//广告点击
ad_click.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view){
// 点击广告后,调用track的deeplink_urls字段中的链接上报状态
String uriString = "lkmedemo://?click_id=G4LCXAjn7";
String packageName = "com.microquation.linkedme";
String h5_url = "http://www.linkedme.cc";
String apk_url = "https://github.com/WFC-LinkedME/LinkedME-Android-Deep-Linking-Demo/blob/master/LinkedME-Android-Demo.apk?raw=true";
String user_name = "gh_b83a75769dc2";
String path = " pages/detai