Я вже писав статтю про реалізацію Push повідомлень з використанням сервісу Urbanairship. У цього способу є ряд переваг і недоліків. Переваги я описав в наведеній вище статті, недостакі сервісу в його лімітах на кількість безкоштовних повідомлень і періодичних відключеннях на технічне обслуговування.
Сьогодні ми розглянемо реалізацію IOS Push повідомлень своїми руками для Python програм.
IOS Push повідомлення бувають двох видів: локальні і віддалені. Локальні ініціюються додатком на стороні клієнта і в даній статті не розглядаються. Дистанційні повідомлення відсилаються з боку сервера на клієнтську програму за допомогою служби APNS (Apple Push Notification Service). Процес виглядає наступним чином:
- Додаток реєструється в APNS і отримує Device Token;
- Додаток повідомляє Device Token нашого сервера;
- Тепер сервер може встановити SSL з'єднання з APNS і відправити Push повідомлення;
Виберіть свій додаток і зайдіть в розділ налаштувань: Configure.
Скачайте production і development сертифікати (* .cer). Можливо вам буде потрібно попередньо включити Push нотифікації для свого застосування і створити їх.
Подальші дії краще провести на комп'ютері з OSX. Імпорт отримані сертифікати і експортуйте їх у форматі p12. Ймовірно вам буде потрібно ключ розробника з яким були створені CSR запити.
Отриманий файл у форматі p12 необхідно переконвертувати в pem. Для цього завдання я написав простенький shell скрипт.
Сконвертіруем з його допомогою отриманий від Apple Dev сертифікат в потрібний нам формат:
В процесі у вас буде запропоновано ввести відповідний пароль на сертифікати, якщо вони створювалися без пароля, просто натисніть Enter. Результатом цієї операції будуть pem файли з тими ж назвами.
Цим же скриптом їх можна протестувати, що в подальшому позбавить від безлічі проблем при налагодженні:
Якщо з'єднання відразу скидається або виводяться SSL помилки, ви щось зробили неправильно.
У своїх проектах я використовую PyAPNs бібліотеку. Простий файл обв'язка навколо неї реалізує всі основні завдання: push.py
Цілком можливо, що токен від програми буде приходити до вас в форматі Base64. тоді перед збереженням необхідно виконати наступні перетворення.
При інтеграції з Django проектом необхідно подумати про переключення між developer і production і про асинхронности запитів в APNS.
Асинхронність досягається використанням Celery.
Варто подумати і про відключення неактивних пристроїв: tasks.py:
Написати функцію для асинхронної broadcast розсилки повідомлень безлічі клієнтів, пропонується для самостійного написання в якості домашнього завдання.