Twilio错误-52134无效的APNs设备令牌

时间:2019-01-24 17:12:07

标签: ios swift twilio voip

我已将我的应用程序上传到TestFlight上,并尝试使用twilio进行语音通话,并抛出错误-52134无效的APNs设备令牌。我已经阅读了很多有关修复它的教程,但是尽管我付出了所有努力,但是我还是能够修复它。在沙盒中,它工作正常。

我已经完成以下工作: 1)通过钥匙串访问创建了一个新的.certSigningRequest

2)使用以上https://developer.apple.com/account/ios/certificate/distribution/create

生成了新的VoIP服务证书

3)在钥匙串中添加了证书,从钥匙串中导出了.p12文件

4)按照https://github.com/twilio/voice-quickstart-swift上的说明运行这三个命令以生成密钥和证书

5)在twilio上,创建了一个新的推送凭据,并通过复制和粘贴添加了证书和密钥

6)取消选中沙盒

7)在我的服务器后端中更改CREDENTIAL SID

8)重新启动服务器

我正在使用自动管理签名,因此我假设一切都应该在那里。

关于“ APS环境:生产”,我假设xCode在TestFlight上载时将自动使其生产。我可以看到它已包含在内。

尽管有上述所有情况,我仍然在APS环境中遇到此异常错误:生产

我知道在99%的情况下,此问题的解决方案是重新生成证书,但现在我被困住了。我已经尝试过两次了。

不确定是否可以解决此问题?

enter image description here

3 个答案:

答案 0 :(得分:0)

我遵循这种方式。它适用于沙盒和实时。

创建Twilio证书。请遵循此说明。

步骤1:

1. An Apple Developer membership to be able to create the certificate.
2. Make sure your App ID has the “Push Notifications” service enabled.
3. Create a corresponding Provisioning Profile for your app ID.
4. Create an Apple VoIP Services Certificate for this app by navigating to Certificates -> Production and clicking the + on the  top right to add the new certificate (choose voip cert at the bottom).
5. Download the certificate, export the .p12 from keychain.

步骤2: 然后,通过导航到添加.p12的文件夹来完成这些步骤。

1. openssl pkcs12 -in liveVoip.p12 -nocerts -out key.pem
2. openssl rsa -in key.pem -out key.pem
3. openssl pkcs12 -in liveVoip.p12 -clcerts -nokeys -out cert.pem
4. openssl pkcs12 -in liveVoip.p12 -out VOIP.pem -nodes -clcerts

在Twillio控制台中,转到“推送凭证”页面并创建一个新的推送凭证。粘贴证书和从证书中提取的私钥。您必须将密钥粘贴为纯文本格式:

For the cert.pem you should paste everything from -----BEGIN CERTIFICATE----- to -----END CERTIFICATE-----.
For the key.pem you should paste everything from -----BEGIN RSA PRIVATE KEY----- to -----END RSA PRIVATE KEY-----.

请记住检查“沙盒”选项。这个很重要。您生成的VoIP服务证书既可以在生产环境中使用,也可以与Apple的沙盒基础结构一起使用。选中此框将告诉Twill将您的推送发送到适​​合您的开发配置文件的Apple沙盒基础结构。

一旦应用程序准备好提交商店,请使用“ APS环境:生产”更新plist并使用相同的VoIP证书创建另一个“推送凭据”,而无需选中沙箱选项

步骤3:要测试您的应用是否收到通知,请获取设备令牌,打开终端,然后转到添加.p12的文件夹。使用它来手动触发voip通知。

apn push "<XXXXXX  XXXXXX XXXXXX XXXXXX XXXXXX XXXXXX e8aafbd9>" -c VOIP.pem -m "Testing VoIP" -p

注意:有时twilio告诉无效的apns令牌。但我们仍然能够收到voip通知。

答案 1 :(得分:0)

我面临着类似的问题。问题出在凭证令牌解码上。

对于iOS 12(及更低版本)+ Xcode 10

let deviceToken = (credentials.token as NSData).description

对于iOS 13

let deviceToken = credentials.token.map { String(format: "%02x", $0) }.joined()

更多信息:https://github.com/twilio/voice-quickstart-swift/issues/281

答案 2 :(得分:0)

尝试手动关闭语音快速启动应用程序并重新启动。这样做之后,我在手机上通过 Test Flight 下载后开始能够接听电话。

问题来自在您现在尝试通过 Test Flight 测试的同一设备上通过 Xcode 测试应用。

我遇到了完全相同的问题。即使在遵循 Karthik 的回答并在 Twilio 控制台中创建新的 iOS SDK 凭据并更新我的服务器以获得新的凭据 SID 之后,我仍然收到“错误 - 52134 无效的 APNs 设备令牌”。

我进行了更多挖掘,并在 twilio/voice-quickstart-ios 存储库的 Github 页面上找到了 this issue

以下是 Twilio 工程师所说的:

“感谢您与我们联系。

当设备之前以开发权限使用,后来在生产环境中使用时,这是一个常见问题。我们观察到,在这种情况下,第一次启动 TestFlight 应用程序时,在 PushKit 委托方法中返回的设备令牌将用于之前的环境(开发授权设备令牌)。虽然注册仍然有效,因为设备令牌格式和推送凭证 SID 都是有效的,但是当 Twilio 尝试向 APNS 发送通知传递请求时会发生错误。

理想情况下,这只会发生在开发设备上,要解决此问题,您只需重新启动 TestFlight 应用,然后它就应该能够接收来电通知。

希望这会有所帮助。”

您仍然需要在未选中沙箱复选框的情况下在 Twilio 控制台中创建相同的推送凭据,并更新服务器上的凭据 SID。