Отправка push-уведомлений Django в APNs приводит к ошибке протокола - PullRequest
0 голосов
/ 29 июня 2018

На моем сервере у меня есть django-push-уведомления == 1.6.0, и есть эта странная ошибка:

Отправка push-уведомлений в FCM с версией пакета 1.6.0 работает нормально, но при отправке push-уведомлений APN я получаю эту ошибку (Traceback):

apns.objects.get(pk=26).send_message('hello')

No handlers could be found for logger "apns2.client"
Traceback (most recent call last):
      File "<console>", line 1, in <module>
      File "/virtpy/myapp/local/lib/python2.7/site-packages/push_notifications/models.py", line 167, in send_message
        **kwargs
      File "/virtpy/myapp/local/lib/python2.7/site-packages/push_notifications/apns.py", line 113, in apns_send_message
        certfile=certfile, **kwargs
      File "/virtpy/myapp/local/lib/python2.7/site-packages/push_notifications/apns.py", line 94, in _apns_send
        **notification_kwargs
      File "/virtpy/myapp/local/lib/python2.7/site-packages/apns2/client.py", line 53, in send_notification
        stream_id = self.send_notification_async(token_hex, notification, topic, priority, expiration, collapse_id)
      File "/virtpy/myapp/local/lib/python2.7/site-packages/apns2/client.py", line 78, in send_notification_async
        stream_id = self._connection.request('POST', url, json_payload, headers)
      File "/virtpy/myapp/local/lib/python2.7/site-packages/hyper/http20/connection.py", line 281, in request
        self.endheaders(message_body=body, final=True, stream_id=stream_id)
      File "/virtpy/myapp/local/lib/python2.7/site-packages/hyper/http20/connection.py", line 555, in endheaders
        stream.send_headers(headers_only)
      File "/virtpy/myapp/local/lib/python2.7/site-packages/hyper/http20/stream.py", line 98, in send_headers
        conn.send_headers(self.stream_id, headers, end_stream)
      File "/virtpy/myapp/local/lib/python2.7/site-packages/h2/connection.py", line 839, in send_headers
        self.state_machine.process_input(ConnectionInputs.SEND_HEADERS)
      File "/virtpy/myapp/local/lib/python2.7/site-packages/h2/connection.py", line 246, in process_input
        "Invalid input %s in state %s" % (input_, old_state)
    ProtocolError: Invalid input ConnectionInputs.SEND_HEADERS in state ConnectionState.CLOSED

А теперь, если я понижу пакет до django-push-notifications == 1.4.1 APNs работает нормально, и FCM теперь не будет работать, получая эту ошибку:

Invalid field name(s) for model GCMDevice: 'cloud_message_type'.

Настройки на сервере:

PUSH_NOTIFICATIONS_SETTINGS = {
    "FCM_API_KEY": "[MY_FCM_KEY]",
    "APNS_CERTIFICATE": os.path.join(BASE_DIR, push_certificate),
    "APNS_TOPIC": "com.company.myapp",
    "GCM_ERROR_TIMEOUT": 60,
}

Как создавать устройства:

device, created = GCMDevice.objects.get_or_create(
                registration_id=android_token,
                defaults={'user': user,
                          'cloud_message_type': 'FCM'}
            )

device, created = APNSDevice.objects.get_or_create(
                registration_id=ios_token,
                defaults={'user': user}
            )

Есть идеи, как запустить оба?

1 Ответ

0 голосов
/ 07 августа 2018

Обновление пакетов с сервера (Ubuntu, общее обновление) решило проблему. И теперь я могу запустить 1.6.0 django-push-уведомления

...