feat: 完成三类字母描红开发
This commit is contained in:
@@ -14,6 +14,25 @@ const STORAGE_KEY_WATCHED_AD_TODAY = 'watchedAdToday';
|
||||
// 免费下载次数限制
|
||||
const FREE_DOWNLOAD_LIMIT = 5;
|
||||
|
||||
/**
|
||||
* 开发调试环境:本地 develop 包或开发者工具(含桌面模拟器)
|
||||
* 此环境下不弹广告、不限制下载次数
|
||||
*/
|
||||
function isDevBypassLimits(): boolean {
|
||||
try {
|
||||
const env = wx.getAccountInfoSync().miniProgram.envVersion || 'release';
|
||||
if (env === 'develop') {
|
||||
return true;
|
||||
}
|
||||
if (wx.getSystemInfoSync().platform === 'devtools') {
|
||||
return true;
|
||||
}
|
||||
} catch {
|
||||
// ignore
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// 激励视频广告单元ID
|
||||
const AD_UNIT_ID = 'adunit-eff5626f8b68c2e0';
|
||||
|
||||
@@ -34,7 +53,7 @@ function getTodayDateString(): string {
|
||||
export function getTodayDownloadCount(): number {
|
||||
const today = getTodayDateString();
|
||||
const downloadDate = wx.getStorageSync(STORAGE_KEY_DOWNLOAD_DATE);
|
||||
|
||||
|
||||
// 如果不是今天,重置计数
|
||||
if (downloadDate !== today) {
|
||||
wx.setStorageSync(STORAGE_KEY_DOWNLOAD_COUNT, 0);
|
||||
@@ -42,7 +61,7 @@ export function getTodayDownloadCount(): number {
|
||||
wx.setStorageSync(STORAGE_KEY_WATCHED_AD_TODAY, false);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
return wx.getStorageSync(STORAGE_KEY_DOWNLOAD_COUNT) || 0;
|
||||
}
|
||||
|
||||
@@ -80,19 +99,19 @@ function createVideoAd() {
|
||||
if (!wx.createRewardedVideoAd) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
const videoAd = wx.createRewardedVideoAd({
|
||||
adUnitId: AD_UNIT_ID,
|
||||
});
|
||||
|
||||
|
||||
videoAd.onLoad(() => {
|
||||
console.log('激励视频广告加载成功');
|
||||
});
|
||||
|
||||
|
||||
videoAd.onError((err) => {
|
||||
console.error('激励视频广告加载失败', err);
|
||||
});
|
||||
|
||||
|
||||
return videoAd;
|
||||
}
|
||||
|
||||
@@ -102,7 +121,7 @@ function createVideoAd() {
|
||||
function showVideoAd(): Promise<boolean> {
|
||||
return new Promise((resolve) => {
|
||||
const videoAd = createVideoAd();
|
||||
|
||||
|
||||
if (!videoAd) {
|
||||
wx.showToast({
|
||||
title: '当前环境不支持激励广告',
|
||||
@@ -111,18 +130,18 @@ function showVideoAd(): Promise<boolean> {
|
||||
resolve(false);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
// 显示 loading
|
||||
wx.showLoading({
|
||||
title: '加载中...',
|
||||
mask: true,
|
||||
});
|
||||
|
||||
|
||||
// 监听广告关闭事件
|
||||
videoAd.onClose((res) => {
|
||||
// 隐藏 loading(如果还在显示)
|
||||
wx.hideLoading();
|
||||
|
||||
|
||||
if (res && res.isEnded) {
|
||||
// 用户完整观看了广告
|
||||
markWatchedAdToday();
|
||||
@@ -132,7 +151,7 @@ function showVideoAd(): Promise<boolean> {
|
||||
resolve(false);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
// 显示广告
|
||||
videoAd
|
||||
.show()
|
||||
@@ -186,10 +205,10 @@ function doDownload(
|
||||
tracker.reportDownload(options.trackerName);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// 增加下载次数
|
||||
incrementDownloadCount();
|
||||
|
||||
|
||||
// 执行下载(checkAndSaveImage 内部已有成功提示,这里不需要额外处理)
|
||||
checkAndSaveImage(canvas);
|
||||
}
|
||||
@@ -220,23 +239,28 @@ export async function downloadPrint(
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
if (isDevBypassLimits()) {
|
||||
doDownload(canvas, options);
|
||||
return;
|
||||
}
|
||||
|
||||
// 获取今日下载次数
|
||||
const downloadCount = getTodayDownloadCount();
|
||||
const hasWatchedAd = hasWatchedAdToday();
|
||||
|
||||
|
||||
// 如果已观看广告,直接下载
|
||||
if (hasWatchedAd) {
|
||||
doDownload(canvas, options);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
// 如果未超过免费次数,直接下载
|
||||
if (downloadCount < FREE_DOWNLOAD_LIMIT) {
|
||||
doDownload(canvas, options);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
// 超过免费次数,需要观看广告
|
||||
const watched = await showVideoAd();
|
||||
if (watched) {
|
||||
|
||||
Reference in New Issue
Block a user