Клуб API Карт

Корректная работа API 2.0 в мобильных броузерах

Пост в архиве.

Здравствуйте,

подскажите, пожалуйста, корректные настройки карты для работы в мобильных броузерах. Например, ни один пример с API 2.x как следует не работает в стандартном броузере Android и в Opera Mobile (не работает приближение, не работает удаление).

В случае с API 1.x все работает корректно (есть приближение по двойному тапу, есть отдаление по сдвижению пальцев).

32 комментария
Sergey Konstantinov
28 января 2016, 04:53

Принципы работы в мобильных браузерах одинаковы для 1.1 и 2.0 :-)

Полностью поддерживаются дефолтные браузеры iOS и Bada, частично - дефолтный браузер под Android. Т.к. Safari Mobile под Android не дает отключать дефолтное поведение браузера по multitouch, мы рекомендуем отключать его совсем с помощью meta name="viewport" (http://api.yandex.ru/maps/doc/jsapi/1.x/dg/tasks/api-loading.xml)

Opera Mobile, как и большинство альтернативных браузеров, не поддерживает перехват touch-событий, поэтому корректная работа API в них невозможна.

Позвольте с Вами не согласиться. Вот самый первый пример из API 2 в двух вариантах

1. Без тега META http://188.130.240.78/test/bezmeta.htm

2. C тегом META http://188.130.240.78/test/smeta.htm

примеры скопипэйстены из документации. По поведению следующие различия: без тега META по двойному тапу в стандартном броузере Android 4.1 происходит увеличение страницы, с тегом META не происходит НИЧЕГО. Карту нельзя даже сдвигать, нельзя приближать, нельзя удалять. Поведение одинаково и в родном броузере Android, и в Opera Mobile.

C другой стороны, самый первый пример API 1.x - http://api.yandex.ru/maps/doc/jsapi/1.x/examples/mapbasics.html

Карта нормально сдвигается, приближается и в родном броузере Android, и в Opera Mobile и без всякого тега META.

По поводу Opera Mobile: на Android это единственный броузер, в котором с API 1.x отображаются полигоны и ломанные. И его работа с Яндекс API 1.x устраивает более чем.

Но ответьте, пожалуйста, продекларированная корректная работа API 2 в мобильных броузерах когда будет реализована, ибо сейчас не работает и то, что хоть в одном броузере, но работало со старым API ? Или же Android вообще исключен из поддержки в пользу iOS ?

 

Адроид очень даже включен, только вот браузеры такие браузеры.

Сам пользуюсь оперой мобайл и буквально месяц назад - все работало( но мне никто не верит )

А вот на андроиде 4.1 мы лично не тестировали - у нас(на руках) такого просто нет :)

Тогда остается только откатываться назад на API 1.x и рекомендовать пользоваться Оперой мобайл.

Не будьте так категоричны, сейчас возмем лопату побольше и зароемся в глубины проблеммы.

Проблема решена.

Переключите Оперу из режима Desktop в режим Mobile.

Второе АПИ "умное" оно видит что у вас дестоп - его и использует.

Опера, как раз, работает в режиме "Tablet". На самом деле, нет никакой разницы в поведении API 2.0 (по поведению карты на устройстве) при переключении между этими режими. Пробовал даже очищать кэш.

Повторюсь, проверяю на картах без всяких "наворотов" - строго копипэйст из примеров:

1. Без тега META http://188.130.240.78/test/bezmeta.htm

2. C тегом META http://188.130.240.78/test/smeta.htm

 API 1.x работает.

какой у вас юзер агент? (посмотреть можно тут)

Если в нем нет "Opera Mobi" - работать не будет.

Проверял только что на Android 2.3/Opera Mobile 12.

Режима tablet у меня честно говоря - нет.

 

Последнее обновление Opera Mobile из магазина.

Opera/9.80 (Android 4.0.3; Linux; Opera Tablet/ADR-1204201824;U;ru) Presto/2.10.254 Version/12.00

А вот встроенный в Андроид броузер:

Mozilla/5.0 (Linux; U; Android 4.0.3; ru-ru; HUAWEI MediaPad Build/HuaweiMediaPed) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30

Естественно Opera Mobi в юзер агенте нет. Есть ключевые слова Android и Opera. Наверное, имеет смысл ориентироавться на них.

Слова Opera Mobi там нет :)

Не подскажите что за девайс у вас?

Huawei MediaPad 7''

 В общем-то, юзер агент ничего не объясняет.

API 1.x работает не смотря на нового юзер агента, а API 2 перестало работать даже во встроенном броузере.

Кроме того, официальная позиция Google сейчас такова, что следует различать планшеты и телефоны. И у тех, и у других должно присутствовать слово Android. Слово mobile остается для телефонов. Это уже однозначно. С планшетами такой ясности нет - google предлагает ничего не добавлять. Сообщество mozilla предлагает добавлять слово Tablet.

Но как бы то ни было, во всех случаях ключевое слово - это Android.

На дроиде в 2.3 карта работает, а мультитач не работает в принципе. Он не перехватывается.

В Opera Mobile( user agent Opera Mobi ) карты специально включают поддержку тач устройсв - работает ВСЕ.

