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

iOS 18使用setAlternateIconName更换图标后通知图标不更新问题咨询

iOS 18中setAlternateIconName更换图标后通知图标不更新的问题与解决方法

问题背景

使用setAlternateIconName动态更换应用图标时,iOS 15上系统通知会同步显示新图标,但iOS 18中仅应用图标更新成功,通知仍展示旧图标。相关配置已完成:Assets.xcassets中添加了替代图标,Build Settings设置INCLUDE_ALL_APPICON_ASSETS = YES、ALTERNATE_APPICON_NAMES = AppIcon_ClubIcon,图标更换逻辑代码如下:

- (void)changeIconToClub {
    if ([[UIApplication sharedApplication] supportsAlternateIcons]) {
        [[UIApplication sharedApplication] setAlternateIconName:@"AppIcon_ClubIcon" completionHandler:^(NSError * _Nullable error) {
            if (error) {
                NSLog(@"Failed to change icon: %@", error.localizedDescription);
            } 
        }];
    } else {
        NSLog(@"Alternate icons are not supported on this device.");
    }
}

已知情况

iOS 18对通知框架的图标获取逻辑做了调整,默认不会自动同步通过setAlternateIconName更换的替代图标,这是当前版本的行为变更,并非API调用错误。

解决方案

1. 发送通知时手动指定图标(推荐)

在创建本地通知或配置远程推送payload时,明确指定通知要使用的图标名称,让通知直接关联对应的替代图标:

本地通知实现(Objective-C)

UNMutableNotificationContent *notificationContent = [[UNMutableNotificationContent alloc] init];
notificationContent.title = @"示例通知";
notificationContent.body = @"这是一条使用自定义图标的通知";
// 设置与更换后的图标一致的名称
notificationContent.appIconName = @"AppIcon_ClubIcon";

UNNotificationRequest *request = [UNNotificationRequest requestWithIdentifier:@"customIconNotification" content:notificationContent trigger:nil];
[[UNUserNotificationCenter currentNotificationCenter] addNotificationRequest:request withCompletionHandler:^(NSError * _Nullable error) {
    if (error) {
        NSLog(@"添加通知失败: %@", error.localizedDescription);
    }
}];

远程推送Payload配置

在推送的JSON payload中添加app-icon-name字段,值为你的替代图标名称:

{
    "aps": {
        "alert": {
            "title": "远程推送通知",
            "body": "使用自定义图标展示"
        },
        "app-icon-name": "AppIcon_ClubIcon"
    }
}

2. 清理历史通知(仅适用于已展示的旧通知)

如果是已经显示在通知中心的历史通知,由于iOS 18的缓存机制,无法直接更新其图标,可通过清除旧通知来避免用户看到不一致的图标:

// 清除所有已展示的通知
[[UNUserNotificationCenter currentNotificationCenter] removeAllDeliveredNotifications];

注意:此方法会清除所有通知,可能影响用户体验,仅作为临时补充方案。

注意事项

  • 确保appIconName的值与Assets.xcassets中定义的替代图标名称完全一致,大小写敏感
  • 若应用支持多种替代图标,需在更换图标后记录当前使用的图标名称,发送通知时动态设置对应的appIconName

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 16:10:03