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

Flutter iOS端进程杀死后Firebase推送无法触发CallKit来电求助

iOS进程杀死后APNs推送无法触发CallKit来电的解决方案

针对你遇到的iOS进程杀死后,APNs推送能收到但无法触发flutter_callkit_incoming来电的问题,以下是针对性的排查和解决步骤:


1. 修正APNs推送Payload配置

当应用被杀死时,Firebase不会处理推送逻辑,APNs直接将payload传递给iOS系统,此时顶级data字段不会被系统传递到应用回调,必须把呼叫相关数据放到apns.payload的自定义字段中,同时调整APS配置:

{
  "message": {
    "android": {
      "notification": {
        "click_action": "Video"
      },
      "priority": "high"
    },
    "apns": {
      "headers": {
        "apns-priority": "10",
        "apns-topic": "你的App Bundle ID" // 必填,确保推送匹配App
      },
      "payload": {
        "aps": {
          "content-available": 1, // 唤醒后台应用处理
          "mutable-content": 1, // 允许修改通知内容
          "alert": { // 保留通知显示,同时触发后台回调
            "title": "Incoming video call",
            "body": "There is a new video call from Ashish Physician."
          }
        },
        // 把原data字段的所有呼叫数据移到这里
        "callerAccessToken": "006030916dbd1494d74add49838cacb570fIAA9j48nGcIUT3PXdYvxqXmg0Civ0pdD+Ra852bM3qJkPPLSuz4AafalIgCyMj7BPvKIYwQAAQDevIdjAgDevIdjAwDevIdjBADevIdj",
        "calleeSflUserId": "24",
        "videoSessionId": "211",
        "type": "NEW_VIDEO_CALL_REQUEST",
        "callerName": "Ashish Physician",
        "callerImageUrl": "https://tercardia-develop.s3.us-east-2.amazonaws.com/49/49_profileImage.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20221130T182814Z&X-Amz-SignedHeaders=host&X-Amz-Expires=86400&X-Amz-Credential=AKIAV6UT3MGE2DMFHIFS%2F20221130%2Fus-east-2%2Fs3%2Faws4_request&X-Amz-Signature=b0eea1f62f02041c62e60f1ed93c3d7bade1becd465feaf35519103e8b72c75f"
      }
    },
    "notification": {
      "body": "There is a new video call from Ashish Physician.",
      "title": "Incoming video call"
    },
    "token": "eB4PSWrDAkg1oyIk-q-dKc:APA91bH7XN2YlRIdUJSlcVAv6pKj8v_-Rd-cXqy0z_8ap__6v2XH05iTWfWNt_ZYtcX_iHu--YyiAW8SW1bET8lXDnpBSVjz2uv69RO54fTpo-5gdv66c_rZSKuRW8alfCTy6mPpts1S"
  }
}

2. 配置iOS端后台回调逻辑

在AppDelegate中实现UNUserNotificationCenterDelegate和后台推送回调,确保应用被杀死时能唤醒并触发CallKit:

Objective-C示例代码:

#import <FlutterCallkitIncoming/FlutterCallkitIncoming.h>

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // 设置通知代理
    UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
    center.delegate = self;
    
    // 请求通知权限
    [center requestAuthorizationWithOptions:(UNAuthorizationOptionAlert | UNAuthorizationOptionSound | UNAuthorizationOptionBadge) completionHandler:^(BOOL granted, NSError * _Nullable error) {
        if (granted) {
            [[UIApplication sharedApplication] registerForRemoteNotifications];
        }
    }];
    
    return [super application:application didFinishLaunchingWithOptions:launchOptions];
}

// 处理后台推送回调(应用杀死时会触发)
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
    NSString *callType = userInfo[@"type"];
    if ([callType isEqualToString:@"NEW_VIDEO_CALL_REQUEST"]) {
        // 构造CallKit来电参数
        NSDictionary *callData = @{
            @"id": userInfo[@"videoSessionId"],
            @"nameCaller": userInfo[@"callerName"],
            @"avatar": userInfo[@"callerImageUrl"],
            @"type": @1, // 1=视频通话
            @"supportsVideo": @YES,
            @"extra": userInfo
        };
        // 触发CallKit来电
        [FlutterCallkitIncoming performCall:callData];
    }
    completionHandler(UIBackgroundFetchResultNewData);
}

3. 检查iOS后台权限配置

在Xcode中确保开启必要的后台模式:

  1. 打开项目的Signing & Capabilities标签
  2. 添加Background Modes权限
  3. 勾选Remote notifications和Voice over IP(CallKit依赖VoIP模式)

同时在Info.plist中确认配置:

<key>UIBackgroundModes</key>
<array>
    <string>voip</string>
    <string>remote-notification</string>
</array>

4. 测试APNs推送有效性

直接使用APNs测试工具(如Postman)发送推送,绕过Firebase,验证payload是否能触发后台回调:

  • 请求Header需包含:apns-priority:10、apns-topic:你的Bundle ID、apns-push-type:alert
  • Payload使用修正后的APNs格式,确保自定义数据能被回调解析

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 12:20:35