uni-app ios 角标无法消除

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

uni-app ios 角标无法消除

操作步骤:

  • 点击应用-打开应用

预期结果:

  • 打开应用后退出,角标应该消失

实际结果:

  • 角标依然存在

bug描述:

  • 应用收到消息推送后,角标只能增加无法消除 使用plus.push.clear() 或者plus.runtime.setBadgeNumber(0),plus.runtime.setBadgeNumber(-1)都无法消除角标
信息类别 信息内容
产品分类 uniapp/App
PC开发环境 Windows
PC开发环境版本 win11
HBuilderX类型 正式
HBuilderX版本 4.29
手机系统 iOS
手机系统版本 iOS 18
手机厂商 苹果
手机机型 iOS 12 Pro
页面类型 vue
vue版本 vue2
打包方式 云端
项目创建方式 HBuilderX

2 回复

收到通知,你就加了plus.runtime.setBadgeNumber(0)么? 你收到的是在线还是离线啊
我就直接在App.vue中的onShow中,加的plus.runtime.setBadgeNumber(0);每次点开是好使的


在uni-app开发中,iOS应用角标(应用图标右上角的数字)的管理通常涉及到原生代码部分,因为uni-app本身是一个跨平台框架,它依赖原生插件或原生代码来实现一些特定平台的功能。角标的设置和清除通常需要与iOS的原生代码进行交互。

以下是一个基本的流程,展示如何在uni-app中通过原生插件或原生代码来清除iOS角标。由于直接操作iOS角标需要原生开发知识,这里将提供一个概念性的示例,说明如何在iOS原生代码中实现角标的清除,并如何在uni-app中调用这部分原生代码。

iOS原生代码(Objective-C/Swift)

首先,在iOS项目中,你可以使用以下代码来清除应用角标:

Objective-C:

[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];

Swift:

UIApplication.shared.applicationIconBadgeNumber = 0

uni-app调用原生插件

为了在uni-app中调用这段原生代码,你需要创建一个原生插件。以下是插件的基本结构:

  1. 创建插件目录结构

    plugins/
    └── my-badge-plugin/
        ├── ios/
        │   └── Classes/
        │       └── MyBadgePlugin.m (或 MyBadgePlugin.swift)
        ├── plugin.json
    
  2. 编写plugin.json

    {
      "id": "my-badge-plugin",
      "version": "1.0.0",
      "name": "My Badge Plugin",
      "description": "A plugin to manage application icon badge number on iOS",
      "platform": "ios",
      "provider": "your_name"
    }
    
  3. 编写MyBadgePlugin.m/MyBadgePlugin.swift: 实现一个方法来清除角标,并导出给JavaScript调用。

    Objective-C:

    #import <Foundation/Foundation.h>
    
    [@interface](/user/interface) MyBadgePlugin : NSObject <JSExport>
    
    - (void)clearBadge;
    
    [@end](/user/end)
    
    [@implementation](/user/implementation) MyBadgePlugin
    
    - (void)clearBadge {
        [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];
    }
    
    [@end](/user/end)
    

    Swift:(需要桥接头文件)

    [@objc](/user/objc) class MyBadgePlugin: NSObject, JSExport {
        [@objc](/user/objc) func clearBadge() {
            UIApplication.shared.applicationIconBadgeNumber = 0
        }
    }
    
  4. 在uni-app中调用插件: 使用plus.bridge.exec方法调用原生插件的方法。

    plus.bridge.exec('my-badge-plugin', 'clearBadge', [], function(e) {
        console.log('Badge cleared:', e);
    });
    

请注意,上述代码是一个简化的示例,实际开发中可能还需要考虑插件的注册、错误处理、权限管理等因素。此外,确保你的uni-app项目已经正确配置原生插件的集成。

回到顶部