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

Twilio Error - 52134 Invalid APNs device token

我已将我的应用程序上传到 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 上创建了一个新的 Push Credential 并通过复制和粘贴添加了证书和密钥

6) SANDBOX 未勾选

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

8) 重新启动服务器

我正在使用自动管理签名,所以我假设一切都应该没问题。

关于 "APS Environment: production",我假设 xCode 会在上传到 TestFlight 时自动将其投入生产。我可以看到它包含在内。

尽管有上述所有内容,我仍然收到此异常错误 APS 环境:生产

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

不确定我还能做些什么来解决这个问题?

我就这样走了。它适用于沙箱和现场。

创建 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 控制台中,转到 Push Credentials 页面并创建一个新的 Push Credential。粘贴从您的证书中提取的证书和私钥。您必须以明文形式粘贴密钥:

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 通知。

我遇到了类似的问题。问题出在凭据令牌解码上。

For iOS 12(及更早版本)+ Xcode 10

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

对于iOS13

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

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

尝试手动关闭语音快速启动应用程序并重新启动。这样做之后,在 phone.

上通过 Test Flight 下载后,我开始能够接听 phone 电话

问题来自于在您现在尝试通过 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。