You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

iOS应用图标角标显示随机五位数,移除通知组件后仍存在

解决iOS应用图标角标残留五位数的问题

看起来你碰到了一个挺棘手的缓存残留问题——明明已经移除了所有通知相关代码,甚至回滚到之前正常的提交,iOS应用图标还是带着五位数的角标。这种情况我之前也帮不少开发者解决过,大概率是系统或开发环境的缓存搞的鬼,给你几个针对性的解决步骤:

1. 先清掉设备/Simulator的通知缓存

这是最常见的原因,系统会缓存应用的通知角标状态,即使你代码删了也不会自动清零:

  • 真机操作:打开「设置」→「通知」→找到你的应用,先关闭「允许通知」,等10秒左右再重新打开;或者直接在通知中心找到该应用的所有通知,左滑全部删除。
  • Simulator操作:要么直接重置模拟器(顶部菜单栏「Device」→「Erase All Content and Settings」,记得备份重要数据);要么用Xcode的「Debug」→「Simulate Push Notification」发送一条角标为0的测试推送,强制重置角标。

2. 检查Xcode项目的残留配置

即使你移除了React Native的通知组件,Xcode项目里可能还留着相关权限或配置:

  • 打开Xcode项目,进入「Signing & Capabilities」标签页,看看是否还保留着「Push Notifications」权限,或者「Background Modes」里的「Remote notifications」选项,如果不需要就点击「-」移除。
  • 打开Info.plist文件,搜索UIBackgroundModes,如果里面包含remote-notification且你现在不需要通知功能,直接删掉这个键值对。

3. 强制用代码重置角标

有时候系统缓存的角标不会自动消失,可以临时加一段代码强制清零,运行一次后再删掉:
在你的RN入口文件(比如App.js)里添加:

import { Platform, useEffect } from 'react-native';
import PushNotificationIOS from '@react-native-community/push-notification-ios';

useEffect(() => {
  if (Platform.OS === 'ios') {
    // 强制设置角标为0
    PushNotificationIOS.setApplicationIconBadgeNumber(0);
  }
}, []);

如果已经完全移除了所有RN通知依赖,也可以直接在Xcode的AppDelegate.m(或AppDelegate.swift)里添加原生代码:

// Objective-C版本,在didFinishLaunchingWithOptions方法里添加
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];
// Swift版本,在application(_:didFinishLaunchingWithOptions:)方法里添加
UIApplication.shared.applicationIconBadgeNumber = 0

运行一次这个版本,角标清零后再把这段代码删掉就好。

4. 排查后台推送服务是否还在发通知

如果之前配置了APNs推送服务,可能后台还在给应用发送带角标的推送,哪怕你本地代码删了也没用:

  • 检查你的推送服务后台,看看是否有残留的定时推送任务,或者暂时关闭APNs的推送权限,确认角标是否不再变化。

5. 清理Xcode的Derived Data缓存

Xcode的缓存有时候会导致配置不更新,试试清理一下:

  • 打开Xcode,顶部菜单栏选择「Xcode」→「Preferences」→「Locations」,找到「Derived Data」,点击旁边的箭头打开文件夹,删除对应项目的文件夹;然后回到Xcode按Cmd+Shift+K Clean项目,重新构建运行。

一般来说,按照上面的步骤逐一排查,就能解决这个角标残留的问题。毕竟你回滚到旧代码还存在问题,说明不是代码本身的锅,肯定是环境或设备的缓存残留导致的。

内容的提问来源于stack exchange,提问作者JulienD

火山引擎 最新活动