uni-app 3.99 unipush1.0 ios在app前台时会自动显示系统推送

uni-app 3.99 unipush1.0 ios在app前台时会自动显示系统推送

6 回复

调用个推推送接口需要调用透传消息接口

更多关于uni-app 3.99 unipush1.0 ios在app前台时会自动显示系统推送的实战教程也可以访问 https://www.itying.com/category-93-b0.html


感谢回答,但我想表达的不是这个意思。我之前app打包工程的版本是3.2.16,这个旧版本里我已经在前端业务代码里对ios的推送接收和显示做了处理:在plus.push.addEventListener(“receive”) 这个监听器内针对ios的透传消息调用plus.push.createMessage这个接口去实现了app处于前台的时候显示消息推送弹窗

但是后面我把打包工程更新到3.99版本后,我业务代码没做任何改动的情况下,后台调用接口发送推送给ios设备的时候,如果ios设备上的app处于前台,则会弹出两条一模一样的推送

感谢回答,我看看

在 uni-app 3.99 中使用 UniPush 1.0 时,iOS 设备在应用前台时自动显示系统推送消息,可能是因为 UniPush 在前台时默认会将消息以系统通知的形式展示。这通常是为了确保用户能够及时收到重要的推送消息。

解决方案

如果你不希望在前台时显示系统推送消息,可以通过以下方式进行控制:

1. 在前台时手动处理推送消息

你可以在接收到推送消息时,判断应用是否在前台,如果是前台则不显示系统通知,而是通过自定义的方式(如弹窗、Toast 等)展示消息。

// 在 App.vue 或其他合适的地方监听推送消息
uni.onPushMessage((res) => {
    if (uni.getSystemInfoSync().platform === 'ios') {
        // 判断应用是否在前台
        if (uni.getAppBaseInfo().appState === 'active') {
            // 应用在前台,自定义处理推送消息
            console.log('收到推送消息(前台):', res);
            uni.showToast({
                title: '收到推送消息:' + res.content,
                icon: 'none'
            });
        } else {
            // 应用在后台,允许显示系统通知
            console.log('收到推送消息(后台):', res);
        }
    }
});

2. 配置 UniPush 的前台通知行为

UniPush 提供了配置项,可以控制在前台时是否显示系统通知。你可以在 manifest.json 中进行配置。

{
  "app-plus": {
    "distribute": {
      "ios": {
        "unipush": {
          "foregroundNotification": false // 设置为 false 时,前台不显示系统通知
        }
      }
    }
  }
}

3. 使用 uni.setPushStatus 控制推送状态

你可以在应用启动时动态控制推送状态,例如在前台时禁用系统通知。

// 在 App.vue 的 onLaunch 方法中
onLaunch: function() {
    // 判断应用是否在前台
    if (uni.getAppBaseInfo().appState === 'active') {
        // 前台时禁用系统通知
        uni.setPushStatus({
            status: false
        });
    } else {
        // 后台时启用系统通知
        uni.setPushStatus({
            status: true
        });
    }
}
回到顶部