62 lines
1.2 KiB
JavaScript
62 lines
1.2 KiB
JavaScript
|
|
const config = require("../config/index");
|
||
|
|
|
||
|
|
function showRewardedVideoAd() {
|
||
|
|
return new Promise((resolve, reject) => {
|
||
|
|
if (!config.adUnitId) {
|
||
|
|
console.warn("adUnitId 未配置,跳过广告流程(仅限开发环境)");
|
||
|
|
resolve("ad_skipped");
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
if (typeof tt === "undefined" || !tt.createRewardedVideoAd) {
|
||
|
|
reject(new Error("rewarded_ad_unavailable"));
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
const ad = tt.createRewardedVideoAd({
|
||
|
|
adUnitId: config.adUnitId
|
||
|
|
});
|
||
|
|
|
||
|
|
const cleanup = () => {
|
||
|
|
if (!ad) {
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
if (ad.offLoad) {
|
||
|
|
ad.offLoad();
|
||
|
|
}
|
||
|
|
if (ad.offError) {
|
||
|
|
ad.offError();
|
||
|
|
}
|
||
|
|
if (ad.offClose) {
|
||
|
|
ad.offClose();
|
||
|
|
}
|
||
|
|
};
|
||
|
|
|
||
|
|
ad.onError((error) => {
|
||
|
|
cleanup();
|
||
|
|
reject(error);
|
||
|
|
});
|
||
|
|
|
||
|
|
ad.onClose((result = {}) => {
|
||
|
|
cleanup();
|
||
|
|
if (result.isEnded) {
|
||
|
|
resolve();
|
||
|
|
} else {
|
||
|
|
const err = new Error("ad_not_completed");
|
||
|
|
err.code = "ad_not_completed";
|
||
|
|
reject(err);
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
ad
|
||
|
|
.load()
|
||
|
|
.then(() => ad.show())
|
||
|
|
.catch((error) => {
|
||
|
|
cleanup();
|
||
|
|
reject(error);
|
||
|
|
});
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
module.exports = {
|
||
|
|
showRewardedVideoAd
|
||
|
|
};
|