You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Xamarin iOS应用图标角标显示1但无通知,求问题原因及解决方法

iOS 应用角标残留数字“1”问题排查与解决

问题原因

你的代码仅完成了远程通知权限的注册,没有处理通知清除后的角标清零逻辑,常见触发场景包括:

  • 用户点击通知进入APP后,未主动将角标数值重置为0;
  • 服务器曾推送过角标为1的通知,但后续未发送清零角标的推送指令;
  • APP启动/回到前台时,未检查系统通知中心状态并同步更新角标。

解决办法

1. 前台主动清零角标

在APP进入前台或激活时,强制将角标设为0,同时清空通知中心的历史通知(避免角标和通知内容不一致):

// 在AppDelegate的WillEnterForeground或DidBecomeActive方法中添加
public override void WillEnterForeground(UIApplication application)
{
    base.WillEnterForeground(application);
    // 清零角标
    UIApplication.SharedApplication.ApplicationIconBadgeNumber = 0;
    // 清除所有本地通知(iOS 9及以下)
    UIApplication.SharedApplication.CancelAllLocalNotifications();
    // iOS 10+ 用UNUserNotificationCenter清除通知
    UNUserNotificationCenter.Current.RemoveAllDeliveredNotifications();
}

2. 处理推送通知时同步更新角标

当收到远程通知或用户点击通知进入APP时,根据实际通知数量调整角标:

// 处理远程通知的方法(iOS 9及以下)
public override void DidReceiveRemoteNotification(UIApplication application, NSDictionary userInfo, Action<UIBackgroundFetchResult> completionHandler)
{
    // 从推送payload中获取角标数值,或直接清零
    if (userInfo.ContainsKey(new NSString("aps")))
    {
        var aps = userInfo.ObjectForKey(new NSString("aps")) as NSDictionary;
        if (aps.ContainsKey(new NSString("badge")))
        {
            int badgeCount = Convert.ToInt32(aps.ObjectForKey(new NSString("badge")).ToString());
            UIApplication.SharedApplication.ApplicationIconBadgeNumber = badgeCount;
        }
        else
        {
            // 无角标字段时清零
            UIApplication.SharedApplication.ApplicationIconBadgeNumber = 0;
        }
    }
    completionHandler(UIBackgroundFetchResult.NewData);
}

// iOS 10+ 用UNUserNotificationCenter代理
[Export("userNotificationCenter:didReceiveNotificationResponse:withCompletionHandler:")]
public void DidReceiveNotificationResponse(UNUserNotificationCenter center, UNNotificationResponse response, Action completionHandler)
{
    // 点击通知后清零角标
    UIApplication.SharedApplication.ApplicationIconBadgeNumber = 0;
    center.RemoveAllDeliveredNotifications();
    completionHandler();
}

3. 服务器推送清零指令

当APP无未读通知时,服务器可以发送携带badge: 0的推送 payload,APP收到后会自动清零角标:

{
    "aps": {
        "badge": 0
    }
}

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 22:30:01