注册 iOS Twilio Voice Client 时出现推送通知错误

Posted

技术标签:

【中文标题】注册 iOS Twilio Voice Client 时出现推送通知错误【英文标题】:Error in Push Notifications while registering for iOS Twilio Voice Client 【发布时间】:2016-11-12 02:35:34 【问题描述】:

我在尝试为 Twilio Voice 客户端注册用户时遇到以下错误:

[ERROR VoiceClient] Inside register:deviceToken:completion:, failed to register for Twilio push notifications. Error:Failed to register. Code: 6.

设置如下:

推送凭据已在 Twilio 中注册。已注册 VoIP 推送证书,并且此类推送仅处于生产模式。假设应用 ID 为“com.bundle.appIDX”。 已设置服务器端,以便将正确的推送凭据提供给IpMessagingGrant 对象。 在客户端,执行以下代码: VoiceClient.sharedInstance().register(withAccessToken: self.accessToken, deviceToken: self.voipToken) 这会立即失败并出现上述错误。 对 TwilioVoiceClient 使用版本“=2.0.0-beta4”,对 twilio-node 服务器端组件使用版本“2.9.1” (https://github.com/twilio/twilio-node/tree/2.9.1)。 尝试使用“使用此凭据发送到沙盒 APN”选项,但没有结果。 尝试在客户端为应用 ID“com.bundle.appIDX”同时使用开发和配置文件。

Twilio 真的支持 VoIP 推送吗?如果是,此设置可能有什么问题?

谢谢, 古文。

======= 在 Viktor 的指导下编辑: 我现在手动创建 VoiceGrant。我将 key 属性的值设置为'voice'。这是赠款的样子:

 
    outgoing_application_sid: 'APXX',
    push_credential_sid: 'CRXX',
    endpoint_id: 'XX' 

仍然出现注册错误。

我也尝试过这种格式,因为它在 2.11.0 版本中是这样的:

 outgoing:   application_sid: 'APXX' ,
  push_credential_sid: 'CRXX',
  endpoint_id: 'XX' 

任何想法可能是问题所在?附上云代码:

  var accessToken = new twilio.AccessToken("ACXX", "SKXX", "PPXX", accessTokenOptions);

  var voiceGrantConfig = "outgoingApplicationSid": "APXX", 
                                "endpointId": clientName,
                                "pushCredentialSid": "CRXX";

  var voiceGrant = new VoiceGrant(voiceGrantConfig);
  voiceGrant.key = "voice";
  console.log(voiceGrant.toPayload());
  accessToken.addGrant(voiceGrant);

  var token = accessToken.toJwt();

编辑 2:我实际上已经升级到 twilio-node 2.11.0 并且仍然收到错误。这是生成 jwt 之前的访问令牌。

AccessToken 
  accountSid: 'ACXX',
  keySid: 'SKXX',
  secret: 'PPXX',
  ttl: 86400,
  identity: undefined,
  nbf: undefined,
  grants: 
   [ VoiceGrant 
       outgoingApplicationSid: 'APXX',
       outgoingApplicationParams: undefined,
       pushCredentialSid: 'CRXX',
       endpointId: 'XX'  ] 

【问题讨论】:

嗨,Guven,您能否确认您使用的是访问令牌:twilio.com/docs/api/rest/access-tokens,而不是功能令牌:twilio.com/docs/api/client/capability-tokens? @MeganSpeir 嘿,梅根,是的,我可以确认。我也在向访问令牌添加 IpMessagingGrant。不过这可能是个问题。 2.9.1 twilio-node 没有 VoiceGrant,它只在 2.11.0 版本中引入。 【参考方案1】:

[根据 Guven 的反馈编辑]

您需要“语音”授权。否则,您的请求将被 Voice 产品拒绝。您要么需要在签名之前手动将该部分添加到 JSON,要么需要升级到 2.11.0 版本。具体来说,您的令牌需要如下所示:


  "sub": "ACxxxx",
  "iss": "SKxxxx",
  "grants": 
    "voice": 
      "outgoing": 
         "application_sid": "APxxxx"
      ,
      "push_credential_sid": "CRxxxxx"
    ,
    "identity": "voice_test"
  ,
  "jti": "SKxxxxx",
  "exp": 1479315711

注意,“身份”元素也是如此。这是您的用户的标识符。通常是它的用户名或系统中用户记录的 ID。

查看quickstart app 以获取用于生成正确令牌的代码示例(它在 Python 中,但应该让您很好地了解如何开始)。

【讨论】:

这正是我想要的,谢谢 Viktor。我对 Twilio 的支持感到非常失望,已经 2 天了,到目前为止还没有任何回应。我不认为这是一个复杂的案例。文档确实可以改进。 嘿 Viktor,似乎还是有问题,我已经更新了我的问题。你能看一下吗?

以上是关于注册 iOS Twilio Voice Client 时出现推送通知错误的主要内容,如果未能解决你的问题,请参考以下文章

无法让 Twilio 应用程序与 ngrok 一起正常工作

iOS Swift Twilio 可编程聊天推送通知

Twilio Target Worker表达-在文本上阻止语音通话

我获得了google voice的邀请码,怎么用啊

注册 Twilio 电话号码时出现 ngrok 错误

已激活google voice 不怎么明白该怎么用