Device Lab от Google: маячки с технологией Eddystone

в 18:13, , рубрики: android, Android TV, Chromecast, chromecast audio, Eddystone, github, Google, Google Play, google play music, html5, javascript, Receiver API, SDK, web, web приложения, Беспроводные технологии, маячки, мобильные приложения, Программирование, разработка мобильных приложений, Разработка под android

Device Lab от Google: маячки с технологией Eddystone / Хабрахабр

var N = 5;
var ar_duo1 = Math.floor(Math.random()*N+1);

if (typeof adriver == 'undefined')
{
var adb1 = 'yes';
}

var user_type = "guest";

var page_type = "publish_corp";

(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');

ga('create', 'UA-726094-1', 'auto');
ga('create', 'UA-726094-24', 'auto', {'name': 'HGM'});

ga('require', 'displayfeatures');
ga('set', 'dimension1', user_type); // user type - guest/readonly/habrauser

ga('set', 'dimension4', adb1);

ga('set', 'dimension5', page_type);

if(typeof removeUtms === 'undefined') {
removeUtms = function(){};
}

ga('HGM.set', 'dimension1', user_type);
ga('HGM.set', 'dimension2', "habrahabr");
ga('HGM.send', 'pageview');

ga('send', 'pageview', { 'hitCallback': removeUtms });

var adcm_config ={
id:1034,
platformId: 34,

tags: ['hub_wireless', 'hub_mobile_dev', 'hub_android_dev', 'hub_programming', 'g_internet_and_telecom', 'g_programming', 'g_mobile_os', 'g_android_os'],
init: function () {
window.adcm.call();
}
};

Долгое время мобильные приложения и физический мир никак не пересекались. Но технология Bluetooth Low Energy(BLE) маячков позволила разработчикам "общаться" с объектами реального мира, а пользователям получать самые релевантные данные от их текущей локации с точностью. Первые устройства уже отправились разработчикам, а сегодня в Лаборатории Google мы представляем разработчикам маячки Eddystone - iBKS и BKON, реализующие, в том числе, и концепцию Physical Web . Подайте заявку, возьмите устройства для разработки, поделитесь с сообществом результатами, а с миром новой идеей или приложением, способным изменить его!

$(document).ready(function() {
t341_showCaptions('6148978');
t341_checkSize('6148978');
$("#t-carousel6148978 .t-carousel__slides").swipe( {
swipeLeft:function(event, direction, distance, duration) {
$(this).parent().carousel('next');
},
swipeRight: function(event, direction, distance, duration) {
$(this).parent().carousel('prev');
},
threshold: 50,
preventDefaultEvents: false,
allowPageScroll: "none"
});
});

$(window).resize(function() {
t341_checkSize('6148978');
});

Маячки это простые передатчики, используемые для маркировки важных мест и объектов. Обычно, приложение может определить с помощью маячка местоположение пользователя с погрешностью до нескольких десятков сантиметров, что позволяет использовать его для наиболее точной геолокации, а благодаря стандарту Eddystone, маячки научились рассылать и URL.

Для работы с маячками компания Google разработала отдельную платформу, в которую входит стандарт Eddystone, система управления Beacon Dashboard, Google Proximity Beacon API и Nearby Messages API.

Сейчас в мире можно выделить три наиболее популярных стандарта маячков:

Различаются стандарты в основном форматами кадров (advertisment packet) и их количеством. Большинство устройств сейчас умеет транслировать сообщения в любой из этих трех спецификаций, а некоторые даже одновременно в нескольких.

Eddystone, также как и iBeacon от Apple или AltBeacon от Radius Network, дает разработчикам возможность поставлять информацию, связанную с местоположением, прямо на мобильные устройства пользователей (также, как и другие устройства,

Название Eddystone произошло от известного маяка Eddystone Lighthouse, который располагается в Ла-Манше.

В данном случае в Лаборатории нас больше интересует Eddystone - открытый (по лицензии Apache 2.0) формат сообщений для Bluetooth Low Energy (BLE) маячков от Google. На данный момент он поддерживает 5 видов пакетов (advertisment packet):

p {
font-size: 16px;
}
p.dline {
line-height: 1.5;
}

  • Eddystone-UID — 16-байтовый идентификатор, который состоит из 10-байт namespaceId и 6-байт instanceId.

  • Eddystone-URL — транслирует URL. Любой длинный URL можно сократить с помощью Google URL Shortener или любого другого сервиса сокращения ссылок, что бы поместится в ограниченный 18 байтами Advertisment packet. После декодирования, URL может быть использован любым клиентом с доступом к интернету. Eddystone-URL является основой Physical Web (о котором речь пойдет дальше) и позволяет легко обнаруживать и взаимодействовать с окружающим нас умными устройствами и сервисами.

  • Eddystone-TLM — телеметрия, доступны такие данные как напряжение аккумуляторной батареи, температура устройства, количество отправленных пакетов с момента включения и время с момента включения.

  • Eddystone-eTLM - зашифрованная версия кадра телеметрии.

Последние два кадра, Eddystone-EID и Eddystone-eTLM были анонсированы компанией Google в своём Security Blog 14 апреля этого года.

Маячок с поддержкой Eddystone-EID меняет свой 8-байтный AES-encrypted идентификатор псевдо-случайным образом со средним периодом, который задается разработчиком в диапазоне от 1 секунды до 9 часов. Для генерации идентификатора используется ключ (Ephemeral Identity Key или EIK) и таймер на самом маячке. Ключ генерируется во время подготовки и настройки маячка и затем передаётся в службу разрешения, например, Proximity Beacon API, (о котором речь пойдет позже)

Так же был представлен и Eddystone GATT service - новый стандартный интерфейс для конфигурирования маячков.

Почему возникла потребность в дополнительных мерах безопасности? Очевидно, что незащищенные сигналы маячков легко клонировать и отслеживать. Таким образом злоумышленник мог легко скомпрометировать какой то сервис или специальную акцию.

Для комплексной работы с маячками компания Google разработала ряд отдельных и независимых решений, которые объединила в платформу под названием Google's beacon platform. В неё входят стандарт Eddystone, система мониторинга и управления Beacon Dashboard, а так же API для взаимодействия с маячками, такие как Google Proximity Beacon API и Nearby Messages API и Places API.

Как мы уже сказали, в платформу входит два программных интерфейса - Nearby Messages API для Android и iOS, управляющий сканированием устройств в приложениях, и Google Proximity Beacon API, для управления маячками через облачную инфраструктуру. Первый API работает для получения информации, а второй для управления маячками:

Device Lab от Google: маячки с технологией Eddystone - 5

Если коротко, то у нас есть некое облачное хранилище Google Beacons Registry куда мы добавляем(регистрируем) наши маячки, точнее их идентификаторы.

Для этого мы можем использовать Proximity beacon API, Beacon Dashboard или специальное приложение Beacon Tools(Android, iOS). В рамках же Google Beacon Platform регистрировать можно только маячки с поддержкой Eddystone. После этого мы можем привязывать к маячку, а точнее его идентификатору какие то данные, так называемые Attachments. Beacon Dashbord позволяет нам не только регистрировать маячки, но и легко мониторить их и управлять вложениями через удобный интерфейс. После этого мы можем взаимодействовать с маячками с пользовательских устройств по средствам Nearby Messages API или Places API. Вы спросите при чём тут Places API - так вот этот интерфейс позволяет к маячкам в виде метаданных привязывать Place ID.

Для управления маячками вы можете использовать фирменные приложения Google для Android и iOS, а также приложения производителей, как это сделано описано ниже. Также на I/O 2016 года компания Google представила облачную систему управления маячками Beacon Dashboard, с помощью которой вы можете управлять маячками (например, описывать заведения, где они установлены, менять сообщения) и просматривать информацию об их работе.

Device Lab от Google: маячки с технологией Eddystone - 6

Как использовать маячки

В принципе, все взаимодействия пользователей с маячками укладываются в такие сценарии:

  • Отправка сообщений и уведомлений на устройство пользователя
  • Отправка ссылок на устройство через Physical Web
  • Интеграция с сервисами для более точной геолокации (например, Places API)

Более подробно работу с маячками в приложении на Хабре рассмотрел Звиад Кардава в "Google's beacon platform" в двух частях.

Кратко перечислим, что вам понадобится.

  1. Конфигурируете приложения:

2. Создаёте GoogleApiClient

3. Nearby Messages это publish-subscribe API, соответственно вам надо подписать приложение на получение уведомлений. Делается это либо в активном режиме, по запросу пользователя или событию, либо в бэкграунде, когда приложение непрерывно сканирует поступающие уведомления. Nearby Messages API требует разрешения пользователя на запросы publish() и subscribe(). Поэтому приложение должно проверять на что пользователь уже дал свое согласие и если такое отсутствует, то вызывать диалог запроса разрешений.

3.1 В активном режиме после создания GoogleApiClient и запроса разрешения у пользователя вы можете делать subscribe() с помощью вот такого кода.

3.2 В фоновом режиме код отличается.

4. Получаете сообщения через handleIntent.

5. Парсите его содержимое. Получение аттачмента от маячка также никаких проблем вызвать не должно. Аттачмент его это blob формата Namespace (идентификатор), Type (тип данных) и Data (собственно, сами данные).

6. Не забудьте сделать unsubscribe().

Необходимо помнить, что пока вы не выключите сканирование, оно происходит даже в фоновом режиме работы приложения, то есть даже если приложение в настоящий момент неактивно, а значит на него тратится энергия. И хотя фоновое сканирование потребляет меньше энергии, чем явное, батарейку все равно оно использует, а также оно менее надежное и задержки в нем больше. Когда подписка вам больше не нужна, вы можете отключить ее при помощи метода Nearby.Messages.unsubscribe.

Все примеры вы можете найти в документации на официальном сайте: https://developers.google.com/nearby/messages/android/

Как работает Physical Web

Объекты вокруг, являющиеся частью Physical Web, могут посылать сигналы через Bluetooth на ваше устройство с адресами страниц, связанных с ними. С помощью соответствующего приложения (по умолчанию это браузер Google Chrome, а также с Physical Web на платформе работают Opera, Firefor и ряд специализированных приложений - тот же Physical Web Browser) вы можете принимать сигналы и видеть рекомендованные маячками ссылки, переходя по ним из уведомлений.

td {
font-size: 16px;
}

Строка

Объекты Physical Web помечаются иконками Device Lab от Google: маячки с технологией Eddystone - 7 , в том числе и уведомления в Android.

Device Lab от Google: маячки с технологией Eddystone - 8

Почему Physical Web использует ссылки? URL это фундаментальная основа веба - они и гибкие, и децентрализованные. URL позволяет разработчикам получить цифровое присутствие без центрального места, дающего пропуск в экосистему. Это основной принцип глобальной сети и один из тех, что использует Physical Web для понижения барьера входа.

В этом главное отличие Physical Web - Eddystone-URL практически не нужно специальное приложение для приема информации и дальнейших действий. Bluetooth-сигнал получается Chrome или любым другим совместимым приложением, которое в случае Android уже предустановлено на устройстве, а в случае iOS скорее всего на нем присутствует.

Подопытные устройства

В нашей Лаборатории вы можете взять для разработки два маячка.
iBKS 105 от Accent System - первый маячок, официально совместимый с iBeacon и Eddystone (поддерживает кадры UID, URL, TLM, EID).

Device Lab от Google: маячки с технологией Eddystone - 9

BKON A1 от одноименной компании - поддерживает iBeacon, Eddystone-UID и Physical Web Eddystone-URL.

Device Lab от Google: маячки с технологией Eddystone - 10

Сколько работает маячок?

Это зависит от нескольких факторов:

1. От типа используемой батарейки.
2. От частоты рассылки сигнала (меняется в настройках).
3. От силы с которой транслирует маячок.
4. От количества и типов транслируемых пакетов.
5. От физических условий, в частности температуры.

В среднем можно рассчитывать на работу маячка в нормальном режиме не менее полутора лет. Для Eddystone есть специальный телеметрический сигнал Eddystone-TLM, в котором можно получить данные по напряжению аккумуляторной батареи. Для iBKS 105, например, официальное время жизни при трансляции одного сигнала в секунду - 30-40 месяцев.

Какова дальность распространения сигнала маячка?

Это, в свою очередь, также зависит от ряда факторов:

1. Настроек мощности передатчика (у BKON, например, 8 уровней мощности).
2. Физической среды.

Очевидно, что стены, например, уменьшают дальность обнаружения сигнала, но в целом при максимальной мощности дальность обнаружения в среднем составляет 120 метров (например, для BKON A1 дальность при максимальной мощности - 100 метров), при минимальном - 5 метров.

У скольких пользователей включен Bluetooth?

Данные сильно разнятся по платформам и странам, но можно ориентироваться на следующую цифру - в США у 45% пользователей Bluetooth включен. Чем моложе аудитория, тем больше этот процент.

Конфигурирование iBKS

$(document).ready(function() {
t341_showCaptions('6152631');
t341_checkSize('6152631');
$("#t-carousel6152631 .t-carousel__slides").swipe( {
swipeLeft:function(event, direction, distance, duration) {
$(this).parent().carousel('next');
},
swipeRight: function(event, direction, distance, duration) {
$(this).parent().carousel('prev');
},
threshold: 50,
preventDefaultEvents: false,
allowPageScroll: "none"
});
});

$(window).resize(function() {
t341_checkSize('6152631');
});

p {
font-size: 16px;
}
ol {
font-size: 16px;
}

p.dline {
line-height: 1.5;
}

  1. Скачивайте приложение iBKS Config Tool для Android или iOS.

  2. Не забудьте включить Bluetooth.

  3. Нажмите кнопку SCAN в верхнем правом углу.

  4. Приложение покажет вам все доступные в округе маяки.

  5. Для конфигурирования вам надо, чтобы iBKS находился в режиме подключения. В этом режиме он работает в течение 30 секунд с момента подачи питания или все время, если он сконфигурирован на это (Так называемый Developer Mode - маячок постоянно может менять свои параметры как раз для удобства разработчика, чтобы не приходилось вынимать батарейку каждый раз. Developer Mode для маячка можно задать в приложении).

  6. Для реализации первого вам надо вынуть батарейку и вставить ее снова и в течение 30 секунд подключиться к маяку.

  7. Доступ к батарейке вы можете получить повернув две части iBKS относительно друг друга.

  8. Пока маяк в режиме отладки подключитесь к нему из приложения и переведите в режим отладки. После этого режим конфигурирования будет доступен всегда.

Как начать работу с BKON и с Physical Web

Как и в случае с iBKS, вам в первую очередь понадобиться запитать сам маячок. Он, к сожалению, немного сложнее в открытии - на задней крышке у него 4 винта, но, к счастью, в комплект входит специальная отвертка для их программирования. Откройте крышку и установите прилагаемые батарейки в маячок. Все, на этом работа с ним закончена.

Как проверить, что он работает: вам нужен браузер, работающий с Physical Web. Естественно, лучшим примером тут может работать Google Chrome (или любой другой браузер на основе Chromium 49+, как мы писали выше - та же Opera). В Android он включен по умолчанию, а в iOS вам надо установить браузер или приложение и вывести его виджет на панель уведомлений, чтобы он показывал страницы существующих вокруг вас предметов.

Для конфигурирования BKON вам понадобиться аккаунт на сайте https://my.phy.net/. Введя номер маячка и адрес своей почты, вы получите доступ к облачному сервису, через который сможете задать название и целевую ссылку для маячка.

$(document).ready(function() {
t341_showCaptions('6152689');
t341_checkSize('6152689');
$("#t-carousel6152689 .t-carousel__slides").swipe( {
swipeLeft:function(event, direction, distance, duration) {
$(this).parent().carousel('next');
},
swipeRight: function(event, direction, distance, duration) {
$(this).parent().carousel('prev');
},
threshold: 50,
preventDefaultEvents: false,
allowPageScroll: "none"
});
});

$(window).resize(function() {
t341_checkSize('6152689');
});

Маячки для чемодана Samsonite

Samsonite весной 2016 года анонсировал выход Track&Go – высокотехнологичного чемодана со специальным маячком, который позволяет владельцу багажа отслеживать его местонахождение. Bluetooth маячки внутри чемодана будут работать по протоколу защиты данных Eddystone Ephemeral Identifiers (EIDs) от Google. Samsonite планирует выпустить первые чемоданы Track&Go на европейский рынок в конце 2016 года и далее выйти на международный рынок.
Учитывая перспективность данной инновации, не исключено, что такая система будет использована также и в других продуктах Samsonite – мобильных офисах и дорожных сумках – уже в 2017 году.
Device Lab от Google: маячки с технологией Eddystone - 16

Контроль за чемоданом через мобильное приложение

Bluetooth маячок, спроектированный и изготовленный Accent Systems, будет встроен в чемоданы Track&Go. Такой багаж необходимо зарегистрировать в приложении Travlr by Samsonite, разработанном совместно с агентством In The Pocket и доступном для бесплатного скачивания. Приложение Travlr by Samsonite было запущено в сентябре 2015 года, чтобы путешественники могли отслеживать рейсы, а также получать советы и напоминания во время своих поездок. Функция Track&Go в скором времени будет интегрирована в приложение, позволяя проверять расположение чемодана на расстоянии 70 метров, а также получать уведомления в случае, если чемодан будет перемещен. Если чемодан потерялся, владельцу следует пометить его в приложении как «утерянный». После этого приложение Travlr by Samsonite начнет поиск по базе пользователей, чтобы помочь владельцу найти свой багаж. Когда другой пользователь находится в радиусе 70 метров от утерянного чемодана, приложение улавливает EID сигнал и отправляет уведомление с информацией о местоположении и времени получения сигнала владельцу багажа. Все уведомления и отслеживание бесплатны. Таким образом, благодаря пользователям приложения Travlr by Samsonite, Samsonite уменьшает стресс от самой насущной проблемы всех путешественников.

Другие примеры

p {
font-size: 16px;
}
p.dline {
line-height: 1.5;
}

  • Самый большой кейс в России - аэропорт Шереметьево выпустил мобильное приложение, поддерживающее систему внутренней навигации и позволяющее определить местонахождение пассажира в пределах аэровокзального комплекса Шереметьево и проложить оптимальный маршрут до пункта назначения в аэропорту. Мобильное приложение работает с помощью установленных маячков, число которых постоянно увеличивается. Благодаря этой технологии межэтажный и межтерминальный маршрут строится с учетом инфраструктуры аэропорта.

  • K11 в Гонконге использует Eddystone-EID маячки в качестве путеводителей в музеях и магазинах.

  • Monumental Sports используют маячки для доставки таргетированных наград посетителям спортивных игр.

  • Carrefour использовала маячки в своих розничных магазинах - в связке с приложением они приветствовали покупаетелей, предлагали купоны и продукты, основываясь на истории покупок конкретного человека. Загрузки приложения увеличилось на 600%, а время, проведенное в нем на 400%.

Device Lab от Google: маячки с технологией Eddystone - 17

основатель компании Notissimus, одной из ведущих компаний в России, специализирующейся на работе с маячками

— Какие проблемы сейчас существуют в области разработки приложений с поддержкой Eddystone и Physical Web?

— С Physical Web вообще не нужны приложения как таковые, а с приложениями особых проблем нет - разве что неготовность рынка к их внедрению. Бизнес не понимает нюансов, деталей, перспектив. Пока не будет бизнеса и пользователи не подтянутся, потому что именно компании являются движущей силой на рынке. Это просто инструмент. Один из инструментов.

Ограничений сейчас два - бизнес и Bluetooth. Но это внешние по отношению к разработке проблемы.

— Какие инструменты вы используете для разработки?

— Всё стандартное, маячки настраиваются через стандартные приложения, разработка в Android Studio идет. Ничего другого здесь быть не может - стандарт открыт, есть готовые вызовы. Если вы используете маячки нативно (а возможно использование SDK производителей - многие выпускают свои наборы для разработки), то никаких проблем нет. Читаете документацию, пробуете, делаете.

Разработка даже на уровне инфраструктуры открыта - сейчас мы, например, развертываем в Москве и Санкт-Петербурге большую инфраструктуру из тысяч маячков и дальше сможем давать к ней доступ. Например, приложения Афиша может к ней подключиться и взаимодействовать с ней определяя локацию, о которой они узнали из журнала. Соответственно, для Афиши это еще одно направление монетизации.

— Что ограничивает на уровне компаний использование маячков?

— Неготовность менеджемента, другие насущные дела, не у многих вообще есть свои приложения. Само проникновение приложений в России невысокое. Сначала должна прийти культура потребления приложений, а потом уже и культура потребления маячков. Возьмите какую-либо крупную торговую компанию - наверняка у него нет своего приложения.

Дополнительные материалы

Официальная документация:

https://developers.google.com/beacons/
Proximity Beacon API
Nearby Messages API
Примеры на GitHub
Places API

Мастер-класс с последнего I/O по работе с маячками:

https://www.youtube.com/watch?v=3nYyApSiSLQ

Работа с Eddystone в Cordova при помощи JavaScript. В данном случае используется специальный плагин поверх Cordova BLE и примерно те же процедуры сканирования и получения сообщений, что и в большой Java. :

https://www.hackster.io/evo/detecting-eddystone-beacons-in-javascript-made-easy-fd6124

Заключение

В Лаборатории вы можете взять для разработки эти маячки и на практике попробовать внедрить гиперлокацию в свои приложения на их примере. Связанный и умный мир может дать и разработчикам и пользователям фантастические новые возможности и начинаются они здесь - в маячках Eddystone.

Комментарии (0)

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

$(document).ready( function(){
window.tmidLogin = function(){ return false; };
if( $.cookie('tmid_no_check') === undefined ) {
var expire = new Date();
expire.setMinutes(expire.getMinutes() + 10 );
$.cookie('tmid_no_check', 1, { expires: expire } );
$.getScript("https://id.tmtm.ru/checklogin/", function(){
if( window.tmidLogin() ) {
var href = $('#login').attr('href');
if( href !== undefined ) {
window.location.href = href;
}
}
});
}
});

// global vars
var g_base_url = 'habrahabr.ru';
var g_show_xpanel = false;
var g_base_fullurl = 'https://habrahabr.ru/';
var g_is_guest = false;

(function (d, w, c) {
(w[c] = w[c] || []).push(function() {
try {
if (typeof (_yaparams) != 'undefined') {
w.yaCounter24049213 = new Ya.Metrika({id:24049213,
webvisor:true,
clickmap:true,
trackLinks:true,
accurateTrackBounce:true,
params:_yaparams});
} else {
w.yaCounter24049213 = new Ya.Metrika({id:24049213,
webvisor:true,
clickmap:true,
trackLinks:true,
accurateTrackBounce:true});
}

} catch(e) { }
});

var n = d.getElementsByTagName("script")[0],
s = d.createElement("script"),
f = function () { n.parentNode.insertBefore(s, n); };
s.type = "text/javascript";
s.async = true;
s.src = (d.location.protocol == "https:" ? "https:" : "http:") + "//mc.yandex.ru/metrika/watch.js";

if (w.opera == "[object Opera]") {
d.addEventListener("DOMContentLoaded", f, false);
} else { f(); }
})(document, window, "yandex_metrika_callbacks");

Device Lab от Google: маячки с технологией Eddystone - 18

function checkHeaderPos(){
var topToHubs = $('.megapost-cover').offset().top + $('.megapost-cover').outerHeight();
var sT = $(this).scrollTop();
if (sT > topToHubs) {
$('.t199__js__header, .t199_js__header').fadeIn();
} else {
$('.t199__js__header, .t199_js__header').fadeOut();
}
}

$(window).on('scroll', function() {
checkHeaderPos();
});

function drawguides(){
if($("#guides").length)$("#guides").remove();

$("body").append('

');

var g=$('#guides');
var ww=$(window).width();

var offset_left=parseInt((ww-1200)/2);
var col_space=20;
var col_width=100;

if(ww=960){
for(i=0;i<13;i++){
var x1=(i*col_width)+offset_left-col_space;
var x2=(i*col_width)+offset_left+col_space;
var n=i+1;
if(i!=0)g.append('

');
if(i!=12)g.append('

');
if(i!=12)g.append('

'+n+'

');
}
}

if(ww<960){
var x=parseInt(ww/2);
g.append('

');
}

var doit;
$(window).resize(function() {
if($("#guides").length){
clearTimeout(doit);
doit = setTimeout(drawguides, 300);
}
});
}

function showguides(){
if($("#guides").length){
$("#guides").remove();
$("#guidesmenubutton").css("display","none");
}else{
drawguides();
$("#guidesmenubutton").css("display","block");
}
}

Автор:

Источник

Поделиться новостью

* - обязательные к заполнению поля