You need to enable JavaScript to run this app. 如何在AppDelegate.swift配置APNs及Flutter端实现等效APNs配置
优惠活动
大模型
产品
解决方案
定价
更多

如何在AppDelegate.swift配置APNs及Flutter端实现等效APNs配置

迁移核心思路

FlutterAppDelegate本身完整实现了UIApplicationDelegate协议的全部能力,不需要替换继承关系,只需要把原生项目中写在AppDelegate里的APNs相关代码,按Flutter的初始化规则调整少量调用顺序,就能实现和原生完全等效的运行效果。

具体操作步骤

  • 保留AppDelegate对FlutterAppDelegate的继承关系,不要改回纯UIApplicationDelegate的继承逻辑,否则会导致Flutter引擎初始化失败,所有Flutter路由、插件功能都会失效。
  • 调整启动阶段的APNs注册逻辑:把原原生项目中写在didFinishLaunchingWithOptions方法里的APNs权限申请、远程通知注册代码,移到同名下的Flutter AppDelegate方法中,必须在所有业务APNs代码前优先调用super的同名初始化方法,保证Flutter核心逻辑先完成初始化。示例代码:
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        // 这一步是必须的,不能省略
        [super application:application didFinishLaunchingWithOptions:launchOptions];
        
        // 以下为原原生项目中的APNs启动逻辑,直接原封不动搬入即可
        UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
        center.delegate = self;
        [center requestAuthorizationWithOptions:(UNAuthorizationOptionAlert | UNAuthorizationOptionSound | UNAuthorizationOptionBadge) completionHandler:^(BOOL granted, NSError * _Nullable error) {
            // 保留原有的权限获取回调逻辑
        }];
        [application registerForRemoteNotifications];
        
        return YES;
    }
    
  • 完整迁移所有APNs相关的代理回调方法,每个重写的方法第一时间调用super的同名实现,避免打断Flutter内部的事件路由:
    • 迁移APNs注册成功后返回deviceToken的didRegisterForRemoteNotificationsWithDeviceToken方法,保留原有token上报、本地存储的所有逻辑
    • 迁移APNs注册失败的didFailToRegisterForRemoteNotificationsWithError方法,保留原有错误上报、提示的逻辑
    • 迁移UNUserNotificationCenterDelegate的全部实现,包括前台通知展示、通知点击响应的方法,原封不动保留原有跳转、参数处理逻辑即可,不需要把逻辑转移到Dart层执行

等效性保障注意事项

  • 所有重写的系统代理方法都不能漏调super实现:如果漏调,会导致Flutter生态的推送插件无法接收到系统事件,出现和原生行为不一致的问题,比如token获取失败、通知点击无响应。
  • 注意代理设置的时序:如果项目集成了自带APNs代理设置的Flutter插件(比如firebase_messaging),需要把UNUserNotificationCenter.delegate = self的代码放到App启动流程的最后执行,避免被插件覆盖代理引用,导致原有原生逻辑失效。
  • 不要复用Flutter插件自带的权限申请、APNs注册逻辑,手动按原有时序在原生层触发注册,就能完全对齐原生项目的权限弹窗时机、注册流程时序,不会出现行为差异。

整个迁移过程不需要改动任何Dart层业务代码,按上述规则调整完原生AppDelegate的逻辑后,APNs的全链路运行效果和纯原生iOS开发的效果没有区别。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.03 18:06:04