#Uniapp: 订阅requestSubscribeMessage

没返回状态

import { templateId } from '@/config';

/**
 * 主函数:检查订阅消息权限并请求订阅
 * @param {Function} callback 回调函数
 */
export const callbackSubscribe = (callback) => {
   checkSubscribePermission(callback);
};

/**
 * 检查订阅消息权限
 * @param {Function} callback 回调函数
 */
const checkSubscribePermission = (callback) => {
  uni.getSetting({
    withSubscriptions: true, 
    success: (res) => {
      const subscriptionSetting = res.subscriptionsSetting || {};
      console.log("检查订阅消息权限", subscriptionSetting)

      if (subscriptionSetting.mainSwitch === true) {
        if (subscriptionSetting.itemSettings && subscriptionSetting.itemSettings[templateId] !== 'accept') {
          showSettingTip();
        } else {
          requestSubscribeMessageCall(callback);
        }
      } else {
        // 用户未开启订阅消息总开关,提示用户开启
        uni.showModal({
          title: '提示',
          content: '您未开启订阅消息权限,是否前往设置开启?',
          success: (modalRes) => {
            if (modalRes.confirm) {
              uni.openSetting({
                success: (settingRes) => {
                  console.log('未开启订阅设置页面打开成功', settingRes);
                },
                fail: (err) => {
                  console.error('未开启订阅打开设置页面失败', err);
                }
              });
            } 
          }
        });
      }
    },
    fail: (err) => {
      console.error('检查订阅消息权限失败', err);
    }
  });
};

/**
 * 请求订阅消息
 * @param {Function} callback 回调函数
 */
const requestSubscribeMessageCall = (callback) => {
  uni.requestSubscribeMessage({
    tmplIds: [templateId], // 需要订阅的模板ID
    success: (subscriptionRes) => {
      console.log("请求订阅消息", subscriptionRes)
      if (subscriptionRes[templateId] === 'accept') {
        // 用户同意订阅
        callback && callback();
      } else {
        // 用户拒绝订阅
        console.log('用户拒绝了订阅');
        // 提示用户前往设置页面重新授权
      }
    },
    fail: (err) => {
      console.error('订阅失败:', err);
    }
  });
}

/**
 * 提示用户前往设置页面重新授权
 * @param {Function} callback 回调函数
 */
const showSettingTip = (callback) => {
  uni.showModal({
    title: '提示',
    content: '您拒绝了订阅消息,是否前往设置页面重新授权?',
    success: (res) => {
      console.log("提示用户前往设置页面重新授权", res);
      if (res.confirm) {
        // 用户点击确认,打开设置页面
        uni.openSetting({
          success: (settingRes) => {
            console.log('设置页面打开成功', settingRes);
          },
          fail: (err) => {
            console.error('打开设置页面失败', err);
          }
        });
      }
    }
  });
};

有返回状态

import { templateId } from '@/config';

/**
 * 主函数:检查订阅消息权限并请求订阅
 * @param {Function} callback 回调函数, 接收一个布尔参数表示是否成功订阅
 */
export const callbackSubscribe = (callback) => {
  checkAndRequestSubscribe(callback);
};

/**
 * 检查订阅消息权限并请求订阅
 * @param {Function} callback 回调函数, 接收一个布尔参数表示是否成功订阅
 */
const checkAndRequestSubscribe = async (callback) => {
  try {
    const settingResult = await getSettingWithSubscriptions();
    const subscriptionSetting = settingResult.subscriptionsSetting || {};
    
    if (!subscriptionSetting.mainSwitch) {
      // 用户未开启订阅消息总开关,提示用户开启
      await promptToEnableMainSwitch(callback);
      return;
    }

    if (subscriptionSetting.itemSettings && subscriptionSetting.itemSettings[templateId] !== 'accept') {
      // 提示用户前往设置页面重新授权
      await promptToReauthorize(callback);
      return;
    }

    // 请求订阅消息
    const subscribed = await requestSubscribeMessage();
    callback(subscribed);
  } catch (error) {
    console.error('处理订阅过程中发生错误:', error);
    callback(false);
  }
};

/**
 * 获取设置信息(包含订阅状态)
 * @returns {Promise<Object>} 设置信息
 */
const getSettingWithSubscriptions = () => new Promise((resolve, reject) => {
  uni.getSetting({
    withSubscriptions: true,
    success: resolve,
    fail: reject
  });
});

