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

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

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



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

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

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

    Итак, что происходит после того, как пользователь нажимает на иконку телефонной трубки в мобильном 2ГИС? Ему предложат связать устройство с 2ГИС для ПК или же с beta.2gis.ru. Мобильный 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 или Android, новый 2ГИС и старый знакомый, 2ГИС для ПК.
    2ГИС 200,62
    Карта города и справочник предприятий
    Поделиться публикацией
    Комментарии 12
    • –5
      «Суть проста — выбираете организацию, кликаете на номер телефона — и он готов к набору на вашем смартфоне.»
      А чем это отличается от открытия звонилки с передачей ей номера телефона?
      Не совсем понятно зачем нужны уведомления, интернет, связка и в чем суть фичи. Может вы видео какое приложите?
      • +5
        Я так понял, что суть в том, что кликаете вы на десктопе или в вебе, а номер начинает набирать мобильник.
      • +5
        При нажатии позвонить в десктопной версии, в диаллере мобильного появляется выбранный номер.
      • 0
        1) Есть отзывы, что Google Cloud Messaging в принципе не гарантирует время доставки push-а. Сейчас это уже не так, вы не сталкивались с такой проблемой?
        2) вроде бы Google Cloud Messaging поддерживает iOS. Не думали эту часть стандартизировать, что бы не поддерживать две различные схемы доставки?
        • +2
          Google Cloud Messaging в принципе не гарантирует время доставки push-а

          более того, он вообще не гарантирует доставку сообщения. Впрочем как и APNS (afaik)
          • +3
            1) Так и есть, ни GCM, ни APNS не гарантируют ни факта доставки, ни времени, а также не сообщают об ошибках на отрезке от пуш-сервиса до телефона. Это принципиальный недостаток данной системы, и с ним пришлось смириться и нам, и создателям других аналогичных приложений.

            2) Не слышали такое и не думали, как и использовать сторонние высокоуровневые библиотеки для работы с пушами. Интерфейс с пуш-системой — относительно маленькая и несложная часть, тут нет никакой необходимости вводить «третьих лиц».
          • 0
            Чет, ребят, не туда вас понесло. Пилите карту — у вас это очень хорошо получается.
            • 0
              2Gis это не только карта. А еще удобный и функциональный справочник.
              • 0
                Ну вы же меня поняли, зачем к словам придираться.
                • +6
                  Ну так дико удобно же. Когда я у компьютера — мне удобнее работать с компьютером. И набрать номер кликом, а не набиранием его в телефоне (с возможностью ошибки!) — это крутяк.
            • 0
              Вот тут написано:
              image

              «перейдите на экран привязки устройств».

              не могу найти в приложении «Экран привязки устройств», всю менюху облазил — где?

              Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

              Самое читаемое