【问题标题】:App Download from App Store got BadDeviceToken, build from source does not从 App Store 下载的应用程序有 BadDeviceToken,从源代码构建没有
【发布时间】:2020-05-26 00:35:47
【问题描述】:

我已经搜索过 Stackoverflow,但没有一个回答我的问题 从 Xcode APNS 构建可以工作,但我的后端提出了 App Store 版本BadDeviceToken

Successregistration_id 由源代码构建而成

In [1]: APNSDevice.objects.all().send_message("test")
Out[1]:
[{'27321a3d872613499e27638733e9d1da7e6aa52888a2d90769b150f6339360b1': 'Success',
  '798a23a46169e405c41a0c9f44faa0acd39a65119960b973acd248a6de1d624e': 'Success',
  '1d742a9ae1684fed5e6c672587ee27c1523cc97e931cc64f108f7c4924aba2af': 'DeviceTokenNotForTopic',
  '27173de1aed3a065644708602fd5659cf4e0f8c3ce5b3ef7c4b0769655b92041': 'DeviceTokenNotForTopic',
  'e5647247877a0e1db3c7b52821b4230551267ca8a360f862ec5dde506e9b2f36': 'Success',
  '0eecae0cb6f4c27ee4b915e37dbb9c7cc84e4967e71c8efab808e231f46b8ec6': 'BadDeviceToken',
  '582d6a7c4628131cba9d0dfa9096cc81e3b48f6b6409252515d7402ef1c3ef30': 'BadDeviceToken'}]

我现在不在乎 DeviceTokenNotForTopic。请继续关注BadDeviceToken

重现步骤是

  1. 关注this获取.p12文件
  2. 然后从doc 生成.pem。我必须把passphrase 放到key 否则我无法进行下一步
  3. 从 App Store 下载我自己的应用程序并登录获取registration_id

检查:

  1. pushtry.com 我上传.p12 并输入registration_id。我可以得到push notification

  2. openssl s_client -connect gateway.push.apple.com:2195 -cert aps-cert.pem -key aps-key-noenc.pem 也可以正常工作。连接仍然存在

我的配置:
Django3
django-push-notification @master 提交:c610dd9c7871f4e81bdffce783df8b040ca22878

settings.py

PUSH_NOTIFICATIONS_SETTINGS['APNS_CERTIFICATE'] = str(APPS_DIR) + '/push_noti/dd/aps.pem'
PUSH_NOTIFICATIONS_SETTINGS['APNS_USE_SANDBOX'] = "gateway.push.apple.com:2195"
PUSH_NOTIFICATIONS_SETTINGS['APNS_TOPIC'] = "com.multy.herr.reviews"

根据this,我曾尝试使用相同的production APNS 证书

开发服务器:api.sandbox.push.apple.com:443
生产服务器:api.push.apple.com:443

但是,都给了我相同的BadDevieToken

仅供参考:
我正在使用production APNS 证书

我只关心 Django 后端。我的 iOS 开发人员从他的计算机上传应用程序。我不确定这会不会有问题

我曾尝试fastlanepushtry.com 再次.p12 有效,但.pem 无效。弹出对话框production_com.xxx.yyy.zzz.pem | 3883 | application/x-x509-ca-cert

问题:

我哪里错了?

另一种解决方案:
我可能会使用 AWS SNS 来处理这个问题

【问题讨论】:

标签: ios django apple-push-notifications


【解决方案1】:

README for django-push-notification中所述:

If you are planning on running your project with APNS_USE_SANDBOX=True, 
then make sure you have set the development certificate as your APNS_CERTIFICATE.

所以问题在于这一行:

PUSH_NOTIFICATIONS_SETTINGS['APNS_USE_SANDBOX'] = "gateway.push.apple.com:2195"

有关使用 APN 进行应用程序的调试和发布版本之间的区别的更多信息,您应该阅读iOS APNS Development [sandbox] vs Production

【讨论】:

【解决方案2】:

@Wyetro 是正确的。问题来自那一行,我对它使用的库本身的某个级别的文档和代码库感到困惑bool

PUSH_NOTIFICATIONS_SETTINGS['APNS_USE_SANDBOX'] = False

然后我就可以发送消息了

【讨论】:

  • 很高兴你明白了
猜你喜欢
  • 2018-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-28
  • 2019-05-15
  • 2012-07-05
  • 1970-01-01
  • 2012-06-03
相关资源
最近更新 更多