/**
 * 提示用户开启订阅消息总开关
 * @param {Function} callback 回调函数, 接收一个布尔参数表示是否成功订阅
 */
const promptToEnableMainSwitch = (callback) => new Promise((resolve) => {
  uni.showModal({
    title: '提示',
    content: '您未开启订阅消息权限,是否前往设置开启?',
    success: (modalRes) => {
      if (modalRes.confirm) {
        openSetting().then(() => resolve());
      } else {
        callback(false);
      }
    }
  });
});

/**
 * 提示用户前往设置页面重新授权
 * @param {Function} callback 回调函数, 接收一个布尔参数表示是否成功订阅
 */
const promptToReauthorize = (callback) => new Promise((resolve) => {
  uni.showModal({
    title: '提示',
    content: '您拒绝了订阅消息,是否前往设置页面重新授权?',
    success: (res) => {
      if (res.confirm) {
        openSetting().then(() => resolve());
      } else {
        callback(false);
      }
    }
  });
});

/**
 * 打开设置页面
 * @returns {Promise<void>}
 */
const openSetting = () => new Promise((resolve, reject) => {
  uni.openSetting({
    success: (settingRes) => {
      console.log('设置页面打开成功', settingRes);
      resolve();
    },
    fail: (err) => {
      console.error('打开设置页面失败', err);
      reject(err);
    }
  });
});

/**
 * 请求订阅消息
 * @returns {Promise<boolean>} 是否成功订阅
 */
const requestSubscribeMessage = () => new Promise((resolve) => {
  uni.requestSubscribeMessage({
    tmplIds: [templateId], // 需要订阅的模板ID
    success: (subscriptionRes) => {
      console.log("请求订阅消息", subscriptionRes);
      resolve(subscriptionRes[templateId] === 'accept');
    },
    fail: (err) => {
      console.error('订阅失败:', err);
      resolve(false);
    }
  });
});

微信小程序发送订阅推送

https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/mp-message-management/subscribe-message/sendMessage.html

请求
// 发送数据示例 数据示例
const cloud = require('wx-server-sdk')
cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV,
})
exports.main = async (event, context) => {
  try {
    const result = await cloud.openapi.subscribeMessage.send({
        "touser": 'OPENID',
        "page": 'index',
        "lang": 'zh_CN',
        "data": {
          "number01": {
            "value": '339208499'
          },
          "date01": {
            "value": '2015年01月05日'
          },
          "site01": {
            "value": 'TIT创意园'
          },
          "site02": {
            "value": '广州市新港中路397号'
          }
        },
        "templateId": 'TEMPLATE_ID',
        "miniprogramState": 'developer' // 开发版本
      })
    return result
  } catch (err) {
    return err
  }
} 

返回数据示例

{
"errcode":0,
"errmsg":"ok"
} 
uniapp中,订阅消息授权是一个重要的功能,允许应用程序向用户发送推送通知。以下是实现订阅消息授权的基本步骤: 1. **配置小程序权限**: 在`manifest.json`文件中配置小程序的权限,确保已经启用了消息订阅权限。 2. **请求用户授权**: 使用`uni.requestSubscribeMessage`方法向用户请求消息订阅授权。该方法会弹出一个对话框,询问用户是否同意接收订阅消息。 3. **处理授权结果**: 处理用户授权的结果,根据用户的同意或拒绝进行相应的处理。 以下是一个示例代码,展示了如何在uniapp中实现订阅消息授权: ```javascript uni.requestSubscribeMessage({ tmplIds: ['template-id-1', 'template-id-2'], // 替换为你的模板ID success(res) { console.log('订阅消息授权成功', res); // 处理授权成功的结果 }, fail(err) { console.error('订阅消息授权失败', err); // 处理授权失败的结果 } }); ``` ### 步骤详解 1. **配置小程序权限**: 在`manifest.json`文件中,找到对应的小程序平台配置,添加`permission`字段。例如,对于微信小程序: ```json { "mp-weixin": { "permission": { "subscribeMessage": { "desc": "你的小程序需要向你发送订阅消息" } } } } ``` 2. **请求用户授权**: 在需要请求授权的地方,调用`uni.requestSubscribeMessage`方法。`tmplIds`是一个数组,包含你需要在用户同意后使用的模板ID。 3. **处理授权结果**: 在`success`回调中处理用户同意授权的结果,在`fail`回调中处理用户拒绝授权的结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值