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

iOS如何向React Native正确返回CallKit扩展的启用状态

问题原因及解决方案

你遇到的问题不是异步逻辑的问题,而是直接返回了iOS原生的CXCallDirectoryManager.EnabledStatus枚举类型,React Native无法直接识别这种原生枚举,所以接收到的结果为null。

解决步骤如下:

  • 将CXCallDirectoryManager.EnabledStatus枚举转换为React Native可以解析的类型,比如字符串或者整数
  • 完善错误处理,在出现错误时调用reject方法,避免RN端出现未处理的Promise

修改后的代码:

import Foundation
import CallKit

@objc(CommonFunction)
class CommonFunction : NSObject {

    @objc
    static func requiresMainQueueSetup() -> Bool {
        return true
    }

    @objc
    func checkExtensionStatus(_ resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) -> Void {
        CXCallDirectoryManager.sharedInstance.getEnabledStatusForExtension(withIdentifier: "com.***.*****.Extension") { status, error in
            if let error = error {
                // 调用reject返回错误信息
                reject("EXTENSION_STATUS_ERROR", "获取扩展状态失败: \(error.localizedDescription)", error)
                return
            }
            
            // 将枚举转换为字符串返回,RN可以直接接收
            let statusString: String
            switch status {
            case .enabled:
                statusString = "enabled"
            case .disabled:
                statusString = "disabled"
            case .unknown:
                statusString = "unknown"
            @unknown default:
                statusString = "unknown"
            }
            
            resolve(statusString)
        }
    }
}

补充说明

  • 如果偏好使用整数类型,也可以把枚举映射为0(unknown)、1(enabled)、2(disabled),RN端根据数值判断状态
  • 确保你的扩展标识符com.***.*****.Extension完全正确,和项目中CallKit扩展的bundle ID一致
  • React Native端调用该方法时,要使用Promise语法处理返回结果,示例:
import { NativeModules } from 'react-native';

const { CommonFunction } = NativeModules;

async function getExtensionStatus() {
  try {
    const status = await CommonFunction.checkExtensionStatus();
    console.log('扩展状态:', status);
    // 根据status做后续处理
  } catch (error) {
    console.error('获取扩展状态失败:', error);
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 12:55:19