uni-app 极光推送的权限申请高于原生隐私政策提示框

发布于 1周前 作者 songsunli 来自 Uni-App

uni-app 极光推送的权限申请高于原生隐私政策提示框

操作步骤:

  1. 使用极光推送
  2. 使用原生隐私政策提示框

华为手机可复现
设备机型:HUAWEI Mate X5
HarmonryOS版本:4.2.0
型号代码:ALT-AL 10

预期结果:

当原生隐私政策提示框 用户确认完毕后,才弹出推送权限申请

实际结果:

App启动时 极光推送的权限申请 高于 原生隐私政策提示框,必须等权限申请同意或者拒绝后,才弹出隐私协议

bug描述:

项目中使用原生隐私政策提示框 以及 极光推送插件
App启动时 极光推送的权限申请 高于 原生隐私政策提示框,必须等权限申请同意或者拒绝后,才弹出隐私协议
只有华为手机可复现
设备机型:HUAWEI Mate X5
HarmonryOS版本:4.2.0
型号代码:ALT-AL 10

压缩包内是视频,视频可从23秒处观看

附件

b1bbd34b696ac8878dc206236ed7e172.zip


3 回复

如果是插件申请的极光推送权限,请联系插件作者适配处理。不要在同意隐私政策前申请相关权限。


我试了一下好像跟极光推送没关系,我将模块配置push去掉勾选,那么权限申请就会等到隐私协议完成后再执行,但是极光就无法接收推送了

在处理uni-app中的极光推送(JPush)权限申请与原生隐私政策提示框的关系时,确保用户体验和合规性至关重要。以下是一个在uni-app中实现这一功能的代码示例,其中结合了JPush的权限申请和显示隐私政策提示框的逻辑。

首先,确保你已经在uni-app项目中集成了JPush插件。集成步骤可以参考极光推送的官方文档。

接下来,你可以在App.vueonLaunch方法中处理权限申请和隐私政策提示框的逻辑。以下是一个示例代码:

// App.vue
<script>
export default {
  onLaunch() {
    // 检查是否已经显示过隐私政策提示框
    const hasShownPolicy = uni.getStorageSync('hasShownPolicy') || false;

    if (!hasShownPolicy) {
      // 显示隐私政策提示框
      uni.showModal({
        title: '隐私政策',
        content: '为了提供更好的服务,我们需要申请通知权限。请阅读并同意我们的隐私政策。',
        showCancel: true,
        cancelText: '不同意',
        confirmText: '同意并继续',
        success: (res) => {
          if (res.confirm) {
            // 用户同意,申请通知权限
            this.requestNotificationPermission();
            // 标记为已显示隐私政策提示框
            uni.setStorageSync('hasShownPolicy', true);
          } else if (res.cancel) {
            // 用户不同意,处理拒绝逻辑(如退出应用或限制功能)
            console.log('用户拒绝了隐私政策');
            // 这里可以添加退出应用的逻辑,但注意用户体验
            // uni.exitApp();
          }
        }
      });
    } else {
      // 已经显示过隐私政策提示框,直接申请通知权限
      this.requestNotificationPermission();
    }
  },
  methods: {
    requestNotificationPermission() {
      #ifdef APP-PLUS
      uni.requestSubscribeMessage({
        tmplIds: ['your-template-id'], // 替换为你的模板ID
        success: (res) => {
          console.log('订阅消息申请结果:', res);
          // 在这里初始化JPush
          plus.push.getClientInfo((msg) => {
            console.log('JPush初始化结果:', msg);
          });
        },
        fail: (err) => {
          console.error('订阅消息申请失败:', err);
        }
      });
      #endif
    }
  }
}
</script>

注意:

  1. 上述代码中的uni.requestSubscribeMessage用于申请订阅消息权限,这是H5+ App(即uni-app打包成原生应用)中的方式。对于纯粹的H5页面,需要使用浏览器的Notification API。
  2. tmplIds应替换为你实际使用的模板ID。
  3. 隐私政策提示框的内容应根据你的应用实际情况进行调整。
  4. 在实际应用中,应确保隐私政策链接有效且内容合规。

通过上述代码,你可以在用户首次启动应用时显示隐私政策提示框,并在用户同意后申请通知权限,从而符合隐私政策的要求。

回到顶部