Серверна реалізація ios push повідомлень (python)

Серверна реалізація ios push повідомлень (python)

Я вже писав статтю про реалізацію Push повідомлень з використанням сервісу Urbanairship. У цього способу є ряд переваг і недоліків. Переваги я описав в наведеній вище статті, недостакі сервісу в його лімітах на кількість безкоштовних повідомлень і періодичних відключеннях на технічне обслуговування.

Сьогодні ми розглянемо реалізацію IOS Push повідомлень своїми руками для Python програм.

IOS Push повідомлення бувають двох видів: локальні і віддалені. Локальні ініціюються додатком на стороні клієнта і в даній статті не розглядаються. Дистанційні повідомлення відсилаються з боку сервера на клієнтську програму за допомогою служби APNS (Apple Push Notification Service). Процес виглядає наступним чином:

Серверна реалізація ios push повідомлень (python)
  1. Додаток реєструється в APNS і отримує Device Token;
  2. Додаток повідомляє Device Token нашого сервера;
  3. Тепер сервер може встановити SSL з'єднання з APNS і відправити Push повідомлення;

Серверна реалізація ios push повідомлень (python)

Виберіть свій додаток і зайдіть в розділ налаштувань: Configure.

Скачайте production і development сертифікати (* .cer). Можливо вам буде потрібно попередньо включити Push нотифікації для свого застосування і створити їх.

Серверна реалізація ios push повідомлень (python)

Подальші дії краще провести на комп'ютері з OSX. Імпорт отримані сертифікати і експортуйте їх у форматі p12. Ймовірно вам буде потрібно ключ розробника з яким були створені CSR запити.

Серверна реалізація ios push повідомлень (python)

Отриманий файл у форматі p12 необхідно переконвертувати в pem. Для цього завдання я написав простенький shell скрипт.

Сконвертіруем з його допомогою отриманий від Apple Dev сертифікат в потрібний нам формат:

В процесі у вас буде запропоновано ввести відповідний пароль на сертифікати, якщо вони створювалися без пароля, просто натисніть Enter. Результатом цієї операції будуть pem файли з тими ж назвами.

Цим же скриптом їх можна протестувати, що в подальшому позбавить від безлічі проблем при налагодженні:

Якщо з'єднання відразу скидається або виводяться SSL помилки, ви щось зробили неправильно.

У своїх проектах я використовую PyAPNs бібліотеку. Простий файл обв'язка навколо неї реалізує всі основні завдання: push.py

Цілком можливо, що токен від програми буде приходити до вас в форматі Base64. тоді перед збереженням необхідно виконати наступні перетворення.

При інтеграції з Django проектом необхідно подумати про переключення між developer і production і про асинхронности запитів в APNS.

Асинхронність досягається використанням Celery.

Варто подумати і про відключення неактивних пристроїв: tasks.py:

Написати функцію для асинхронної broadcast розсилки повідомлень безлічі клієнтів, пропонується для самостійного написання в якості домашнього завдання.