feat: 优化订阅逻辑

This commit is contained in:
Blizzard
2026-03-09 09:12:33 +08:00
parent 2031e788b0
commit 40f3a8cfa8
2 changed files with 60 additions and 17 deletions
+10 -1
View File
@@ -242,7 +242,16 @@ Page({
// Attempt to subscribe (silent mode avoids error popups if disabled) // Attempt to subscribe (silent mode avoids error popups if disabled)
// This encourages "Always Allow" behavior for seamless experience // This encourages "Always Allow" behavior for seamless experience
requestSubscription(undefined, true).then(() => { requestSubscription(undefined, true).then((subResult) => {
// Debug failure feedback
if (!subResult.success) {
if (subResult.isMainSwitchOff) {
wx.showToast({ title: '提醒总开关已关闭', icon: 'none' });
} else {
console.log('[Task] Subscription quota not increased:', subResult.res || subResult.error);
}
}
wx.showLoading({ title: '提交中...', mask: true }); wx.showLoading({ title: '提交中...', mask: true });
request.post('/plant/completeTask', { request.post('/plant/completeTask', {
+42 -8
View File
@@ -3,30 +3,61 @@
* Template ID: iG5GYMPQAgKxIE9zZNOgKS6tCURhM9p9AC8iZ3Uj3uA * Template ID: iG5GYMPQAgKxIE9zZNOgKS6tCURhM9p9AC8iZ3Uj3uA
*/ */
const DEFAULT_TEMPLATE_ID = 'iG5GYMPQAgKxIE9zZNOgKS6tCURhM9p9AC8iZ3Uj3uA'; const DEFAULT_TEMPLATE_ID = 'iG5GYMPQAgKxIE9zZNOgKS6tCURhM9p9AC8iZ3Uj3uA';
const MIN_SUB_INTERVAL = 5000; // Minimum 5 seconds between real requests
let lastSubTime = 0;
export const requestSubscription = (tmplIds = [DEFAULT_TEMPLATE_ID], silent = false) => { export const requestSubscription = (tmplIds = [DEFAULT_TEMPLATE_ID], silent = false) => {
return new Promise((resolve) => { return new Promise((resolve) => {
const now = Date.now();
// Throttling for silent requests to avoid "frequent request" errors
if (silent && (now - lastSubTime < MIN_SUB_INTERVAL)) {
console.log('[Subscribe] Throttled: Skipping real request to avoid frequency errors');
resolve({ success: true, throttled: true });
return;
}
if (!wx.requestSubscribeMessage) { if (!wx.requestSubscribeMessage) {
if (!silent) console.warn('Current version does not support subscribe message'); if (!silent) console.warn('当前版本不支持订阅消息');
resolve({ success: false, errMsg: 'Not supported' }); resolve({ success: false, errMsg: 'Not supported' });
return; return;
} }
// Update lastSubTime before the call
lastSubTime = now;
wx.requestSubscribeMessage({ wx.requestSubscribeMessage({
tmplIds: tmplIds, tmplIds: tmplIds,
success(res) { success(res) {
// If any of the requested IDs are accepted // Log detailed results for debugging
const isAccepted = tmplIds.some(id => res[id] === 'accept'); console.log('[Subscribe] Result:', res);
resolve({ success: isAccepted, res });
// Check if any requested IDs were accepted
const acceptedIds = tmplIds.filter(id => res[id] === 'accept');
const isAccepted = acceptedIds.length > 0;
// Identify if user has opted for "Always Reject"
const rejectedIds = tmplIds.filter(id => res[id] === 'reject');
if (rejectedIds.length > 0 && !silent) {
console.warn('[Subscribe] User rejected templates (possibly "Always Reject"):', rejectedIds);
}
resolve({
success: isAccepted,
res,
isAlwaysRejected: rejectedIds.length === tmplIds.length
});
}, },
fail(err) { fail(err) {
if (!silent) console.error('Subscription failed', err); console.error('[Subscribe] Request Failed:', err);
// 20004: User closed main switch in settings // 20004: User closed main switch in settings
if (err.errCode === 20004 && !silent) { if (err.errCode === 20004) {
if (!silent) {
wx.showModal({ wx.showModal({
title: '提示', title: '提示',
content: '请在设置中开启订阅消息通知', content: '订阅通知主开关已关闭,请在设置中开启',
confirmText: '去开启', confirmText: '去开启',
success: (modalRes) => { success: (modalRes) => {
if (modalRes.confirm) { if (modalRes.confirm) {
@@ -34,8 +65,11 @@ export const requestSubscription = (tmplIds = [DEFAULT_TEMPLATE_ID], silent = fa
} }
} }
}); });
} else {
console.warn('[Subscribe] Main subscription switch is OFF');
} }
resolve({ success: false, error: err }); }
resolve({ success: false, error: err, isMainSwitchOff: err.errCode === 20004 });
} }
}); });
}); });