feat: 完成三类字母描红开发

This commit is contained in:
R524809
2026-04-17 15:59:55 +08:00
parent 6c98e96506
commit 15ad5cce75
13 changed files with 565 additions and 233 deletions
+41 -17
View File
@@ -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) {