注册 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 时出现推送通知错误的主要内容,如果未能解决你的问题,请参考以下文章