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

集成twilio-voice-react-native与react-native-call-keep时iOS报PushKit初始化错误

iOS端"Failed to initialize PushKit device token"错误解决方案

1. 完善PushKit权限配置

  • 在iOS项目的Info.plist中添加VoIP权限说明:
    <key>NSPushKitUsageDescription</key>
    <string>需要使用VoIP推送来处理语音通话</string>
    
  • 打开Xcode项目配置,进入Signing & Capabilities,开启Background Modes并勾选Voice over IP选项。

2. 修正Twilio Voice注册逻辑

Twilio Voice for iOS要求先获取PushKit令牌再完成注册,原有代码缺少Push令牌绑定步骤,调整如下:

const voice = new Voice();

React.useEffect(() => {
  // 监听PushKit令牌获取事件
  const tokenListener = voice.on('token', (pushToken) => {
    console.log('获取到PushKit令牌:', pushToken);
  });

  return () => tokenListener.remove();
}, []);

const callAction = async () => {
  const accessToken = await getAccessToken();
  // 初始化VoIP推送注册表
  await voice.initializePushRegistry('voip');
  // 完成Twilio注册
  await voice.register(accessToken);
  
  const twiMLParams = {
    params: {
      guestName: `${firstName} ${lastName}`,
    },
  };
  const callUUID = getGUID();
  const call = await voice.connect(accessToken, twiMLParams);
  RNCallKeep.startCall(callUUID, "", phoneNumber);
};

3. 调整服务初始化顺序

确保RNCallKeep先完成初始化,再启动Twilio Voice的推送配置:

React.useEffect(() => {
  const initServices = async () => {
    await initializeCallKeep();
    // 初始化Twilio推送注册
    await voice.initializePushRegistry('voip');
  };
  initServices();
}, []);

4. 验证项目配置细节

  • 确认Xcode项目Capabilities中已开启Push Notifications。
  • 检查twilio-voice-react-native与react-native-call-keep的版本兼容性,避免因版本冲突导致初始化失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 06:35:05