feat: 优化订阅逻辑
This commit is contained in:
+10
-1
@@ -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', {
|
||||||
|
|||||||
+50
-16
@@ -3,39 +3,73 @@
|
|||||||
* 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) {
|
||||||
wx.showModal({
|
if (!silent) {
|
||||||
title: '提示',
|
wx.showModal({
|
||||||
content: '请在设置中开启订阅消息通知',
|
title: '提示',
|
||||||
confirmText: '去开启',
|
content: '订阅通知主开关已关闭,请在设置中开启',
|
||||||
success: (modalRes) => {
|
confirmText: '去开启',
|
||||||
if (modalRes.confirm) {
|
success: (modalRes) => {
|
||||||
wx.openSetting();
|
if (modalRes.confirm) {
|
||||||
|
wx.openSetting();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
});
|
} else {
|
||||||
|
console.warn('[Subscribe] Main subscription switch is OFF');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
resolve({ success: false, error: err });
|
resolve({ success: false, error: err, isMainSwitchOff: err.errCode === 20004 });
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user