敬告:此 DEMO 演示为开放测试页面,仅用于开发者快速测试体验应用功能,请严格遵守开发者协议,了解更多。
♦ JS-SDK 引用方式:
♦ 普通网页 script 方式加载:下载最新版 jsBridge-v20251019.zip,请在页面上调用 jsBridge 接口之前引用 jsbridge-mini.js 库;
♦ js module 方式引用:npm install ym-jsbridge 具体请参考 npm package
♦ 今日头条 穿山甲GroMore,去申请接入 GroMore;
事件监听
• 如需接口调用事件,请设置此监听器;
jsBridge.ttGm.setListener(function(event, data) {
switch (event) {
//开屏广告 jsBridge.ttGm.splash(...)
case "splash": {
switch (data.action) {
//加载成功
case "onSplashLoadSuccess": {
break;
}
//加载失败,data.message 为失败说明
case "onSplashLoadFail": {
break;
}
//渲染成功
case "onSplashRenderSuccess": {
break;
}
//显示
case "onSplashAdShow": {
break;
}
//点击
case "onSplashAdClick": {
break;
}
//关闭
case "onSplashAdClose": {
break;
}
//渲染失败
case "onSplashRenderFail": {
break;
}
}
break;
}
//激励视频 jsBridge.ttGm.reward(...)
case "reward": {
switch (data.action) {
//加载成功
case "onRewardVideoAdLoad": {
break;
}
//缓冲完成
case "onRewardVideoCached": {
break;
}
//加载失败,data.message 为失败说明
case "onRewardVideoLoadFail": {
break;
}
//激励达成
case "onRewardVerify": {
break;
}
//点击
case "onRewardClick": {
break;
}
//关闭
case "onRewardedAdClosed": {
break;
}
//展示
case "onRewardedAdShow": {
break;
}
//展示失败
case "onRewardedAdShowFail": {
break;
}
//跳过
case "onSkippedVideo": {
break;
}
//播放完成
case "onVideoComplete": {
break;
}
//视频错误
case "onVideoError": {
break;
}
}
break;
}
//插全屏 jsBridge.ttGm.interstitialFull(...)
case "interstitialFull": {
switch (data.action) {
//加载成功
case "onInterstitialFullAdLoad": {
break;
}
//缓冲完成
case "onInterstitialFullCached": {
break;
}
//加载失败,data.message 为失败说明
case "onInterstitialFullLoadFail": {
break;
}
//激励达成
case "onRewardVerify": {
break;
}
//此方法会在用户点击打开其他应用(例如 Google Play)时于 onAdOpened() 之后调用
case "onAdLeftApplication": {
break;
}
case "onAdOpened": {
break;
}
//点击
case "onInterstitialFullClick": {
break;
}
//关闭
case "onInterstitialFullClosed": {
break;
}
//展示
case "onInterstitialFullShow": {
break;
}
//展示失败
case "onInterstitialFullShowFail": {
break;
}
//跳过视频播放(针对全屏广告)
case "onSkippedVideo": {
break;
}
//视频播放完毕(针对全屏广告)
case "onVideoComplete": {
break;
}
//视频播放失败(针对全屏广告)
case "onVideoError": {
break;
}
}
break;
}
//Banner jsBridge.ttGm.banner(...)
case "banner": {
switch (data.action) {
//加载成功
case "onAdLoaded": {
break;
}
//加载失败,data.message 为失败说明
case "onAdFailedToLoad": {
break;
}
//点击
case "onAdClicked": {
break;
}
//关闭
case "onAdClosed": {
break;
}
//此方法会在用户点击打开其他应用(例如 Google Play)时于 onAdOpened() 之后调用
case "onAdLeftApplication": {
break;
}
case "onAdOpened": {
break;
}
//展示
case "onAdShow": {
break;
}
//展示失败
case "onAdShowFail": {
break;
}
}
break;
}
}
//此函数仅用于显示回调参数在本 DEMO 页面上
showResult({
event: event,
data: data
});
});
//请拉到页面底部查看回调数据信息
$('html,body').animate({ scrollTop: $('#view').offset().top }, 500);
/**
回调参数说明:
event - 事件代码,字符串
data - 事件数据,JSON 对象
**/
//移除监听器,不会再收到回调通知 //在需要时可重新调用 setListener jsBridge.ttGm.removeListener();
//非必须的,即使没有权限也不影响广告展示 //但建议请求权限,可优化投放广告精准度和用户的交互体验,提高eCPM jsBridge.ttGm.requestPermissionIfNecessary();
展示广告
codeId:
timeout:
//如果在打包插件上配置了开屏广告位 ID 则无需调用此接口,启动 APP 时会自动调用展示开屏广告。 //如果拉起广告失败,请参考 错误码 说明 jsBridge.ttGm.splash({ //开屏广告位 ID codeId: "{{splash.codeId}}", //加载广告超时时间(毫秒) timeout: {{splash.timeout}} }, function(succ, res) { if (!succ) { alert(JSON.stringify(res)); } });
codeId:
orientation:
//如果拉起广告失败,请参考 错误码 说明 jsBridge.ttGm.reward({ //字符串,广告位 ID codeId: "{{reward.codeId}}", //字符串,屏幕方向,与广告位的设置一致 //VERTICAL 竖屏 //HORIZONTAL 横屏 orientation: "{{reward.orientation}}", //字符串,激励奖品名称 rewardName: "金币", //数字,激励奖品数量 rewardAmount: 5, //字符串,用户ID userId: "user123", //字符串,任意自定义数据 //一般用于 激励视频回调 customData: "" }, function(succ, res) { if (!succ) { alert(JSON.stringify(res)); } });
codeId:
orientation:
jsBridge.ttGm.interstitialFull({
//字符串,广告位 ID
codeId: "{{interstitialFull.codeId}}",
//字符串,屏幕方向,与广告位的设置一致
//VERTICAL 竖屏
//HORIZONTAL 横屏
orientation: "{{interstitialFull.orientation}}",
//字符串,激励奖品名称
rewardName: "金币",
//数字,激励奖品数量
rewardAmount: 5,
//字符串,用户ID
userId: "user123"
}, function(succ, res) {
if (!succ) {
alert(JSON.stringify(res));
}
});
codeId:
jsBridge.ttGm.banner({
//字符串,广告位 ID
codeId: "{{banner.codeId}}",
//数字,到顶部的距离
top : 20,
//数字,宽度 请参考
width : 320,
//数字,高度
height: 100,
//字符串,用户ID
userId: "user123"
}, function(succ, res) {
if (!succ) {
alert(JSON.stringify(res));
}
});
codeId:
jsBridge.ttGm.banner({
//字符串,广告位 ID
codeId: "{{banner.codeId}}",
//数字,到底部的距离
bottom: 20,
//数字,宽度 请参考
width : 320,
//数字,高度
height: 100,
//字符串,用户ID
userId: "user123"
}, function(succ, res) {
if (!succ) {
alert(JSON.stringify(res));
}
});
jsBridge.ttGm.banner({
remove: true
}, function(succ, res) {
if (!succ) {
alert(JSON.stringify(res));
}
});
//一般情况在穿山甲后台开启广告位预缓存功能使用 show/close 缓存机制就可以了 //本 preload 接口主要用于冷启动 APP 时预加载首次展示广告,具体说明请参考这里 jsBridge.ttGm.preload({ //激励视频 //参数应跟调用 reward 接口时一致,否则无法命中缓存 参见这里 reward: { //激励视频广告位 ID 列表 codeIdList: [ "1111111111", "2222222222" ], orientation: "VERTICAL", rewardName: "金币", rewardAmount: 5, userId: "user123", customData: "" }, //插全屏、全屏视频 //参数应跟调用 interstitialFull 接口时一致,否则无法命中缓存 参见这里 interstitialFull: { //插全屏、全屏视频广告位 ID 列表 codeIdList: [ "3333333333", "4444444444" ], orientation: "VERTICAL", rewardName: "金币", rewardAmount: 5, userId: "user123" }, //并行加载的广告位数,默认值为2,合法值为[1,20] parallelNum: 2, //时间间隔,默认值为2s,合法值为[1,10] interval: 2 }, function(succ, res) { alert(succ ? "处理成功" : `处理失败 ${JSON.stringify(res)}`); });
//仅支持 Android 版
//请进入 设置 - 安卓打包设置 - 开启调试模式 后重新生成新版安装,否则此 js 接口不可用!
//测试通过后,发布正式版时请关闭调试模式!
jsBridge.ttGm.launchTestTools(function(succ, res) {
if (!succ) {
alert(JSON.stringify(res));
}
});
监听回调数据: