194 lines
5.3 KiB
TypeScript
194 lines
5.3 KiB
TypeScript
import { _decorator, Component, director, game, Node, sys } from 'cc';
|
|
const { ccclass, property } = _decorator;
|
|
|
|
@ccclass('WXSdk')
|
|
export class WXSdk extends Component {
|
|
|
|
@property({ displayName: "原生广告uid" })
|
|
bannerId: string = "";
|
|
|
|
@property({ displayName: "视频奖励广告uid" })
|
|
videoUid: string = "";
|
|
|
|
@property({ displayName: "插屏广告uid" })
|
|
interstitialUid: string = "";
|
|
|
|
@property({ displayName: "分享图url" })
|
|
shareImageUrl: string = "https://mmocgame.qpic.cn/wechatgame/fNvVoACuBEOmNhzE802RLqnUuQyZ4rXTicDqz7OlVKypjYcHHo7nyfoYe7Urvdk6T/0";
|
|
|
|
@property({ displayName: "分享tile文本" })
|
|
shareTilt: string = "超好玩解压停车场";
|
|
|
|
bannerAdv = null
|
|
videoAdv = null
|
|
interstitialAd = null
|
|
|
|
|
|
static instance: WXSdk;
|
|
|
|
protected onLoad(): void {
|
|
WXSdk.instance = this
|
|
}
|
|
successCallback = null
|
|
|
|
initBanner() {
|
|
let winSize = wx.getSystemInfoSync();//获取像素size
|
|
let bannerWidth = 300
|
|
let bannerHeight = 80
|
|
// 创建 原生模板 广告实例,提前初始化
|
|
let CustomAd = wx.createCustomAd({
|
|
adUnitId: 'adunit-dbdd10d1ca3690d2',
|
|
style: {
|
|
left: (winSize.windowWidth - bannerWidth) / 2,
|
|
top: winSize.windowHeight - bannerHeight,
|
|
width: bannerWidth,
|
|
}
|
|
})
|
|
// // 在适合的场景显示 原生模板 广告
|
|
// CustomAd.show()
|
|
|
|
// 监听 原生模板 广告错误事件
|
|
CustomAd.onError(err => {
|
|
console.error(err.errMsg)
|
|
});
|
|
|
|
this.bannerAdv = CustomAd
|
|
|
|
}
|
|
|
|
initVideo() {
|
|
// 创建激励视频广告实例,提前初始化
|
|
this.videoAdv = wx.createRewardedVideoAd({
|
|
adUnitId: this.videoUid//传入自己的id,此处为视频广告位ID
|
|
})
|
|
}
|
|
|
|
initInterstitial() {
|
|
if (wx.createInterstitialAd) {
|
|
this.interstitialAd = wx.createInterstitialAd({
|
|
adUnitId: this.interstitialUid//传入自己的id,此处为插屏广告位ID
|
|
})
|
|
}
|
|
}
|
|
|
|
init() {
|
|
if (sys.platform == sys.Platform.WECHAT_GAME) {
|
|
|
|
this.initBanner()
|
|
this.initVideo()
|
|
// 创建插屏广告实例,提前初始化
|
|
this.initInterstitial()
|
|
this.passivityShare()
|
|
}
|
|
|
|
}
|
|
|
|
// 主动分享
|
|
public initativeShare(callBack?: any) {
|
|
let shareTitle = this.shareTilt
|
|
let imageUrl = this.shareImageUrl
|
|
// 主动拉起转发,进入选择通讯录界面
|
|
wx.shareAppMessage({
|
|
// 转发标题, 没有则默认使用小游戏的昵称
|
|
title: shareTitle,
|
|
// 图片链接,
|
|
imageUrl: imageUrl
|
|
});
|
|
}
|
|
|
|
|
|
passivityShare(callBack?: any) {
|
|
// 授权显示菜单
|
|
wx.showShareMenu({
|
|
withShareTicket: false,
|
|
// 显示菜单
|
|
menus: ['shareAppMessage', 'shareTimeline'],
|
|
success: (res) => {
|
|
console.log("开始被动转发shareMenu成功");
|
|
},
|
|
fail: () => {
|
|
console.log("开始被动转发shareMenu失败");
|
|
}
|
|
});
|
|
let shareTitle = this.shareTilt
|
|
let imageUrl = this.shareImageUrl
|
|
// 好友点击回调
|
|
wx.onShareAppMessage(() => {
|
|
return {
|
|
// 转发标题, 没有则默认使用小游戏的昵称
|
|
title: shareTitle,
|
|
// 图片链接,
|
|
imageUrl: imageUrl
|
|
};
|
|
});
|
|
// 朋友圈点击回调
|
|
wx.onShareTimeline(() => {
|
|
return {
|
|
title: shareTitle,
|
|
imageUrl: imageUrl
|
|
};
|
|
});
|
|
}
|
|
|
|
showBanner() {
|
|
this.bannerAdv.show()
|
|
}
|
|
|
|
hideBanner() {
|
|
this.bannerAdv.hide()
|
|
}
|
|
|
|
showInterstitial() {
|
|
// 在适合的场景显示插屏广告
|
|
if (this.interstitialAd) {
|
|
this.interstitialAd.show().catch((err) => {
|
|
console.error(err)
|
|
})
|
|
}
|
|
|
|
}
|
|
|
|
showVideo(successCallback, failCallback) {
|
|
// 用户触发广告后,显示激励视频广告
|
|
|
|
if (this.videoUid == "test" || this.videoUid == "") {
|
|
successCallback()
|
|
return
|
|
}
|
|
let self = this
|
|
self.videoAdv.show().catch(() => {
|
|
// 失败重试
|
|
self.videoAdv.load()
|
|
.then(() => self.videoAdv.show())
|
|
.catch(err => {
|
|
console.log('激励视频 广告显示失败')
|
|
failCallback()
|
|
})
|
|
})
|
|
//拉取异常处理
|
|
self.videoAdv.onError((err) => {
|
|
console.log(err);
|
|
failCallback()
|
|
})
|
|
self.videoAdv.onClose((res) => {
|
|
if (!self.videoAdv) return;
|
|
self.videoAdv.offClose();//需要清除回调,否则第N次广告会一次性给N个奖励
|
|
//关闭
|
|
if (res && res.isEnded || res === undefined) {
|
|
//正常播放结束,需要下发奖励
|
|
successCallback()
|
|
} else {
|
|
//播放退出,不下发奖励
|
|
failCallback()
|
|
}
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|