в iPhone OS 3.0 обеспечивают способ уведомления пользовтелей о ожидающих их данных используют постоянное зашифрованное IP-соединение приходят даже во время нахождения телефона в режиме ожидания являются альтернативой приложениям, работающим в фоновом режиме (которые запрещены на iPhone) В. Пузанов и В. Кириллов (Hack&Dev) Push-уведомления 18 июля 2009 2 / 20
[app registerForRemoteNotificationTypes: UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeAlert]; iPhone блокирует PDP-контекст в активном состоянии и устанавливает TCP-соединение с PUSH-сервером $ netstat | grep 5223 tcp4 0 0 79.124.146.15.51726 17.149.34.79.5223 ESTABLISHED делегат UIApplication получает уведомление - (void) application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken с 32-байтным токеном В. Пузанов и В. Кириллов (Hack&Dev) Push-уведомления 18 июля 2009 5 / 20
питания, то раз в минуту происходит следующий процесс CPU Baseband PMU zzz.. 1 Разбуди CPU, мне скучно! 2 exton2(bb) 3 Что там происходит? Есть пакеты? Нету? Ну я дальше спать пошел В. Пузанов и В. Кириллов (Hack&Dev) Push-уведомления 18 июля 2009 6 / 20
байт) пакеты с уведомлениями целевое приложение определяется по TLS-сертификату, используемом при установке соединения. Сертификаты и генерируемые токены зависят от типа профиля production или testing которые используются в provision профилях development и distribution соответственно. Структура пакета на C #define PUSH_PKT_MAXSIZE 256 struct push_pkt { struct push_pkthdr { u_int8_t cmd; /* = 0 */ u_int16_t devtokenlen; /* = htons(sizeof(devtoken)) */ u_int8_t devtoken[32]; u_int16_t payloadlen; /* = htons(sizeof(payload)); */ } hdr; u_char payload[PUSH_PKT_MAXSIZE - sizeof(struct push_pkthdr)]; /* json string */ } __packed; В. Пузанов и В. Кириллов (Hack&Dev) Push-уведомления 18 июля 2009 8 / 20
соединения происходит при помощи “рукопожатия” выбор лучшего алгоритма шифрования, поддерживаемого обеими сторонами отправка клиенту сертификата и открытого ключа генерация случайного числа и передача в зашифрованном виде открытым ключом генерация сессийного ключа при правильном “рукопожатии” начинается обмен криптованными данными при помощи сессийного ключа поддерживает порядка 10 симметричных/ассиметричных алгоритмов и хеш-функции Реализации OpenSSL, GnuTLS, NSS, JSSE В. Пузанов и В. Кириллов (Hack&Dev) Push-уведомления 18 июля 2009 11 / 20
2 Создать приватный ключ openssl genrsa -out private-key.pem 2048 3 Сгенерировать Certificate Signing Request openssl req -new -key private-key.pem -out push.csr Необходимо правильно заполнить Common Name и Email Address в соответсвии с данными iDP 4 Сгенерировать на iDP push-сертификаты для CSR (aps_developer_identity.cer и aps_production_identity.csr) 5 Сконвертировать сертификаты в формат PEM openssl x509 -inform der -in aps_developer_identity.cer -out developer-cert.pem openssl x509 -inform der -in aps_production_identity.cer -out production-cert.pem 6 Сгенерировать provision-профили для уникального Apple ID (с поддержкой Push) В. Пузанов и В. Кириллов (Hack&Dev) Push-уведомления 18 июля 2009 12 / 20
реализовать API Objective-С по документации Apple Cocoa Objective-C Runtime Foundation AppKit CoreFoundation CoreGraphics CoreData (в разработке) портирован на несколько программных платформ Darwin Windows Linux Solaris BSD (OpenBSD, FreeBSD) В. Пузанов и В. Кириллов (Hack&Dev) Push-уведомления 18 июля 2009 13 / 20
holes in the default install, in a heck of a long time! имеет встроенную поддержку криптографии в ядре OpenSSL входит в комплект базовой системы имеет полный набор сетевого инструментария в комплекте (от netcat до bgpd) имеет порт cocotron-gcc и cocotron прекрасно выполняет функцию платформы разработчика серверных (а также консольных) приложений на Objective-C/Foundation (например, сервер push для iPhone) . . . даже используется на настольных и мультимедийных системах В. Пузанов и В. Кириллов (Hack&Dev) Push-уведомления 18 июля 2009 14 / 20
значительно упростить взаимодействие с клиентами HTTPush предоставляет простой JSON или XML API для передачи уведомлений на iPhone. В. Пузанов и В. Кириллов (Hack&Dev) Push-уведомления 18 июля 2009 16 / 20
или XML Поддержка групп подписчиков Возможность передать увдомление: одному подписчику группе подписчиков всем подписчикам (одного приложения) Пример пакета для передачи уведомления подписчику (здесь <a>...</a> ID приложения в HTTPush, а <r>...</r> ID подписчика для конкретного приложения): <?xml version="1.0" encoding="UTF-8"?> <notification> <a>05673b6d12c796afc0cb74849e60573949bf2521</a> <b>{"aps":{"badge":1,"alert":"Hi from squidshot!"}}</b> <r>test</r> </notification> В. Пузанов и В. Кириллов (Hack&Dev) Push-уведомления 18 июля 2009 17 / 20
одной учетной записи) Sandbox 1000 уведомлений в месяц бесплатно Production 1000 уведомлений в месяц 1€ предоплата приобретенные уведомления действителны в течение 3-х месяцев уведомления действительны для всех приложений и пользователей (можно делится с друзьями) В. Пузанов и В. Кириллов (Hack&Dev) Push-уведомления 18 июля 2009 18 / 20