uniapp小程序 订阅消息推送 ,单个模板和多个模板以及用户拒绝的再次提醒的处理
1. 单个模板处理
js
复制代码
// 订阅赛事通知
function subscribeMessage() {
//信息模版id
let pushReservationTmplIds = '87E-QdnkhI5EI0oS'
uni.getSetting({
withSubscriptions: true,
success(res) {
let {
authSetting = {},
subscriptionsSetting: { mainSwitch = false, itemSettings = {} } = {},
} = res
console.log(res)
// 检测不在询问
if (!mainSwitch) {
guideOpenSubscribeMessage(pushReservationTmplIds)
} else {
uni.requestSubscribeMessage({
tmplIds: [pushReservationTmplIds],
success(res) {
console.log('已成功订阅赛事通知', res)
if (res[pushReservationTmplIds] === 'accept') {
uni.showToast({
title: '赛事通知已推送至微信',
icon: 'none',
})
} else if (res[pushReservationTmplIds] === 'reject') {
guideOpenSubscribeMessage(pushReservationTmplIds)
} else {
}
},
fail(res) {
console.log('订阅失败', res)
},
})
}
},
})
}
//检测开启拒绝以及不接收提醒
function guideOpenSubscribeMessage(pushReservationTmplIds) {
console.log('引导用户开启订阅消息权限')
// 检查是否已经选择"今日不提醒"
let todayNoRemind = uni.getStorageSync('today_no') || ''
let today = new Date().getTime()
console.log('今日不提醒记录:', todayNoRemind, '今日日期:', today)
// 如果今天已经选择不提醒,则直接返回
let boolean = false
boolean = new Date(todayNoRemind).toDateString() === new Date(today).toDateString()
if (boolean) {
return
}
console.log(boolean)
console.log('提示')
uni.showModal({
title: '提示',
content: '为了您能享受更好的赛事体验,建议您授权赛事订阅消息',
cancelText: '取消提醒',
confirmText: '前往设置',
success: (res) => {
if (res.confirm) {
uni.openSetting({
success(settingData) {
console.log(settingData, 'settingData')
uni.getSetting({
withSubscriptions: true,
success(res) {
let {
authSetting = {},
subscriptionsSetting: { mainSwitch = false, itemSettings = {} } = {},
} = res
console.log(res)
if (
(authSetting['scope.subscribeMessage'] || mainSwitch) &&
itemSettings[pushReservationTmplIds] === 'accept'
) {
uni.showToast({
title: '赛事通知已订阅,下一次报名生效',
icon: 'none',
duration: 3500,
})
uni.removeStorageSync('today_no')
// console.log('用户手动开启同意了,订阅消息');
} else {
}
},
})
},
})
} else if (res.cancel) {
// 用户选择"今日不提醒",记录当前日期
let today = new Date().getTime()
uni.setStorageSync('today_no', today)
uni.showToast({
title: '今日不再提醒,如需提醒请前往小程序设置开启',
icon: 'none',
duration: 3500,
})
console.log('用户选择今日不提醒订阅消息')
}
},
})
}
2.多个模板处理
js
复制代码
// 订阅赛事通知
function subscribeMessage() {
// 修复:将模板ID改为数组,包含三个模板ID
let pushReservationTmplIds = [
'0W3viTw4YYp75h20zCv5_',
'p5dNFUqwSmjHeiZ7VgxCe',
'87E-QdnkhI5EI0oS-pV7tQc6VjqSw',
]
uni.getSetting({
withSubscriptions: true,
success(res) {
let {
authSetting = {},
subscriptionsSetting: { mainSwitch = false, itemSettings = {} } = {},
} = res
console.log(res, mainSwitch)
console.log(itemSettings)
let itemAccepted = 0
if (Array.isArray(pushReservationTmplIds)) {
pushReservationTmplIds.forEach((tmplId) => {
if (itemSettings[tmplId] === 'accept') {
itemAccepted++
}
})
}
// 检测不在询问
if (!mainSwitch) {
guideOpenSubscribeMessage(pushReservationTmplIds, itemAccepted)
} else {
uni.requestSubscribeMessage({
tmplIds: pushReservationTmplIds, // 修复:直接使用数组
success(res) {
console.log('已成功订阅赛事通知', res)
// 修复:检查所有模板ID的授权状态
let acceptedCount = 0
pushReservationTmplIds.forEach((tmplId) => {
if (res[tmplId] === 'accept') {
acceptedCount++
}
})
if (acceptedCount >= pushReservationTmplIds.length) {
console.log(`成功订阅了${acceptedCount}个模板消息`)
} else {
guideOpenSubscribeMessage(pushReservationTmplIds, itemAccepted)
}
},
fail(res) {
console.log('订阅失败', res)
},
})
}
},
})
}
function guideOpenSubscribeMessage(pushReservationTmplIds, itemAccepted) {
console.log('引导用户开启订阅消息权限')
// 检查是否已经选择"今日不提醒"
let todayNoRemind = uni.getStorageSync('today_no') || ''
let today = new Date().getTime()
console.log('今日不提醒记录:', todayNoRemind, '今日日期:', today)
// 如果今天已经选择不提醒,则直接返回
let boolean = false
boolean = new Date(todayNoRemind).toDateString() === new Date(today).toDateString()
if (boolean) {
return
}
console.log('提示')
uni.showModal({
title: '提示',
content: '为了您能享受更好的赛事体验,建议您授权赛事订阅消息',
cancelText: '取消提醒',
confirmText: '前往设置',
success: (res) => {
if (res.confirm) {
uni.openSetting({
success(settingData) {
console.log(settingData, 'settingData')
uni.getSetting({
withSubscriptions: true,
success(res) {
let {
authSetting = {},
subscriptionsSetting: { mainSwitch = false, itemSettings = {} } = {},
} = res
console.log(res)
// 修复:检查是否有任意一个模板被授权
let hasAccepted = 0
if (Array.isArray(pushReservationTmplIds)) {
pushReservationTmplIds.forEach((tmplId) => {
if (itemSettings[tmplId] === 'accept') {
hasAccepted++
}
})
}
if (
(authSetting['scope.subscribeMessage'] || mainSwitch) &&
hasAccepted > itemAccepted
) {
uni.showToast({
title: '赛事通知已订阅,下一次报名生效',
icon: 'none',
duration: 3500,
})
uni.setStorageSync('needMessage', true)
uni.removeStorageSync('today_no')
}
},
})
},
})
} else if (res.cancel) {
// 用户选择"今日不提醒",记录当前日期
let today = new Date().getTime()
uni.setStorageSync('today_no', today)
uni.showToast({
title: '今日不再提醒,如需提醒请前往小程序设置开启',
icon: 'none',
duration: 3500,
})
console.log('用户选择今日不提醒订阅消息')
}
},
})
}```