86
1

Всеволод Шмыров, Яндекс

Embed Size (px)

DESCRIPTION

API Яндекс.Карт для мобильной разработки

Citation preview

Page 1: Всеволод Шмыров, Яндекс

1

Page 2: Всеволод Шмыров, Яндекс

2

API Яндекс.Карт для мобильной разработки

Всеволод Шмыров

Page 3: Всеволод Шмыров, Яндекс

3

API Яндекс.Карт

Page 4: Всеволод Шмыров, Яндекс

4

Page 5: Всеволод Шмыров, Яндекс

5

Page 6: Всеволод Шмыров, Яндекс

6

Page 7: Всеволод Шмыров, Яндекс

7

«Мобильность» - Октябрь 2013

29%29%https://clck.ru/9M7Wg

Page 8: Всеволод Шмыров, Яндекс

8

«Мобильность» - Октябрь 2014

36%36%https://clck.ru/9M7Wn

Page 9: Всеволод Шмыров, Яндекс

9

1. Как API Яндекс.Карт поддерживает мобильные устройства?

2. Рекомендации использования API на мобильных устройствах

3. Использование API во WebView

Page 10: Всеволод Шмыров, Яндекс

10Интересная ссылка

Page 11: Всеволод Шмыров, Яндекс

11

Как API поддерживает мобильные устройства?

Page 12: Всеволод Шмыров, Яндекс

12

2.0 – май 20122.1 – апрель 2014

Page 13: Всеволод Шмыров, Яндекс

13

Сенсорный ввод

Page 14: Всеволод Шмыров, Яндекс

14

Page 15: Всеволод Шмыров, Яндекс

15

Touch Events Pointer Events

Webkit, Blink, Gecko Mobile Trident >= 6.0

Простой Абстрактный

Page 16: Всеволод Шмыров, Яндекс

16

1. Ничего не делать

2. Переложить ответственность на разработчиков

Page 17: Всеволод Шмыров, Яндекс

17

Ничего не делать

click

Page 18: Всеволод Шмыров, Яндекс

18

click

Page 19: Всеволод Шмыров, Яндекс

19

Задержка~300mc

Page 20: Всеволод Шмыров, Яндекс

20

Page 21: Всеволод Шмыров, Яндекс

21

mousedownmouseupclickdblclickcontextmenu...

Page 22: Всеволод Шмыров, Яндекс

22

Передать ответственность

document.addEventListener("mousedown", this._onMouseDown);

document.addEventListener("touchstart", this._onTouchStart);

document.addEventListener("pointerdown", this._onPointerDown);

Page 23: Всеволод Шмыров, Яндекс

23

document.addEventListener("mousedown", this._onMouseDown);

document.addEventListener("touchstart", this._onTouchStart);

document.addEventListener("pointerdown", this._onPointerDown);

if (ifIE10) document.addEventListener(

"MSPointerDown", this._onPointerDown);

if (ifIE8)document.attachEvent(

"onmousedown", this._onMouseDown);

Page 24: Всеволод Шмыров, Яндекс

24

TouchEvents

PointerEvents

mousedownmouseupmousemoveclickdbclick…

touchstarttouchendtouchmove…

pointerdownpointeruppointermove…

Page 25: Всеволод Шмыров, Яндекс

25

touchstart ||pointerdown

mouseenter, mousedown

hold &&(touchstart ||pointerdown)

contextmenu

Page 26: Всеволод Шмыров, Яндекс

26https://clck.ru/9LoRk

click mousemove

contextmenu mouseup

dblclick wheel

mousedown multitouchstart

mouseenter multitouchmove

mouseleave multitouchend

Page 27: Всеволод Шмыров, Яндекс

27

Page 28: Всеволод Шмыров, Яндекс

28

Page 29: Всеволод Шмыров, Яндекс

29https://clck.ru/9LoSR

ymaps.domEvent.manager

.add(

htmlElement,

'multitouchstart',

function (event) {

// ...

}

);

Page 30: Всеволод Шмыров, Яндекс

30

Экран

Page 31: Всеволод Шмыров, Яндекс

31

1. Маленький физический размер экрана

2. Высокая плотность пикселей

Page 32: Всеволод Шмыров, Яндекс

32

Адаптивный дизайн

Page 33: Всеволод Шмыров, Яндекс

33

Large

Medium

Small

Page 34: Всеволод Шмыров, Яндекс

34

Large

Medium

Small

Page 35: Всеволод Шмыров, Яндекс

35https://clck.ru/9LoX6

Page 36: Всеволод Шмыров, Яндекс

36https://clck.ru/9LoX6

Page 37: Всеволод Шмыров, Яндекс

37https://clck.ru/9LoX6

Page 38: Всеволод Шмыров, Яндекс

38https://clck.ru/9LoX6

Page 39: Всеволод Шмыров, Яндекс

39

Балун (подсказка)

Page 40: Всеволод Шмыров, Яндекс

40

Page 41: Всеволод Шмыров, Яндекс

41https://clck.ru/9M7UE

Page 42: Всеволод Шмыров, Яндекс

42

Высокая плотность пикселей

Page 43: Всеволод Шмыров, Яндекс

43

window.devicePixelRatio

Page 44: Всеволод Шмыров, Яндекс

44

1. Увеличение размера изображений

2. Использование векторной графики

Page 45: Всеволод Шмыров, Яндекс

45

x1

x1

x5

x5

Page 46: Всеволод Шмыров, Яндекс

