
Основное новшество новой версии ICQ-клиента под iPhone/iPod/iPad – поддержка механизма Push-уведомлений, и мы решили рассказать о них чуть подробнее с точки зрения разработчика. Возможно, эта информация будет полезна авторам альтернативных клиентов под iOS.
Не будем долго описывать, что такое Push-уведомления, и как их следует использовать, автор технологии – компания Apple, сделала это гораздо лучше, чем могли бы сделать мы. Документация на сайте Apple.
Остановимся на том, как это работает в ICQ.
Сейчас мы уведомляем о двух типах событий: запросах авторизации и отправки сообщений. (расширение этого списка в будущем маловероятно).
Пользователь, подписавшийся на Push-уведомления, считается находящимся online, даже если он вышел из ICQ. Для нас не так важно, что клиент не запущен, а принципиально, что сообщение будет прочитано моментально. В настройках можно указать, как долго будет сохраняться данное состояние в случае неактивности пользователя. Значение по умолчанию – сутки.
Сообщения, пришедшие через Push-уведомления, не считаются прочитанными, а остаются как недоставленные оффлайн-сообщения на сервере, т. е. будут доставлены в первый запущенный ICQ-клиент. Это должно быть принципиально для тех пользователей, которые используют приложение на телефоне как средство нотификации, но разговаривать предпочитают с компьютера. Запуск любого другого клиента с тем же UIN выводит iPhone-клиент в оффлайн – это сделано, чтобы сообщения не приходили сразу на два устройства и с двумя звуковыми сигналами.
Мы не до конца уверены в том, что вся логика двух предыдущих абзацев идеальна, возможно, в неё будут внесены некоторые изменения на основании статистики и реакции пользователей.
Что касается технической стороны дела, то всё довольно просто и может быть реализовано альтернативными клиентами без значительных усилий.
При создании или изменении параметров сессии надо указать параметры из таблички ниже
Boolean | mobile | Флаг мобильной сессии |
Notification Mode | notifyMode | Режим уведомлений (значение по умолчанию – “отключен”) |
String | iPhoneDevToken | Token устройства (hex-формат) |
String | iPhoneBundleId | Bundle ID приложения |
String | iPhoneSound | Строка, которую сервер будет присылать в уведомлениях в параметре “sound”. Необязательна для заполнения. |
String | iPhoneLocKey | Строка, которую сервер будет присылать в уведомлениях в параметре “loc-key”. Необязательна для заполнения. |
String | iPhoneActionKey | Строка, которую сервер будет присылать в уведомлениях в параметре “action-loc-key”. Необязательна для заполнения. |
Boolean | iPhoneBadge | Строка, которую сервер будет присылать в уведомлениях в параметре “badge”. Необязательна для заполнения. |
String | iPhoneLocArgs | Поля для уведомлений. Через запятую перечисляются те поля, которые приложение хочет получать в уведомлениях. Поддерживаемые поля «srcName», «srcId», «destName», «timestamp», «message». |
Integer | sessionTimeout | Длина сессии перед отключением (в секундах). |
Все поля кроме Notification mode пояснений, кажется, не требуют, а Notification mode — это перечислимый тип с возможными вариантами
Disabled | Отключены |
sendOnlyOne | Отправить только одно |
sendOnePerConversation | Отправлять не более одного от каждого контакта |
applePushNotification | Отправлять все уведомления |
Дополнительное внимание обращаю на поле mobile, если оно заполнено, то это позволяет отображать соответствующую иконку в контакт-листе ваших друзей.
Всё, теперь осталось выйти из клиента, чтобы начать получать Push-уведомления.
Мы высылаем 4 типа уведомлений, см. примеры ниже.
1. Одно сообщение: {«aps»:{«alert»:{«loc-key»:«IM2», «loc-args»:[«111111», «222222», «some_text_here»]}, «badge»:1, «sound»:«IM»}}
111111 – UIN отправителя
222222 – UIN получателя
some_text_here – текст сообщения
2. Несколько сообщений: {«aps»:{«alert»:{«loc-key»:«New Messages», «loc-args»:[«5»]}, «badge»:5, «sound»:«eventSound_ReceiveIm.wav»}}
3. Один запрос авторизации: {«aps»:{«alert»:{«loc-key»:«AR1», «loc-args»:[«111111», «222222», «parparon5», «John», «Johnson»]}, «badge»:1, «sound»:«eventSound_ReceiveIm.wav»}}
111111 – UIN получателя
222222 – UIN отправителя
parparon5 – Ник отправителя
John – Имя отправителя
Johnson – Фамилия отправителя
4. Несколько запросов авторизации: {«aps»:{«alert»:{«loc-key»:«AR2», «loc-args»:[«2»]}, «badge»:2, «sound»:«eventSound_ReceiveIm.wav»}}
Кажется, и они дополнительных пояснений не требуют. Впрочем, если требуют – мы всегда готовы их дать.
P.S.: нет, мы не планируем переход на XMPP, все мои мысли по этому поводу можно прочесть в комментариях к любому предыдущему посту про ICQ.
P.P.S.: да, официальным клиентом под iPhone многие пользуются, даже в русском AppStore оригинальный ICQ стоит выше, чем любой альтернативный. И, чем любой клиент, поддерживающий произвольный xmmp, – тоже.
P.P.P.S.: ICQ Mobile на AppStore