uni-app ios 角标无法消除
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 |
收到通知,你就加了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中调用这段原生代码,你需要创建一个原生插件。以下是插件的基本结构:
-
创建插件目录结构:
plugins/ └── my-badge-plugin/ ├── ios/ │ └── Classes/ │ └── MyBadgePlugin.m (或 MyBadgePlugin.swift) ├── plugin.json
-
编写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" }
-
编写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 } }
-
在uni-app中调用插件: 使用
plus.bridge.exec
方法调用原生插件的方法。plus.bridge.exec('my-badge-plugin', 'clearBadge', [], function(e) { console.log('Badge cleared:', e); });
请注意,上述代码是一个简化的示例,实际开发中可能还需要考虑插件的注册、错误处理、权限管理等因素。此外,确保你的uni-app项目已经正确配置原生插件的集成。