0

我正在尝试在使用 Django 后端的 iOS 应用程序上实现推送通知。我会在之前解释一些上下文,以防它有揭示信息。如果您想直接解决问题,请转到问题部分。

语境

按照本教程,我已经能够验证我的证书和配置文件配置是否正确,因为我的设备实际上正在接收APN Tester Free发送的推送通知。

当然,为了有意义,我的 Django 后端必须发送通知。为此,我安装了django-push-notifications。在我的 django 设置文件中,我设置了 APNS 证书的路径。此文件需要是 .pem 文件,而不是 Apple 开发人员门户导出的普通 .cer 文件。

要转换 .cer 文件,可以右键单击Keychain Access中的推送通知证书并导出 .p12 文件。要将 .p12 文件转换为所需的 .pem,需要使用Terminal并运行以下命令:

openssl pkcs12 -in [export p12 file].p12 -out [final pem file].pem -nodes -clcerts

为了确保我的 .pem 文件确实有效,我使用了以下命令

openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert [final pem file].pem -key [final pem file].pem

我似乎得到了成功的回应 ( CONNECTED(00000003)...)

问题

安装 django-push-notification 后,即使我能够创建APNSDevice实例,我也无法发送消息。这是我收到的错误:

File "/Users/joao/Code/code-vitae.com/env/lib/python3.4/site-packages/push_notifications/models.py", line 93, in send_message
    return apns_send_message(registration_id=self.registration_id, alert=message, **kwargs)
  File "/Users/joao/Code/code-vitae.com/env/lib/python3.4/site-packages/push_notifications/apns.py", line 209, in apns_send_message
    _apns_send(registration_id, alert, **kwargs)
  File "/Users/joao/Code/code-vitae.com/env/lib/python3.4/site-packages/push_notifications/apns.py", line 153, in _apns_send
    with closing(_apns_create_socket_to_push()) as socket:
  File "/Users/joao/Code/code-vitae.com/env/lib/python3.4/site-packages/push_notifications/apns.py", line 58, in _apns_create_socket_to_push
    return _apns_create_socket((SETTINGS["APNS_HOST"], SETTINGS["APNS_PORT"]))
  File "/Users/joao/Code/code-vitae.com/env/lib/python3.4/site-packages/push_notifications/apns.py", line 46, in _apns_create_socket
    raise ImproperlyConfigured("The APNS certificate file at %r is not readable: %s" % (certfile, e))
django.core.exceptions.ImproperlyConfigured: The APNS certificate file at '/Users/joao/Documents/Circli/Certificates/Pro_Key.pem' is not readable: 'utf-8' codec can't decode byte 0xe3 in position 4783: invalid continuation byte

这个错误让我怀疑我在创建 pem 文件时以某种方式出错。但是,如果我可以毫无问题地连接到 Apple 推送服务器(如Context所示),这是怎么回事?

4

1 回答 1

1

您用于转换证书的过程中似乎存在问题。

使用fastlane立即生成所需格式的推送证书。这是一篇涵盖整个过程的博客文章

于 2017-01-29T23:38:13.753 回答