Если АПИ по юзерагенту не понимает что у вас тач устройство(а оно судя по всему - не понимает) - поддержка тача включена не будет.

Про юзер агента Opera Tablet  мы раньше и не знали. Андроид 4.1 в руках не держали, но это мы сейчас исправим.

Сейчас получается что второй АПИ перехитрил сам себя - подумал что не нужны ему эти модули и не использовал их. Первый АПИ был всегда в одном варианте, и включал эти модули всегда - нужны они или не нужны.

Заставить АПИ2 это сделать со стороны юзера к сожалению не представляется возможным.

Sergey Konstantinov
28 января 2016, 04:53

Будьте добры, дайте полные выходные данные:

устройство

версия оси

бразуер

версия браузера

юзер-агент

настройки (если не дефолтные).

Устройство Huawei MediaPad

Версия Android 4.0.3

Версия ядра 3.0.8

Номер сборки S7-301uV100R002C002B008

Броузер Opera Mobile версия 12.0.2

Юзер агент Opera/9.80 (Android 4.0.3; Linux; Opera Tablet/ADR-1204201824;U;ru) Presto/2.10.254 Version/12.00

Настройки дефолтные

Броузер встроенный версия 4.0.3

Юзер агент Mozilla/5.0 (Linux; U; Android 4.0.3; ru-ru; HUAWEI MediaPad Build/HuaweiMediaPad) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30

Настройки дефолтные

 

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

 

Sergey Konstantinov
28 января 2016, 04:53

Не любое Android-устройство является touch-устройством. Андроид, например, серийно ставят на ноутбуки

http://market.yandex.ru/guru.xml?CMD=-RR=9,0,0,0-PF=2142398544~EQ~sel~x808347134-VIS=70-CAT_ID=432460-EXC=1-PG=10&hid=91013

Никакого touch-экрана там нет, а вот мышь, наоборот, очень даже есть.

Соответственно, приходится детектить поддержку touch-событий по юзер-агентам. Видимо, такие "странные" устройства нам придётся добавлять в список поддерживаемых руками.

Да, конечно, не все так просто.

Но, видимо, API 1.x был более рационально устроен в этом отношении.

Например, скоро ожидается выход "в массы" Windows 8. И я со страхом ожидаю криков пользователей "Тыкаю пальцем в экран и ничего не происходит!!!". Все эти крики будут отзываться у вас, ибо Windows 8 будет ставиться и на десктопы, и на ноутбуки и на планшеты, и на телефоны. И будет ли какое-то различие в юзер-агентах - очень большой вопрос. Не факт, но очень большая вероятность того, что никакой разницы не будет. Как тогда пользоваться новым API ?

Sergey Konstantinov
28 января 2016, 04:53

API в IE10/Win8 под мышеоринтированными интерфейсами работает нормально.

Как оно будет под тач-девайсами - я знаю не больше Вашего, Microsoft мне не сообщает :) На данный момент они представили только какой-то драфт спецификации, когда её внедрят - неизвестно. Ни одного мобильного устройства на Win8 я пока не видел.

Их, насколько я знаю, еще нет. Но будут.

Но как все же быть с текущей проблемой?

Sergey Konstantinov
28 января 2016, 04:53

Ждать следующих релизов, где мы включим мультитач под Opera Tablet.

Но дело ведь не только в Опере. "Родной" броузер ведь тоже не работает.

может использовать feature detection, а не смотреть на UA?

Тут вы должны принять решение - кроме вас никто не знает, как работает API. Если в первом API мультитач был включен всегда, то, может быть, так же следовало оставить и в API 2. Но поскольку во втором АПИ модуль подключаемый, то я бы, скорее всего, включал его при ПОДОЗРЕНИИ на то, что клиент мобильный. В конкретном случае - если в юзер-агенте присутствует слово Android. Насколько я понял, включение мультитача не мешает работать с картой на десктопном клиенте?

 

Sergey Konstantinov
28 января 2016, 04:53

В первом АПИ мультитач детектился по тому же принципу. Видимо, регулярка была немного другая.

Sergey Konstantinov
28 января 2016, 04:53

См. выше про ноутбуки на андроиде.

Привет) есть ли какие-ниудь изменения по данному вопросу? В OperaMobile карта не реагирует на touch-события, в отличие от дефолтного браузера.

Лично я пока никаких изменений не заметил. У меня на устройстве карты с API 2.0 не реагируют на тач - события ни в дефолтном броузере, ни в Opera Mobile.

Неужели придётся на 1.x переходить? назад в прошлое!

Мне теперь приходится поддерживать и старую и новую версию. К тому же на новом API случаются мощные тормоза...

Да, дела.

Только собрался свой движжок Желтых страниц переделывать под версию 2, но наткнулся на данный топик...

Если разработчики API не желают вводить опции по возможности ручного управления, значит рационально на сервере дать такую возможность пользователю. Т.е. дать возможность пользователю выбрать с какой картой работать. С новой или старой. И у зарегистрированных пользователей внести эти данные в профиль пользователя.

 

Да, все так.

Хотелось бы услышать комментарии команды разработчиков Yandex.

жду с нетерпением, ибо API 2.0 удобнее в разработке и предлагает новые возможности