- PVSM.RU - https://www.pvsm.ru -

Делаем звонок в один клик

«Звонок в один клик» или Push2Dial (P2D) — ещё одна функция, которая была анонсирована с новым 2ГИС. Суть проста — выбираете организацию, кликаете на номер телефона — и он готов к набору на вашем смартфоне.

Фича избавляет от необходимости самостоятельно набирать номер телефона, а значит шансы ошибиться и попасть не туда стремятся к нулю.

Делаем звонок в один клик

Звонить в один клик можно как из бета-версии нового онлайнового 2ГИС, так и из старого доброго офлайнового. Оба они делают это через API, написанный по такому случаю, о котором мы и расскажем.

API P2D, как вы можете догадаться из названия, работает с системой push-уведомлений [1]. На мобильных устройствах ее использование оправдано тем, что если позволить приложениям бесконтрольно залезать в интернет, когда им вздумается, анекдоты про Android и розетку станут суровой реальностью.

Кстати, в зависимости от платформы, работа с системой уведомлений немного отличается. На iOS push-уведомления — часть API системы. Приложение 2ГИС взаимодействует непосредственно с APNS [2].
На Android же наше приложение сначала связывается с библиотекой Google Play Services, которая, в свою очередь, взаимодействует с Google Cloud Messaging [3].

Итак, что происходит после того, как пользователь нажимает на иконку телефонной трубки в мобильном 2ГИС? Ему предложат связать устройство с 2ГИС для ПК [4] или же с beta.2gis.ru [5]. Мобильный 2ГИС подключается к системе push-нотификаций (или пытается это сделать), посылает серверу API Push2Dial запрос, содержащий в себе token телефона и данные об его платформе (iOS или Android).

Делаем звонок в один клик

API Push2Dial генерирует pin-код для этого телефона и создает связку “pin->устройство”, которую кладет в memcache на 10 минут. В ответ API Push2Dial возвращает этот pin телефону.

API Push2Dial написан на Lua. Для работы с memcache мы используем библиотеку lua-resty-memcached от разработчика по имени Yichun Zhang. Как ни странно, lua-resty-memcached, написанный на Lua, оказался быстрее и устойчивее, чем нативный модуль для nginx HttpMemcModule, написанный им же.

Код, который работает с memcache, простой и короткий. Вот так, например, Lua записывает связку:

-- подключаем memcached
memcached = require("memcached");

-- коннектимся
local memc, err = memcached:new();
local connected, err = memc:connect(хост, порт);

-- записываем для пин-кода токен и платформу
-- ttl = 10 минут
memc:set(PIN, json.encode({['token'] = token, ['platform'] = platform}), 600);

Пользователь получил pin-код и вводит его на компьютере. От «большого» 2ГИС в API отправляется запрос на существование связки “pin->устройство”. Если такая связка найдена, то API Push2Dial перекладывает данные о телефоне из мемкэша в базу данных и отдаёт продукту (онлайновому или офлайновому 2ГИС) идентификатор из базы, соответствующий устройству.

Возможно, вы обращали внимание, что в новом 2ГИС появилась авторизация. Если в этот момент пользователь оказался авторизован, то API Push2Dial записывает его авторизационный id. Таким образом, в следующий раз, где бы юзер не авторизовался, его привязка вступит в силу и он сможет сразу совершать звонки. Конечно же, в один клик.

Собственно, о звонках. Когда пользователь нажимает на номер телефона организации в 2ГИС на компьютере, создается запрос на генерацию push-уведомления, содержащий ID устройства. API P2D находит в базе этот ID и генерирует push-уведомление в формате XML или JSON, в зависимости от платформы. Которое, в свою очередь, уходит на соответствующий сервер Google или Apple, а оттуда — на телефон пользователя.

Делаем звонок в один клик

На этом этапе можно отметить еще один нюанс. На iOS набор номера всегда происходит через приложение 2ГИС, после того, как пользователь нажмет на уведомление. На Android в реальном времени запускается наш код (сразу по получению уведомления), который открывает дайлер. Таким образом, если приложение 2ГИС не было запущено, оно и не станет запускаться.

Если вы еще не пробовали звонок в один клик, самое время это сделать. К вашим услугам 2ГИС для iOS [6] или Android [7], новый 2ГИС [5] и старый знакомый, 2ГИС для ПК [4].

Автор: barsulka

Источник [8]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/razrabotka/52715

Ссылки в тексте:

[1] системой push-уведомлений: http://ru.wikipedia.org/wiki/%D0%A2%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%8F_Push

[2] APNS: http://en.wikipedia.org/wiki/Apple_Push_Notification_Service

[3] Google Cloud Messaging: http://en.wikipedia.org/wiki/Google_Cloud_Messaging

[4] 2ГИС для ПК: http://msk.2gis.ru/about/pc/?utm_source=news&utm_medium=habr&utm_campaign=post_p2d

[5] beta.2gis.ru: http://beta.2gis.ru/?utm_source=news&utm_medium=habr&utm_campaign=post_p2d

[6] iOS: https://itunes.apple.com/ru/app/2gis-offlajn-karty-i-spravocniki/id481627348?mt=8

[7] Android: https://play.google.com/store/apps/details?id=ru.dublgis.dgismobile

[8] Источник: http://habrahabr.ru/post/209014/