Загрузка приложения из App Store получила BadDeviceToken, сборка из исходного кода отсутствует - PullRequest
1 голос
/ 10 февраля 2020

Я выполнил поиск по Stackoverflow, но никто из них не ответил на мои вопросы. Сборка из Xcode APNS работает, но в версии App Store мой бэкэнд поднимает BadDeviceToken.

Success registration_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. Следуйте этому , чтобы получить .p12 файл
  2. Затем сделать .pem из do c. Я должен поставить 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 -pu sh -notification @master commit: 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"

Я пытался использовать тот же сертификат production APNS в соответствии с этим

Сервер разработки: api.sandbox. pu sh .apple.com: 443
Рабочий сервер: api.pu sh .apple.com: 443

Однако все дают мне одинаковые BadDevieToken

FYI:
Я использую production APNS cert

Я забочусь только о Django бэкэнде. Мой iOS разработчик загрузил приложение со своего компьютера. Я не уверен, что это будет проблематично c или нет

Я пытался fastlane с pushtry.com снова .p12 работает, но .pem нет. Это всплывающее диалоговое окно production_com.xxx.yyy.zzz.pem | 3883 | application/x-x509-ca-cert

Вопрос:

Где я ошибаюсь?

Другое решение:
Я мог бы использовать AWS SNS, чтобы справиться с этим

Ответы [ 2 ]

1 голос
/ 13 февраля 2020

@ Wyetro правильно. Проблема возникает из-за того, что меня перепутали с документом и базой кода на определенном уровне в самой библиотеке, которую он использует bool

PUSH_NOTIFICATIONS_SETTINGS['APNS_USE_SANDBOX'] = False

Тогда я смогу отправить сообщение

1 голос
/ 11 февраля 2020

Как отмечено в README для django -pu sh -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 [песочница] и Production

...