46

devicePixelRatio = 1 devicePixelRatio = 2

256 px 512 px

Page 47: Всеволод Шмыров, Яндекс

47

Рекомендации использования API на мобильных устройствах

Page 48: Всеволод Шмыров, Яндекс

48

APIЯндекс.КартHTML

JS

CSS

Страница

Page 49: Всеволод Шмыров, Яндекс

49

Page 50: Всеволод Шмыров, Яндекс

50

Мета “viewport”

Page 51: Всеволод Шмыров, Яндекс

51

Page 52: Всеволод Шмыров, Яндекс

52

Page 53: Всеволод Шмыров, Яндекс

53

<meta name="viewport" content="width=device-width, initial-

scale=1.0, maximum-scale=1.0, user-scalable=no"/>

Page 54: Всеволод Шмыров, Яндекс

54

Page 55: Всеволод Шмыров, Яндекс

55

Page 56: Всеволод Шмыров, Яндекс

56

Лишние соединения

Page 57: Всеволод Шмыров, Яндекс

57

Минимум лишних обращений к сети

var myGeocoder = ymaps.geocode("Минск");

myGeocoder.then(function (res) {map.geoObjects.add(res.geoObjects);

});

Page 58: Всеволод Шмыров, Яндекс

58

<script src=//api-maps.yandex.ru/2.1/?lang=ru-RU type="text/javascript">

</script>

https://clck.ru/9Lq7W

Загрузка стандартного пакета

Page 59: Всеволод Шмыров, Яндекс

59

API Яндекс.Карт

Map

GeoObjectHint

Balloon

geoQuery

Button

Layer

Layout

……

Page 60: Всеволод Шмыров, Яндекс

60

//api-maps.yandex.ru/2.1/?load=Map,GeoObject&lang=ru-RU

Map,GeoObject

https://clck.ru/9Lq7W

Page 61: Всеволод Шмыров, Яндекс

61

Размер API в Кб режим “release”

Page 62: Всеволод Шмыров, Яндекс

62

Загрузка по требованию

var modules = ['Placemark', 'overlay.Placemark'];

ymaps.modules.require(modules).spread(function (Placemark, PlacemarkOverlay)

{// ..

});

Page 63: Всеволод Шмыров, Яндекс

63

Дозагрузка компонентов

Page 64: Всеволод Шмыров, Яндекс

64

Геолокация

Page 65: Всеволод Шмыров, Яндекс

65

geolocation

https://clck.ru/9M8iu

ymaps.geolocation.get({// provider: ‘yandex’, // or ‘browser’

}).then(function (result) {// …

});

Page 66: Всеволод Шмыров, Яндекс

66https://clck.ru/9M8jg

Page 67: Всеволод Шмыров, Яндекс

67

Использование API во WebView

Page 68: Всеволод Шмыров, Яндекс

68

WebView

Page 69: Всеволод Шмыров, Яндекс

69

<WebView android:id="@+id/webview"></WebView>

// …

WebView myWebView = (WebView) findViewById(R.id.webview);

myWebView.loadUrl("http://ya.ru");

Page 70: Всеволод Шмыров, Яндекс

70

Можно ли использоватьAPI Яндекс.Карт

во WebView?

Page 71: Всеволод Шмыров, Яндекс

71

Да

Page 72: Всеволод Шмыров, Яндекс

72

… но есть несколько особенностей

Page 73: Всеволод Шмыров, Яндекс

73

Нельзя создавать локальную копию API

https://clck.ru/9LkmH

Page 74: Всеволод Шмыров, Яндекс

74

Page 75: Всеволод Шмыров, Яндекс

75

Кеширование во WebView

webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE

);

Page 76: Всеволод Шмыров, Яндекс

76

Необходим интернет

Page 77: Всеволод Шмыров, Яндекс

77

Page 78: Всеволод Шмыров, Яндекс

78

<manifest ... > <uses-permission android:name="android.permission.INTERNET" /> ...</manifest>

Page 79: Всеволод Шмыров, Яндекс

79

Нужно обязательно указывать HTTP

заголовок «Referer»

https://clck.ru/9LkmH

Page 80: Всеволод Шмыров, Яндекс

80https://clck.ru/9LkmH

http://store_appid.ymapapp

Page 81: Всеволод Шмыров, Яндекс

81

myWebView.loadDataWithBaseURL(

"http://ru.yandex.api.mapsample.ymapapp",

assetHTMLText,

"text/html",

"UTF-8",

null

);

Page 82: Всеволод Шмыров, Яндекс

82

1.Нельзя создавать локальную копию API

2.Необходим интернет

3.Нужно обязательно указывать HTTP заголовок «Referer»

Page 83: Всеволод Шмыров, Яндекс

83

Пример проектаAndroid Studio

https://yadi.sk/d/B-VbFPktcUoXM

Page 84: Всеволод Шмыров, Яндекс

84

Официальная группа в Facebook

https://www.facebook.com/ymapsapi

Клуб разработчиков API Яндекс.Карт

http://clubs.ya.ru/mapsapi/

Документация версии 2.1

https://clck.ru/9Lkek

Page 85: Всеволод Шмыров, Яндекс

85

Спасибо за внимание!

Page 86: Всеволод Шмыров, Яндекс

86

Всеволод Шмыров

Разработчик интерфейсов

[email protected]

https://www.facebook.com/vsevolod.shmyrov

http://vsevolod-shmyirov.moikrug.ru/