Pull to refresh
VK
Building the Internet

ICQ Mobile под iOS версия 2.6 и Push-уведомления

Reading time 3 min
Views 12K
image

Основное новшество новой версии 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
Tags:
Hubs:
+29
Comments 83
Comments Comments 83

Articles

Information

Website
vk.com
Registered
Founded
Employees
5,001–10,000 employees
Location
Россия
Representative
Миша Берггрен