快应用广告植入
入门参考:https://bbs.quickapp.cn/forum.php?mod=viewthread&tid=3678
郑重声明:快应用调试器预览版不提供广告展示
方法:可以在合适的手机快应用调试器上去找不是预览版的版本进行广告调试
一、广告的分类
1.1 分类:
- banner广告
- 插屏广告
- 原生广告(部分厂家支持原生渲染2.0,版本兼容问题看版本兼容)
- 激励视频广告
1.2 版本兼容
厂商 | 最低支持引擎版本 | 说明 |
---|---|---|
vivo | 1052+ | 激励视频广告1061+ vivo 流量联盟平台 |
OPPO | 1044+ | 激励视频广告1060+ OPPO 营销平台 |
华为 | 1075+ | 华为广告接入服务 |
小米 | 1062+ | 暂不支持原生广告 小米移动广告联盟 |
友情提醒:看到的不一定是真的~(小米其实是可以支持原生广告)
二、各种广告的使用方法
基础方法参考各大官网以及快应用平台官网,下文主要阐述的是细节!细节
2.1 banner广告
话不多说我们直接上例子,例子都来自官网
2.1.1 完整代码
代码实例
<template>
<div class="wrap">
<text class="btn" οnclick="showAd">点击显示广告</div>
</div>
</template>
<script>
import device from "@system.device";
export default {
data() {
return {
adUnitId: "",
ad: null
};
},
onInit() {
this.switchAdUnitIdByBrand();
},
async switchAdUnitIdByBrand() {
// 这个方法的作用是适配不同厂商的adUnitId
const res = await device.getInfo();
const brand = res.data.brand;
switch (brand) {
case "vivo":
this.adUnitId = "278eae7418b04abbb5926847ed42271e"; // 这个id是vivo的com.quickapp.center创建的,需要修改manifest的package才能预览出效果
break;
case "oppo":
this.adUnitId = "oppo-adUnitId";
break;
case "xiaomi":
this.adUnitId = "xiaomi-adUnitId";
break;
case "huawei":
this.adUnitId = "huawei-adUnitId";
break;
default:
console.warn("此设备不支持广告组件!");
}
},
initAd() {
try {
this.ad = require('@service.ad').createBannerAd({ // 使用require方式避免在不支持的广告接口的厂商运行是报错
adUnitId: this.adUnitId,
style:{
left: 0,
top: 800,
width: 1080
}
})
} catch (e) {
console.log(e)
}
},
showAd() {
if(this.ad) {
this.ad.show();
} else {
this.initAd();
}
}
};
</script>
<style lang="less">
.wrap {
background-color: #cccccc;
flex-direction: column;
.btn {
height: 50px;
width: 200px;
border-radius: 25px;
color: #FFFFFF;
background-color: #456fff;
text-align: center;
}
}
</style>
这里不谈样式,原生广告可能会细讲。
2.1.2 方法详解
data
data() {
return {
adUnitId: "",
ad: null
};
},
为什么要说道data这个方法,因为里面有两个非常重要的属性,也是广告植入的关键!
adUnitId
:必须要有都是靠他接入广告的,他不对就没广告
**获取方式:**可以从各大平台去申请。部分平台可能没有测试id,需要先进行app
发布验证才能拿到(如果需要的人多,我可以再写一篇如何申请各大id的正式id的文章)
ad
:通过adUnitId
来生成的广告对象。
switchAdUnitIdByBrand()
async switchAdUnitIdByBrand() {
// 这个方法的作用是适配不同厂商的adUnitId
const res = await device.getInfo();
const brand = res.data.brand;
switch (brand) {
case "vivo":
this.adUnitId = "278eae7418b04abbb5926847ed42271e"; // 这个id是vivo的com.quickapp.center创建的,需要修改manifest的package才能预览出效果
break;
case "oppo":
this.adUnitId = "oppo-adUnitId";
break;
case "xiaomi":
this.adUnitId = "xiaomi-adUnitId";
break;
case "huawei":
this.adUnitId = "huawei-adUnitId";
break;
default:
console.warn("此设备不支持广告组件!");
}
}
这个方法主要就是针对不同机器的adUnitId
适配性操作,很通俗的switch语句。
device.getInfo();
通过这个方法去拿到设备信息
const brand = res.data.brand;
通过设备信息去锁定设备的品牌从而去下面找到你设置的adUnitId
device
需要提前导入import device from "@system.device";
initAd()
通过内部给出的代码去创建banner广告
require('@service.ad').createBannerAd
:具体代码看完整代码(里面填写id和banner的广告的样式即可)
2.1.3 其它方法
参考:https://quickapp.vivo.com.cn/quickapp-ad-api-gide/#toc-7
bannerAd 对象
方法 | 参数 | 描述 |
---|---|---|
bannerAd.show() | - | 加载展示banner广告,出错的时候回调 onError,分为加载和展示两个阶段,加载成功回调onLoad |
bannerAd.hide() | - | 隐藏 banner 广告 |
bannerAd.onError() | function callback | 监听 banner 广告错误事件 |
bannerAd.offError() | function callback | 移除 banner 广告错误监听 |
bannerAd.onLoad() | function callback | 监听 banner 广告加载事件,多个素材,每次加载新素材,都会进入这个回调 |
bannerAd.offLoad() | function callback | 移除 banner 广告展示监听 |
bannerAd.onClose() | function callback | 监听 banner 广告关闭事件 |
bannerAd.offClose() | function callback | 移除 banner 广告关闭事件 |
bannerAd.onResize() | function callback | 监听 banner 广告尺寸变化事件 |
bannerAd.offResize() | function callback | 取消监听 banner 广告尺寸变化事件 |
bannerAd.destroy() | - | 销毁 banner 广告 |
2.2 插屏广告
因为形式类似,所以这里不多赘述,直接看demo
2.2.1 完整代码
<script>
import device from "@system.device";
export default {
data() {
return {
adUnitId: "fc7c15870c7740da94d88c650c939be4", // 这个id是vivo的com.quickapp.center创建的,需要修改manifest的package才能预览出效果
ad: null
};
},
onInit() {
this.initAd();
},
initAd() {
try {
this.ad = require('@service.ad').createBannerAd({ // 使用require方式避免在不支持的广告接口的厂商运行是报错
adUnitId: this.adUnitId,
})
this.ad.onLoad(() => {
this.ad.show();
})
} catch (e) {
console.log(e)
}
}
};
</script>
2.2.2 其它方法
interstitialAd对象
方法 | 参数 | 描述 |
---|---|---|
interstitialAd.show() | - | 插屏广告组件默认是隐藏的,调用 show 方法展示广告。 |
interstitialAd.hide() | - | 隐藏插屏广告 |
interstitialAd.onError() | function callback | 监听插屏广告出错事件 |
interstitialAd.offError() | function callback | 移除插屏广告出错监听 |
interstitialAd.onLoad() | function callback | 监听插屏广告加载成功事件 |
interstitialAd.offLoad() | function callback | 移除插屏广告加载成功监听 |
interstitialAd.onClose() | function callback | 监听插屏广告隐藏事件 |
interstitialAd.offClose() | function callback | 移除插屏广告隐藏监听 |
interstitialAd.destroy() | - | 销毁插屏广告 |
2.3 激励视频
2.3.1 完整代码
同理一样调用
讲一些细节问题:
1.demo的激励视频中show方法是通过OnLoad方法去调用的。
2.每次运行时都会调用一次load方法,不需要写出来也会自动执行一次。
<script>
import device from "@system.device";
export default {
data() {
return {
adUnitId: "236d05c1e2564e85bf289f63c1e42c29", // 这个id是vivo的com.quickapp.center创建的,需要修改manifest的package才能预览出效果
ad: null
};
},
onInit() {
this.initAd();
},
initAd() {
try {
this.ad = require('@service.ad').createRewardedVideoAd({ // 使用require方式避免在不支持的广告接口的厂商运行是报错
adUnitId: this.adUnitId,
})
this.ad.onLoad(() => {
this.ad.show();
})
this.ad.onClose((res) => {
if (res && res.isEnded) {
console.log("正常播放结束,可以下发奖励");
} else {
console.log("播放中途退出,不下发奖励");
}
})
this.ad.load();
} catch (e) {
console.log(e)
}
}
};
</script>
2.3.2 其它方法
rewardedVideoAd对象
方法 | 参数 | 描述 |
---|---|---|
rewardedVideoAd.show() | - | 激励视频广告组件默认是隐藏的,调用 show 方法展示广告,失败回调 onError |
rewardedVideoAd.load() | - | 手动拉取广告,用于刷新广告,成功回调 resolved Promise,失败回调 onError |
rewardedVideoAd.onError() | function callback | 监听激励视频广告出错事件 |
rewardedVideoAd.offError() | function callback | 移除激励视频广告出错监听 |
rewardedVideoAd.onLoad() | function callback | 监听激励视频广告加载成功事件 |
rewardedVideoAd.offLoad() | function callback | 移除激励视频广告加载监听 |
rewardedVideoAd.onClose() | function callback | 监听激励视频广告关闭事件。只有在用户主动关闭激励视频广告时,广告才会关闭。 |
rewardedVideoAd.offClose() | function callback | 移除激励视频广告关闭监听 |
rewardedVideoAd.destroy() | - | 销毁激励视频广告组件 |
2.4 原生广告
这块最为复杂,首先你要知道虽然快应用可以在多个平台发布,但是每个平台对广告的兼容性却是不一样的。
所以原生广告被折腾成了1.0和2.0。
2.4.1 个人开发经验
2.0 最为兼容vivo平台(oppo中也可以使用)
1.0 兼容三大平台(oppo、华为、小米)
2.4.2 原生广告1.0
<script>
import device from "@system.device";
export default {
data() {
return {
adUnitId: "9d66217c88614253bd68a291c273f8d5", // 这个id是vivo的com.quickapp.center创建的,需要修改manifest的package才能预览出效果
ad: null
};
},
onInit() {
this.initAd();
},
initAd() {
try {
this.ad = require('@service.ad').createNativeAd({ // 使用require方式避免在不支持的广告接口的厂商运行是报错
adUnitId: this.adUnitId,
})
this.ad.onLoad((data) => {
console.log('Native ad resources!', data); // 广告加载成功,返回原生广告资源,根据但是资源自行渲染展现
})
this.ad.load();
} catch (e) {
console.log(e);
}
}
};
</script>
这里他没有前端,前端需要你去自己写。具体得到的参数可以查看onLoad
中的data
2.4.3 原生广告2.0
https://dev.vivo.com.cn/documentCenter/doc/499#w2-48198661
官方的介绍,其实并没有告诉你具体的写法
这里推荐去查看Apex-UI中关于ad2.0的案例
https://vivoquickapp.github.io/apex-ui-docs/guide/ad2.html
最好的下载从里面的代码去理解
三、错误码大全
3.1基础错误码
通用
代码 | 异常情况 |
---|---|
1000 | 后端错误,调用失败 |
1001 | 参数错误 |
1002 | 广告单元无效 |
1003 | 内部错误 |
1004 | 无合适的广告 |
1005 | 广告组件审核中 |
1006 | 广告组件被驳回 |
1007 | 广告能力被封禁 |
1008 | 广告位的广告能力已关闭 |
1009 | 广告加载超时 |
1100 | 过于频繁调用相关的API |
1101 | 广告在加载后,长时间没有展示,广告信息已过期 |
1102 | 调用了不支持的方法 |
1103 | 环境监测失败,如应用无权限等 |
1104 | 网络错误 |
1105 | 广告未加载成功 |
1106 | 广告展示失败 |
2000 | 未知错误 |
小米
code | 含义 | 备注 |
---|---|---|
300001 | 广告位不存在 | 请确认广告位是否是开启状态 |
300002 | 广告位在米盟SSP被暂停 | 开发者关闭了广告位 |
300003 | upId不存在 | |
300004 | 广告位被加入黑名单 | 通常是因为有作弊嫌疑,请联系米盟解决 |
300005 | 应用在米盟SSP被暂停 | 开发者暂停了应用下所有广告位 |
300006 | 应用被加入黑名单 | 通常是因为有作弊嫌疑,请联系米盟解决 |
300007 | 应用不存在 | 确认广告位的应用信息是否正确 |
300009 | 应用未上架 | |
100401 | 被联盟投放限制过滤 | 根据开发者在SSP后台设置的屏蔽策略屏蔽广告 |
100402 | 请求包名与注册包名不一致 | 请求包名与注册包名不一致将不返回广告 |
101101 | 广告位内部解析错误 内部错误 | 请联系米盟解决 |
101102 | 内部错误 | 请联系米盟解决 |
101103 | 内部错误 | 请联系米盟解决 |
101104 | 内部错误 | 请联系米盟解决 |
300215 | 频控限制 | 更换调试设备解决 |
300216 | 请联系米盟解决 | 请联系米盟解决 |
300217 | 请联系米盟解决 | 请联系米盟解决 |
300218 | 请联系米盟解决 | 请联系米盟解决 |
300220 | 请联系米盟解决 | 请联系米盟解决 |
300221 | 请联系米盟解决 | 请联系米盟解决 |
300222 | 请联系米盟解决 | 请联系米盟解决 |
300223 | 请联系米盟解决 | 请联系米盟解决 |
300224 | 请联系米盟解决 | 请联系米盟解决 |
300225 | 请联系米盟解决 | 请联系米盟解决 |
300226 | 请联系米盟解决 | 请联系米盟解决 |
300227 | 请联系米盟解决 | 请联系米盟解决 |
300228 | 请联系米盟解决 | 请联系米盟解决 |
300217 | 请联系米盟解决 | 请联系米盟解决 |
四、各大平台的测试id
4.1 小米
广告类型 | 测试广告位ID |
---|---|
横幅 | 802e356f1726f9ff39c69308bfd6f06a |
插屏半屏图片(横版) | 1d576761b7701d436f5a9253e7cf9572 |
插屏半屏图片(竖版) | 67b05e7cc9533510d4b8d9d4d78d0ae9 |
插屏半屏视频(横版) | b7c62fa1f3db17b661e3adc650414f41 |
插屏半屏视频(竖版) | 7844b678553cc3f3b9b9048a48f145a4 |
插屏半屏图片和视频(横版) | 7b6435ad4d1e6d87ddba2415de6ba65b |
插屏半屏图片和视频(竖版) | eda5f9bcf641d588758b27b290d8b4f1 |
全屏插屏视频(横版) | 9b31b19c061a4db0d5f4f004cf16c92d |
全屏插屏视频(竖版) | ea7b05ddc1a85d3d04ab0231b3b5e4bb |
激励视频广告(横版) | 17853953c5adafd100f24cd747edd6b7 |
竖版激励视频(竖版) | 92d90db71791e6b9f7caaf46e4a997ec |
横版开屏 | 94f4805a2d50ba6e853340f9035fda18 |
原生模板-上文下图 | 4966931579570a31c70269f560e9577e |
原生模板-左文右图 | e8cad3a962d8f5ccb3e42a5c2427107d |
原生模板-左图右文(A版) | 4cc5ca1fa86d05c3c9dbec05ce5bb1b8 |
原生模板-左图右文(B版) | 8577377ac0a045a5187a5506f3cf6ba6 |
原生模板-上图下文(大图) | 8f02fd1f100b57f536da160a84fa95a6 |
原生模板-上图下文(组图) | 9d72e47b9640044d1f6bcbd4d3277d19 |
原生模板-横版视频模板 | ffc009779b4a62177fffe3d594bb35ff |
自渲染大图(仅图片) | 702b6a3b2f67a52efd3bdbf51fbef5fe |
自渲染大图(仅视频) | 737fd8fce83832ffac1da2244d24add5 |
自渲染——大图(图片+视频混出) | 270c1630710a858d633aaf752025eae2 |
自渲染——小图 | 60d2a98004f3a2a3625a1665796e0ebb |
自渲染——组图 | c020c2cbc40301a2a18fe32977bddcaa |
4.2 vivo
看demo中的测试id
https://quickapp.vivo.com.cn/quickapp-ad-api-gide/#toc-10
4.3 OPPO
暂无
4.4 华为
看demo中的测试id:
https://developer.huawei.com/consumer/cn/doc/development/quickApp-Guides/quickapp-access-ads-kit-0000001126445969#section525115250248