10. React Native
› Нативный интерфейс, логика на React
Cordova
› Нативная оболочка, приложение на HTML + CSS + JavaScript
Гибрид
› Замена части экранов на web-view
Пути решения
10
21. › Приложение принимает решение на основе URL
› Не требует изменений в коде веб-сайта
› Добавляет неявную связь между сайтом и приложением
Перехват события навигации
21
22. Приложение принимает решение на основе URL
Перехват события навигации
22
<a class="y-button"
href="/search/?fromName=Москва&when=2017-04-18">
Купить
!</a>
23. Приложение принимает решение на основе URL
Перехват события навигации
23
<a class="y-button"
href="/search/?fromName=Москва&when=2017-04-18">
Купить
!</a>
24. В приложении описываются методы, которые может
использовать JavaScript веб-сайта
Декларация интерфейса
24
this._liveBind(‘click', (event, data) !-> {
coordinator.doAction('showPartnerRedirect', {
offer: data.offer,
redirectUrl: data.redirectUrl,
})
})
25. В приложении описываются методы, которые может
использовать JavaScript веб-сайта
Декларация интерфейса
25
this._liveBind(‘click', (event, data) !-> {
coordinator.doAction('showPartnerRedirect', {
offer: data.offer,
redirectUrl: data.redirectUrl,
})
})
26. 26
class Coordinator {
doAction(name, payload) {
switch (platform) {
case 'ios':
return iosInterface.handle(name, payload)
case 'android':
return androidInterface[name](payload)
default:
return this.propagateEvent(name, payload)
}
}
})
27. 27
class Coordinator {
doAction(name, payload) {
switch (platform) {
case 'ios':
return iosInterface.handle(name, payload)
case 'android':
return androidInterface[name](payload)
default:
return this.propagateEvent(name, payload)
}
}
})
31. › выбор компонента WebView (WKWebView, UIWebView)
› обработка событий (WKScriptMessageHandler,
WKNavigationDelegate, WKUIDelegate)
› Apple Transport Security
Гибридизация iOS-приложения
31
56. Поддержка JS API
По данным caiuse.com 56
Android 4.3/w Crosswalk
Android 4.4/w Crosswalk
Android 4.4.4/w Crosswalk
Chrome 53
0 % 25 % 50 % 75 % 100 %
Да Частично Нет
61. Crosswalk lite
61
› Весит примерно ~10MB
› Собран с оптимизацией для снижения размера
› Отключены: WebRTC, WebP, Web Video, Web
Audio, Web Bluetooth, Web Notifications, …
62. Crosswalk lite
62
› Сжат с применением LZMA
› Собран с оптимизацией для снижения размера
› Отключены: WebRTC, WebP, Web Video, Web
Audio, Web Bluetooth, Web Notifications, …
› Весит примерно ~10MB
63. Несколько apk – это просто
63
!// build.gradle
productFlavors {
api16_armv7 {
!!...
}
api16_x86 {
!!...
}
api21 {
!!...
}
}
64. 64
api16_armv7 {
!// Chromium должен собираться на 23-й версии
targetSdkVersion 23
compileSdkVersion 23
buildToolsVersion "23.0.3"
minSdkVersion 16
versionCode defaultConfig.versionCode + 2
ndk {
abiFilters "armeabi-v7a", ""
}
}
65. Результат
65
API21 (ARM&x86) 6,92 МБ (83.2%)
API16+ (x86) 34,03 МБ (0.7%)
API16+ (ARM) 30,24 МБ (16.1%)
Crosswalk
x86 binary
ARM binary