123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175 |
- /**
- * @desc 小程序订阅功能
- * @param {Array} tmplIds 订阅列表
- * @returns {Promise} 返回promise
- */
- // 永久关闭订阅则代表点击了我不在接受此消息,再次订阅是无法弹起授权窗口的。普通关闭时可以再次弹起授权窗口。
- export const Subscribe = (tmplIds = []) => {
- return new Promise((resolve, reject) => {
- // 判断是否为微信小程序,不是的不做订阅进行跳过
- let isWx = false;
- // #ifdef MP-WEIXIN
- isWx = true;
- // #endif
- if (!isWx) resolve(1);
- console.log('进来了哟')
- // 判断基本库是否在2.8.3,低于的暂时不做订阅进行跳过
- const versionCan = compareVersion("2.8.3");
- if (versionCan === -1) resolve(1);
- // 主流程
- requestSubscribe(tmplIds, resolve, reject)
- })
- }
- // 申请订阅功能
- function requestSubscribe(tmplIds, resolve, reject) {
- uni.requestSubscribeMessage({
- tmplIds,
- success: async res => {
- // 检查订阅数量
- let checkSubscribeBool = await checkSubscribeAll(tmplIds, res);
- if (checkSubscribeBool) {
- // 用户完成订阅
- console.log("[用户完成订阅]")
- resolve(1);
- } else {
- // 跳去检查永久关闭订阅还是普通关闭订阅
- guidSubscribeMessageAuthAfter(tmplIds, resolve, reject);
- }
- },
- fail: res => {
- console.log(res, "订阅,失败");
- if (res.errCode == 20004) {
- // console.log(res, 'fail:用户关闭了主开关,无法进行订阅,引导开启---');
- guideOpenSubscribeMessage(tmplIds, resolve, reject);
- }
- return
- }
- })
- }
- // 计算用户订阅消息的数量
- function checkSubscribeAll(tmplIds, res) {
- // 将accept的生成一个数组,判断申请的订阅消息是不是已经订阅消息的子集
- let arr = [];
- for (const key of Object.keys(res)) {
- if (res[key] === 'accept') {
- arr.push(key);
- }
- }
- if (arr.length == tmplIds.length) {
- console.log('订阅完毕')
- return true
- } else {
- console.log('没订阅或者少订阅')
- return false
- }
- }
- // 检查用户是否授权完毕(检查时永久关闭还是普通关闭)
- function guidSubscribeMessageAuthAfter(tmplIds, resolve, reject) {
- uni.getSetting({
- withSubscriptions: true,
- success: async res => {
- let {
- authSetting = {},
- subscriptionsSetting: { mainSwitch = false, itemSettings = {} } = {}
- } = res;
- if (Object.keys(itemSettings).length == 0) { // 这种情况是普通关闭
- uni.showModal({
- title: "温馨提示",
- content: "同意订阅才能及时获取提货通知哦",
- confirmText: "重新订阅",
- cancelText: "我再看看",
- success: res => {
- if (res.confirm) {
- // 重新调起授权订阅
- requestSubscribe(tmplIds, resolve, reject);
- } else if (res.cancel) {
- //没成功订阅,返回reject
- reject(2);
- }
- }
- });
- } else { // 这种是订阅成功或永久关闭
- let checkSubscribeBool = await checkSubscribeAll(tmplIds, itemSettings);
- if (
- authSetting["scope.subscribeMessage"] ||
- (mainSwitch && checkSubscribeBool)
- ) {
- //成功
- console.log("用户手动开启同意了,订阅消息");
- resolve(1);
- } else {
- //失败,永久关闭
- guideOpenSubscribeMessage(tmplIds, resolve, reject);
- }
- }
- }
- });
- }
- //引导用户重新授权(永久关闭的方法)
- function guideOpenSubscribeMessage(tmplIds, resolve, reject) {
- // console.log(resolve, reject, 'rescovavasr1')
- uni.showModal({
- title: "温馨提示",
- content: "检测到您没有开启全部订阅消息的权限,是否去设置?",
- success: res => {
- if (res.confirm) {
- uni.openSetting({
- success: res => {
- // 在检查是否全部订阅完毕
- guidSubscribeMessageAuthAfter(tmplIds, resolve, reject);
- }
- });
- } else if (res.cancel) {
- // console.log(resolve, reject, 'rescovavasr2')
- uni.showModal({
- title: "温馨提示",
- content: "同意订阅才能及时获取提货通知哦",
- showCancel: false,
- confirmText: "我知道了"
- });
- reject(2);
- }
- }
- });
- }
- // 比较版本号
- function compareVersion(v2) {
- let { SDKVersion: v1 } = uni.getSystemInfoSync();
- v1 = v1.split(".");
- v2 = v2.split(".");
- const len = Math.max(v1.length, v2.length);
- while (v1.length < len) {
- v1.push("0");
- }
- while (v2.length < len) {
- v2.push("0");
- }
- for (let i = 0; i < len; i++) {
- const num1 = parseInt(v1[i]);
- const num2 = parseInt(v2[i]);
- if (num1 > num2) {
- return 1;
- } else if (num1 < num2) {
- return -1;
- }
- }
- return 0;
- }
|