Twilio 错误 - 52134 无效的 APNs 设备令牌
Posted
技术标签:
【中文标题】Twilio 错误 - 52134 无效的 APNs 设备令牌【英文标题】:Twilio Error - 52134 Invalid APNs device token 【发布时间】:2019-01-24 17:12:07 【问题描述】:我已将我的应用上传到 TestFlight 并尝试使用 twilio 进行语音通话,但它抛出 Error - 52134 Invalid APNs device token。我一直在阅读很多关于修复它的教程,但尽管我付出了所有努力,我还是能够修复它。不过在沙盒中它工作得很好。
我做了以下事情: 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) 沙盒未勾选
7) 在我的服务器后端更改 CREDENTIAL SID
8) 重启服务器
我正在使用自动管理签名,所以我假设那里一切正常。
关于“APS 环境:生产”,我假设 xCode 在上传到 TestFlight 时会自动使其生产。我可以看到它包含在内。
尽管上述所有内容,我仍然收到这个可怕的错误 APS Environment: production
我知道在 99% 的情况下,这个问题的解决方案是重新生成证书,但现在我被卡住了。我已经试过两次了。
不确定我还能做些什么来解决这个问题?
【问题讨论】:
您是否确认已创建生产证书?也就是以“Apple Push Services”开头,而不是“Apple Development IOS Push Services”? 您是指苹果开发者网站上的 VoIP 证书?是的,这就是生产。请参阅我的问题,我已添加屏幕截图。对吗? 您能否contact Twilio support 并提供凭据 SID 以及此说明。团队将能够查看凭证,看看他们是否能发现任何错误。谢谢! 已经做了,希望有人能抽空查票。 “它以“Apple Push Services”而不是“Apple Development IOS Push Services”开头?”检查哪个文件?从开发者账号下载的VoIP证书,.cer文件?此文件中没有这样的行。 【参考方案1】:我是这样走的。它适用于沙盒和现场。
创建 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 通知。
【讨论】:
应用准备好提交商店后,使用“APS Environment: production.这一步现在还需要吗? xCode 不会自动执行吗? 我可以确认 xCode 会自动执行此操作。我可以在 iTunes Connect 上看到 aps-environment: production。 我更喜欢添加它。 bcoz 在沙箱中进行测试时,我们会将其更改为开发。如果我们忘记将其改回,则可能会导致问题。但苹果默认会覆盖实时应用程序。 是的,我知道。但在你的情况下,这根本不是问题。 $ apn push "6eb7b82bd8a0a0762192" -c VOIP.pem -m "Testing VoIP" -p Password: ********** 1个推送通知发送成功。虽然没有在设备上得到任何东西。现在要检查什么?【参考方案2】:我遇到了类似的问题。问题在于凭据令牌解码。
适用于 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
【讨论】:
【参考方案3】:尝试手动终止语音快速启动应用并重新启动。这样做之后,我在手机上通过 Test Flight 下载后开始能够接听电话。
问题来自于在您现在尝试通过 Test Flight 测试的同一设备上通过 Xcode 测试应用程序。
我遇到了完全相同的问题。即使按照 Karthik 的回答,并在 Twilio 控制台中创建了新的 iOS SDK 凭据,并为新的凭据 SID 更新了我的服务器,我仍然收到“错误 - 52134 无效的 APNs 设备令牌”。
我做了更多的挖掘,并在 Github 页面上找到了this issue twilio/voice-quickstart-ios repo。
这是 Twilio 工程师所说的:
“感谢您与我们联系。
当设备以前使用开发授权,后来用于生产环境时,这是一个常见的问题。我们观察到,在这种情况下,在第一次启动 TestFlight 应用程序时,PushKit 委托方法中返回的设备令牌将用于之前的环境(开发授权设备令牌)。虽然注册仍然有效,因为设备令牌格式和推送凭据 SID 都有效,但是当 Twilio 尝试向 APNS 发送通知传递请求时会发生错误。
理想情况下,这只会发生在开发设备上,要解决此问题,您只需重新启动 TestFlight 应用程序,然后它应该能够接收来电通知。
希望这会有所帮助。”
您仍然需要在未选中沙盒复选框的情况下在 Twilio 控制台中创建相同的推送凭据,并更新服务器上的凭据 SID。
【讨论】:
以上是关于Twilio 错误 - 52134 无效的 APNs 设备令牌的主要内容,如果未能解决你的问题,请参考以下文章