С помощью нового продукта «1С-Битрикс: Мобильное приложение» можно создавать свои мобильные приложения с использованием Javascript и HTML5, что существенно дешевле и значительно быстрее нативной разработки.
Минимальные версии систем:
Максимальные размеры приложений:
В данной главе рассказывается как разрабатывать свои мобильные приложения.
/myfirst_app/
. /myfirst_app/left.php
и /myfirst_app/index.php
.
if (CModule::IncludeModule("mobileapp")) CMobile::Init();
Т.е чтобы создать шаблон мобильного приложения, нужно вызвать метод CMobile::Init() в стандартном шаблоне сайта. С помощью этого метода инициализируются нужные константы, подключаются нужные JS-скрипты, соответствующие платформе клиента (iOS или Android), создаются нужные объекты и т.п.
/myfirst_app/
. Рекомендуется поставить сортировку подключения шаблонов 0 или 1.
/myfirst_app/
файл config.php. При обращении к файлу должен возвращаться JSON.
Файл должен быть следующего содержания:
<? header("Content-Type: application/x-javascript"); $config = array( "appmap" => array( "main"=>"/myfirst_app/index.php", "left"=>"/myfirst_app/left.php" ) ); echo json_encode($config); ?>где:
main
- стартовая страница приложения;
left
- страница, которая загружается в левую часть слайдера.
Теперь приложение может подключаться к сайту и показывать контент. После подключения уже разработчик должен обеспечить корректную навигацию по приложению. Поэтому, необходимо меню. Его часто располагают в левой части слайдера.
Согласно содержанию config.php, в качестве страницы для левой части слайдера загружается /myfirst_app/left.php
.
Давайте расположим в этом файле компонент bitrix: mobileapp.menu - компонент меню:
<? require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/header.php"); $arParams = array( "MENU_FILE_PATH" => SITE_DIR . "myfirst_app/.mobile_menu.php", ); $APPLICATION->IncludeComponent( 'bitrix:mobileapp.menu', 'mobile', $arParams, false, Array('HIDE_ICONS' => 'Y')); ?> <script type="text/javascript"> app.enableSliderMenu(true); </script> <? require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/footer.php") ?>
На вход компоненту отдаем параметр MENU_FILE_PATH
- путь к файлу меню.
Разместим этот самый файл меню по нужному пути.
<? IncludeModuleLangFile(__FILE__); $arMobileMenuItems = array( array( "type" => "section", "text" =>"Раздел меню", "sort" => "100", "items" => array( array( "text" => "Новый пункт меню!", "data-url" => SITE_DIR."myfirst_app/test.php", "class" => "menu-item", "id" => "main", "data-pageid"=>"main_page" ) ) ) ); ?>
Структура меню проста. Есть секции. Каждый пункт меню снабжается нужными атрибутами:
text
- название пункта;data-url
- куда будем переходить при клике по пункту;class
- css-класс пункта меню;id
- идентификатор;data-pageid
- идентификатор, который учитывается приложением. При клике на пункт страница прогрузится и закешируется. Таким образом, в дальнейшем она всегда будет открываться мгновенно, но за актуальностью контента на этой странице придется следить. В итоге получим вот такое меню:
В исходном коде страницы меню есть вызов функции app.enableSliderMenu(true) - разблокировка слайдера. Что за объект app? Это объект библиотеки BitrixMobile 2.0, который как раз и позволяет управлять приложением. При вызове в шаблоне приложения CMobile::Init() объект app становится доступным. Этот объект содержит множество полезных функций, которые описаны далее в курсе и в файле /bitrix/js/mobileapp/bitrix_mobile.js
Разместим нашу страницу /myfirst_app/test.php
, на которую ссылается созданный пункт меню:
<? require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/header.php"); ?> <script type="text/javascript"> function openTable() { app.openBXTable({ url: "/myfirst_app/list.php", TABLE_SETTINGS: { alphabet_index: false, // Выключим алфавитный индекс showtitle: true, //Покажем тайтл cache: false,// не кэшируем name: "Разделы", // callback: function (data) { alert(JSON.stringify(data)); } } }); } //добавить кнопку app.addButtons( { menuButton: { type: 'plus', style: 'custom', callback: function () { app.menuShow(); //app.openNewPage("/myfirst_app/test2.php"); } } } ); //добавить меню app.menuCreate({ items: [ { name: "Открыть страницу", action: function () { // alert("Hello"); app.openNewPage("/myfirst_app/test2.php"); } }, { name: "bitrix", url: "http://bitrix.ru", icon: 'settings' } ] }); //title app.setPageTitle({ title: "MyFirstApp" }); //pull-down-to-refresh app.pullDown({ enable: true, callback: function () { document.location.reload(); }, downtext: "Тяни...", pulltext: "Отпускай...", loadtext: "Жди..." }); </script> <button style="width:100%;height:50px" onclick="openTable();">Table</button> <? require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/footer.php") ?>
Далее необходимо создать /myfirst_app/list.php
с таким содержанием:
<? require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php"); $data = Array( "data"=>Array( "company"=>Array( Array( "ID"=>1, //идентификатор записи "NAME"=>"Google", //имя для отображения "URL" => "http://google.ru", "IMAGE"=>"http://www.mintfo.com/wp-content/uploads/2012/08/New-blue-logo-Google-revamps-mainpage-favicon-300x300.png", "TAGS" => "Заграничный поисковик", "SECTION_ID"=>"milk"//принадлежность к секции ), Array( "ID"=>2, "NAME"=>"Bitrix", "SECTION_ID"=>"meat", "IMAGE"=>"http://www.incr.ru/img/bitrix-logo.png", "TAGS"=>"Отечественная CMS", "URL"=>"http://bitrix.ru" ), Array( "ID"=>3, "NAME"=>"Yandex", "SECTION_ID"=>"meat", "IMAGE"=>"http://blogs.computerra.ru/wp-content/uploads/2012/10/yandex-browser-logo-289x300.jpg", "TAGS" => "Свой домашний браузер", "URL"=>"http://yandex.ru" ) ), ), "names"=>Array("company"=>"Компании") ); $data = $APPLICATION->ConvertCharsetArray($data, "windows-1251","utf-8"); $APPLICATION->RestartBuffer(); echo json_encode($data); die();
Запустим приложение и перейдем по пункту Новый пункт меню - увидим страницу с кнопкой + на панели с заголовком Потяни,чтобы-обновить и кнопкой Table. Нажмем на кнопку Table - откроется таблица c данными.
В мобильном приложении есть события, которые позволяют гибко решать множество задач. Обрабатывать эти события просто. Например:
BX.addCustomEvent("onOpenPageAfter", function(){ setTimeout(function(){ app.closeController(); },2000); });
Размещая этот код, мы как бы говорим странице: "После открытия закройся обратно через 2 секунды."
Таким образом, мы получили скелет приложения - навигацию и первую страницу. За основу также можно взять уже готовое решение Мобильный интернет-магазин (модуль eshop_app).
В данном разделе рассказывается, как создать аккаунты в программе для разработчиков и даны рекомендации по всем пунктам заполнения данных в Форме заявки на компиляцию.
Остановимся более подробно на создании аккаунтов на Google Play и Apple Developer Center.
Итак, регистрация в программе для разработчиков - для чего это нужно? Регистрация в программе разработчиков дает возможность публикации ваших приложений в магазинах приложений Google Play и AppStore.
Чтобы стать участником программы для разработчиков Google Play, нужно иметь аккаунт Google. Зарегистрироваться можно по адресу.
Далее Ваш аккаунт нужно зарегистрировать в Google Play. Сделать это можно по следующему адресу.
Для того, чтобы стать участником программы для разработчиков Apple Developer Center, нужно иметь аккаунт AppleID. Зарегистрироваться можно по адресу.
После этого, аккаунт нужно зарегистрировать в Apple Developer Center. Сделать это можно по следующему адресу, войдя под своим AppleID (или ссылка Account в правом верхнем углу на сайте Apple Developer Center).
Поздравляем! Вы теперь участник программы разработчиков.
После того, как прошли процедуру посвящения в программу разработчиков, приступаем к заполнению Формы заявки на компиляцию. Сама форма не сложна, но есть наиболее часто встречающиеся ошибки в ее заполнении. Давайте рассмотрим их.
Сборка приложения производится только при активном лицензионном ключе «1С-Битрикс: Мобильное приложение». В случае, если срок действия лицензионного ключа истек, сборка производится не будет. Чтобы избежать это, своевременно продлевайте срок действия лицензионного ключа.
Используется для отображения в магазинах приложений Google Play и App Store. Имеется ограничения по количеству символов:
Название играет важную роль в поиске и обнаружении приложения пользователями. Простое и легко запоминающееся название может способствовать более успешному поиску, при этом оно должно отражать суть работы приложения, быть понятным и уместным. Рекомендуется использовать как можно более короткие и актуальные фразы.
Используется для отображения названия приложения на устройствах.
Укажите корректный адрес приложения в формате: <протокол>://<домен>/<имя_папки>
.
Укажите контактный email уполномоченного лица, с которым можно связаться в случае возникновения вопросов у наших разработчиков, или при необходимости получения дополнительной информации.
Используется для описания приложения в магазинах приложений Google Play и App Store.
В данном поле можно указать определенные условия сборки. Например, сборка должна быть только для телефонов, или только в портретном режиме. Либо, другую, необходимую информацию, для наших разработчиков.
Укажите, на какой платформе необходима Вам сборка. На данный момент, сборки могут быть собраны на платформах iOS и Android. В течение срока действия лицензионного ключа, вы можете запросить, по мере необходимости, сборку либо на обе платформы, либо на конкретную платформу.
В первую очередь, нашим разработчикам необходима информация о созданном уникальном идентификаторе приложения (Bundle ID).
Для возможности сборки Вашего приложения на платформе iOS, нашим разработчикам необходимо прислать: сгенерированные аккаунтом для разработчиков iOS Certificates, сертификат .p12 и iOS Provisioning Profiles для публикации (есть еще для разработчиков, их высылать не надо).
На основе этих сертификатов и Provisioning Profiles, наши разработчики соберут бинарный файл для публикации и передадут его Вам.
Если Вам необходимо будет использование push-уведомлений на платформе iOS, нашим разработчикам также нужен сгенерированный сертификат для push-уведомлений (Apple Push Service).
Если Вы планируете использование push-уведомлений в Вашем приложении на платформе Android, то Вам необходимо прислать нашим разработчикам сгенерированные ключи сервиса Google Cloud Messaging.
Пошаговая инструкция:
Иконки используются в сборке приложения, и при оформлении заявки в магазинах приложений Google Play и App Store. Для сборки на платформе iOS необходима иконка размером 1024x1024 пикселей, для сборки на платформе Android иконка должна иметь размер 512x512 пикселей.
Стартовый экран - это окно, которое отображается до появления основного окна приложения. Обычно это - логотип компании. Не рекомендуется делать какие-либо надписи на стартовых экранах, так как стартовый экран появляется максимум на пару секунд, надпись просто не успеют прочесть. Также на устройствах, использующих платформу Android, из-за большого количества разрешений экранов, устройство может «подрезать под экран» по краям стартовый экран, и надпись может попасть в зону «подрезания» устройством.
Стартовые экраны должны соответствовать указанным размерам:
Стартовый экран (640x1136, iPhone 5)Иконка уведомления для клиентских приложений отображается на телефонах с ОС Android 5+ в виде белого квадрата. Примерно так:
и так:Причина этого: неправильно подготовленное изображение иконки.
Требования к изображению:
Правильно подготовленная иконка даёт такой вид уведомлений:
иНужен для нескольких основных целей, связанных с разработкой приложений на платформе iOS и публикации сборки в App Store. Во-первых, нужен для сборки приложения, так как аккаунт проверяется уже на этапе создания двоичного файла для публикации. Во-вторых, аккаунт разработчика Apple Developer Center нужен для создания Сертификатов (Certificates), Идентификаторов (Identifiers), Профилей (Provisioning Profiles). Все это обеспечивает управление системой сертификации ваших приложений, дающих право публикации вашего приложения в App Store.
Пароль, который вы использовали при регистрации APPLE ID. Вы можете изменить основной пароль, на временный. После публикации приложения в App Store, вы можете вернуть основной пароль. В этом случае, у вендора не будет доступа к вашей учетной записи, но, в случае обновления приложения, нам потребуется пароль от вашей учетной записи снова.
Версия( XX.XX.XX, X.X...)Номер добавляемой версии. Отображается в App Store для информирования клиентов. Нумерация должна следовать типичным правилам присвоения версий программному обеспечению (например, 1.0, 1.0.1, 1.1).
Название приложения в магазине приложений - то, которое будет отображаться в App Store. Его длина не может быть меньше двух символов, и не должно превышать 30 символов.
Указывается такое же Название приложения, как из вкладки Общие.
Название играет важную роль в поиске и обнаружении приложения пользователями. Простое и легко запоминающееся название может способствовать более успешному поиску. Название должно отражать суть работы приложения, быть понятным и уместным. Рекомендуется использовать как можно более короткие и актуальные названия.
Краткое название размещается под иконкой, используется для отображения названия приложения на устройствах.
Указывается такое же Краткое название, как из вкладки Общие.
Имя лица или название организации, которым принадлежат эксклюзивные права на приложение. Указывается после года получения прав (например, 2016, Bitrix Inc.).
Название компанииЕсли Вы участвуете в программе Apple Developer Program как компания, то можно указать, какое название компании использовать. Параметр company name (название компании) играет в магазине важную роль при перемещениях между приложениями и их группировке. Название юридического лица отображается в графе seller (продавец) Ваших приложений. Название компании отображается в магазине вместе с Вашими приложениями.
Например, Apple – это название компании. При щелчке названия компании отображаются все ее приложения, представленные в магазине:
А Apple Distribution International – название продавца.
Укажите Имя, Фамилию, контактный e-mail и телефон сотрудника Вашей организации, с которым можно связаться в случае возникновения вопросов у команды проверки приложений или при необходимости получения дополнительной информации.
Телефонный номер укажите в международном формате: +код страны (код города) номер телефона
.
При наличии в Вашем приложении формы авторизации необходимо указать имя пользователя. Данная учетная запись будет использована при проверке приложения и должна действовать до полной проверки и публикации приложения.
Укажите также пароль для учетной записи демо-пользователя с полным доступом. В случае не полного доступа к функциям приложения, модераторы App Store укажут на это, и вернут приложение с указанием, на изменение метаданных.
Один из важных аспектов доступности приложения - это категория, в которой оно отображается в магазине приложений App Store. Категории позволяют пользователям просматривать коллекции приложений. Постарайтесь приложить все усилия, чтобы выбрать категорию, которая наилучшим образом описывает основные функции Вашего приложения. Неправильный выбор категорий для приложения может послужить поводом возврата приложения модераторами App Store для изменения неправильно указанных категорий.
В App Store Connect приложение можно поместить в две разные категории, повышая его шансы быть замеченным пользователями.
Ключевые словаОдно или несколько ключевых слов, описывающих приложение. Список связанных поисковых терминов, разделенных запятыми. Требуется указать как минимум одно ключевое слово длиной более двух символов. Допустимый общий объем текста - до 100 байт (примерно до 100 символов). Поиск приложения выполняется по его названию и названию компании, поэтому эти значения не нужно дублировать в списке ключевых слов. Применение названий других приложений или компаний в качестве ключевых слов запрещено.
Создайте на своем веб-сайте систему поддержки для приложения. Обеспечьте пользователям возможность без труда связаться с Вами напрямую по вопросам, касающимся приложения, а также оставить отзыв и запрос дополнительного функционала. Чтобы обеспечить безпроблемное представление, избегайте использования ссылок на блоги или страницы, содержимое которых является преимущественно динамическим. Убедитесь, что все упомянутые веб-страницы доступны, когда приложение будет готово для продажи в магазинах приложений App Store и Google Play.
Способ сообщить пользователям, что именно вы о них знаете, как будете это использовать и хранить. При наличие регистрации в Вашем приложении, обязательно укажите ссылку на политику конфиденциальности. Если на Вашем сайте уже есть страница с текстом политики конфиденциальности, можно указать его.
Локализованное подробное описание возможностей и функциональности приложения. Объем описания не должен превышать 4000 символов. Описание должно быть простым текстом с разбиением по строкам при необходимости. HTML-форматирование не допускается и не распознается. Рекомендуется проверить описание на предмет орфографических и грамматических ошибок.
Что новогоПри добавлении новой версии предоставляются сведения об этой версии, дополняющие общее описание приложения в магазине.
Сообщение запроса прав на использование геолокацииПри использовании в приложении данных о местоположении, у пользователей будет запрашиваться разрешение на использование геолокации. Данная фраза это текст-объяснение, зачем вам нужно разрешение на использование геолокации.
Необходим для подключения push-уведомлений и публикации приложений.
ПарольПароль, который Вы использовали при регистрации Google Play. Вы можете изменить ваш основной пароль, на временный. После публикации приложения вы можете вернуть ваш основной пароль. В этом случае, у нас не будет доступа к вашей учетной записи, но, в случае обновления приложения, нам потребуется пароль от вашей учетной записи снова.
Версия( XX.XX.XX, X.X...)Номер добавляемой версии приложения. Отображается в Google Play для информирования клиентов. Нумерация должна следовать типичным правилам присвоения версий программному обеспечению (например, 1.0, 1.0.1, 1.1).
Название должно быть уникальным и понятным. Подчеркните особенности приложения, избегая стандартных формулировок. Название должно быть коротким: длинные названия могут обрезаться на некоторых устройствах. Максимальный размер 30 символов.
Указывается такое же Название приложения, как из вкладки Общие.
Название играет важную роль в поиске и обнаружении приложения пользователями. Простое и легко запоминающееся название способствует более успешному поиску, при этом оно должно отражать суть работы, быть понятным и уместным. Рекомендуется использовать как можно более короткие и актуальные фразы.
Используется для отображения названия приложения на устройствах, под иконкой.
Указывается такое же Краткое название, как из вкладки Общие.
Краткое и функциональное описание Вашего приложения. Выводится для смартфонов и планшетов.
Один из важных аспектов доступности приложения - это категория, в которой оно отображается в Google Play. Категории позволяют пользователям просматривать коллекции приложений. В Google Play можно выбрать только одну категорию. Постарайтесь приложить все усилия, чтобы выбрать категорию, которая наилучшим образом описывает основные функции Вашего приложения.
Более подробное описание (для магазина), которое должно донести пользователю, как работает приложение, о его основных функциях и преимуществах и зачем оно нужно.
В мобильной версии появляется, если после краткого описания нажать «ЧИТАТЬ ДАЛЬШЕ».
У каждой заявки на публикацию есть статусы отдельно по каждой платформе. На странице списка приложений можно видеть соответствующие колонки.
После создания заявки присваивается статус Ожидает обработки. Как только начнется работа с заявкой, статусы начинают меняться и обо все изменениях автор заявки получает уведомления на свою почту.
Пока ваш запрос на сборку приложения находится в очереди на обработку. Максимальное время ожидания – до 2 рабочих недель. На время ожидания может повлиять длинная очередь на сборку приложений или иные факторы. Чаще всего все происходит в течение 4-5 дней.
Ваша заявка обрабатывается. Если все данные в заявке заполнены корректно, предоставлены все аккаунты для магазинов приложений, не требуется дополнительных данных и сервер вашего приложения доступен, то заявка скоро будет переведена в статус Публикация.
Возможные причины приостановки проверки :
После исправления вам нужно перейти в список ваших приложений и из контекстного меню выбрать пункт Продолжить публикацию (#PLATFORM#). Тогда разработчик продолжит работу с вашей заявкой.
Заявка проверена и ваше приложение в процессе сборки и отправки в магазин приложений. От вас ничего не требуется. Сроки публикации в AppStore на платформе iOS определить нельзя, все зависит от проверяющих Apple. В Google Play нет предварительной модерации и приложение оказывается доступным в день публикации.
Конечный статус. Очередная версия вашего приложения опубликована в магазине приложений.
По каким-то определенным причинам публикация невозможна.
Все очень просто. Вам нужно перейти в список своих приложений и из контекстного меню запустить процесс публикации отдельно для каждой платформы.
Тоже самое нужно сделать, если процесс публикации был прерван проверяющим по каким-либо причинам.
Вы можете контактировать с проверяющими ваше приложение прямо на сайте, без необходимости переписки по e-mail.
На страницу обсуждения также можно перейти из контекстного меню в списке приложений.
После чего откроется диалог с проверяющим.
О каждом комментарии на e-mail автора заявки уходит уведомление.
В обновлении модуля Мобильная платформа версии 14.5.1 появился новый функционал под названием Конструктор мобильного приложения. Это большой шаг к упрощению процесса создания мобильных приложений на платформе «1C-Битрикс».
Какие задачи решает Конструктор мобильного приложения:
Рассмотрим подробнее каждый из пунктов.
В административной части сайта нужно перейти в раздел Конструктор мобильных приложений (Сервисы > Мобильное приложение > Конструктор мобильных приложений).
Далее создаем приложение, нажав кнопку Создать приложение, появляется форма создания.
В форме создания приложения вам предлагается указать следующее:
Если все данные введены корректно, кнопка Создать станет активной - нажмите на нее.
После создания приложения у вас в корне сайта появляется папка с файлами нужной структуры, создается шаблон сайта с подключенной мобильной платформой и назначается на эту папку. В дальнейшем всю разработку будем вести именно в созданной папке. В данном случае, это http://<мой_сайт>/mobile_app/.
Проверим работоспособность созданного макета на сервере. Для этого установим и запустим мобильное приложение для разработчиков BitrixMobile из Google Play или AppStore.
Введем адрес приложения в формате http://<домен>/<имя_папки> и нажмем подключиться. Если все хорошо, то увидим следующее:
Макет создан, можно приступить к настройке нативных элементов интерфейса.
Итак, после создания приложения открывается редактор, в котором мы увидим разбитые на группы параметры (справа) и легкое превью (слева). В верхней панели располагается селектор для переключения между приложениями и табы для переключения между конфигурациями. В панели можно добавить еще одно приложение или добавить конфигурацию к уже созданному приложению. По умолчанию к приложению создается Общая конфигурация, которая будет применяться как для Android, так и для iOS.
Параметры в редакторе разделяются по нескольким типам:
Некоторые из них включатся в себя соответствующими контролы:
Результат изменения некоторых параметров отображается в превью.
Пока есть три экрана:
В настройке параметров типа изображение есть возможность множественной загрузки и выбора уже ранее загруженных изображений. Каждое отдельное приложение имеет свой банк изображений, что позволяет применять эти изображения в нескольких конфигурациях в рамках одного приложения.
Некоторые изображения снабжены дополнительным параметром растягивания с режимами crop/stretch/repeat:
Изменение любого параметра сопровождается авсохранением и можно сразу увидеть сделанные изменения в мобильном приложении для разработчика.
В верхней панели можно добавлять и удалять конфигурации, а также добавить конфигурацию для Android и, подключаясь приложением для разработки, можно увидеть именно Android-конфигурацию, а не общую.
С момента выпуска этого конструктора рекомендуется формировать параметры приложения именно через него. Теперь не нужно разбираться в структуре параметров и искать в документации их названия - все будет в конструкторе. Конструктор создает в папке вашего приложения файл settings.php, на который мы будем ориентироваться при сборке.
В главе рассказывается, как сделать офлайн-режим работы приложений, созданных на мобильной платформе BitrixMobile.
Для создания макета офлайн-приложения нужно:
Данный раздел настроек конструктора предназначен для конфигурирования будущего приложения. Он содержит следующие параметры:
Добавление файлов осуществляется в формате ключ-значение
:
ключ
- имя, которое будет дано файлу в файловой структуре на стороне приложения;значение
- путь к файлу на сервере.Для активации левого слайдера нужно вызвать следующий код в теле страницы:
BXMSlider.setEnabled(BXMSlider.state.LEFT, true)
Для активации правого слайдера нужно вызвать следующий код в теле страницы:
BXMSlider.setEnabled(BXMSlider.state.RIGHT, true)
После создания первичной структуры приложения в папке приложения появится папка offline
. В ней содержатся файлы следующей структуры A:
/myapp/offline/index.html /myapp/offline/menu.html /myapp/offline/script.js /myapp/offline/style.css
Можно добавить свои файлы и новая структура будет выглядеть, например, вот так:
/myapp/offline/mydir/another_script.js /myapp/offline/mydir/another_style.css /myapp/offline/somedir/images/img.png /myapp/offline/index.html /myapp/offline/menu.html /myapp/offline/script.js /myapp/offline/style.css
Обозначим дополненную структура файлов буквой B.
another_script.js another_style.css img.png index.html menu.html script.js style.cssТ.е. все файлы будут располагаться на одном уровне. При обращении к ним нужно учитывать этот момент.
Основными ресурсами для мобильных браузеров, конечно же, являются html-страницы. Нужно помнить о правилах оформления html-страниц для мобильных браузеров.
В отличие от классического приложения на BitrixMobile, где управление масштабированием и размерами страницы осуществляется в PHP, в офлайн-приложении мета-тег viewport
не выставляется автоматически. Т.е. размеры контента, масштабирование страницы придется выставлять в каждом файле самостоятельно, включая мета-тег viewport
в <head> страницы. Например, вот так:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/> <meta name="format-detection" content="telephone=no"> <meta name="apple-mobile-web-app-capable" content="yes" /> <meta name="viewport" content="user-scalable=no, initial-scale=1.0, maximum-scale=1.0, width=320"> </head> ...
bxlocal://
. Опять же, на офлайн-страницах автоматически не подключается ядро мобильной платформы. Это нужно сделать самостоятельно.
Для начала нужно подключить базовый скрипт Cordova __deviceload__/cordova.js, используя схему bxlocal://
:
<head> <meta charset="UTF-8"> <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/> <meta name="format-detection" content="telephone=no"> <meta name="apple-mobile-web-app-capable" content="yes" /> <meta name="viewport" content="user-scalable=no, initial-scale=1.0, maximum-scale=1.0, width=290"> <!--Include mobile platform--> <script type="text/javascript" src="bxlocal://__deviceload__/cordova.js"></script> </head>
На офлайн-страницах не будут доступны javascript-библиотеки платформы «1C-Битрикс» в том виде, в котором они доступны на обычных страницах на удаленном сервере. Но будет доступен bundle из нескольких javascript-библиотек, которые нужно обязательно подключить для работы с основным API. Чтобы его использовать нужно подключить скрипт bitrix_mobile_core.js, используя схему bxlocal://
:
<head> <meta charset="UTF-8"> <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/> <meta name="format-detection" content="telephone=no"> <meta name="apple-mobile-web-app-capable" content="yes" /> <meta name="viewport" content="user-scalable=no, initial-scale=1.0, maximum-scale=1.0, width=290"> <!--Include mobile platform--> <script type="text/javascript" src="bxlocal://__deviceload__/cordova.js"></script> <script type="text/javascript" src="bxlocal://bitrix_mobile_core.js"></script> <!----> </head>
Теперь на странице можно использовать весь API платформы BitrixMobile, который описан ниже в данном курсе в разделе API.
В bitrix_mobile_core.js входят:
/bitrix/js/main/core/core.js
/bitrix/js/main/core/core_ajax.js
/bitrix/js/main/core/core_db.js
/bitrix/js/mobileapp/bitrix_mobile.js
и /bitrix/js/mobileapp/mobile_lib.js
Как уже было указано в уроке Итоговая файловая структура офлайн-ресурсов, все файлы офлайн ресурсов располагаются в приложении на одном уровне (в одной папке). Поэтому подключать js- и css-файлы можно просто, указав имя файла в атрибуте src/href
со схемой bxlocal://
:
<head> <meta charset="UTF-8"> <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/> <meta name="format-detection" content="telephone=no"> <meta name="apple-mobile-web-app-capable" content="yes" /> <meta name="viewport" content="user-scalable=no, initial-scale=1.0, maximum-scale=1.0, width=290"> <!--Include mobile platform--> <script type="text/javascript" src="bxlocal://__deviceload__/cordova.js"></script> <script type="text/javascript" src="bxlocal://bitrix_mobile_core.js"></script> <!----> <script type="text/javascript" src="bxlocal://script.js"></script> <link href="bxlocal://style.css" rel="stylesheet" type="text/css"> </head>
Обращение к изображениям в css-файлах и javascript-файлах также осуществляется по простому названию файла. Он будет браться относительно текущего расположения файла.
Здесь нет ограничений. Все так же, как и раньше. Но для работоспособности всего набора функций нужно на странице объявить версию API, которую вы будете использовать. Сейчас это 17 API. Также нужно определить версию платформы ios или android. Это можно сделать через определение user-agent браузера прямо javascript. В примере ниже мы просто установили platform="ios" и appVersion=17:
<head> <meta charset="UTF-8"> <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/> <meta name="format-detection" content="telephone=no"> <meta name="apple-mobile-web-app-capable" content="yes" /> <meta name="viewport" content="user-scalable=no, initial-scale=1.0, maximum-scale=1.0, width=290"> <!--Include mobile platform--> <script type="text/javascript">var appVersion = 17;var platform = "ios";</script> <script type="text/javascript" src="bxlocal://__deviceload__/cordova.js"></script> <script type="text/javascript" src="bxlocal://bitrix_mobile_core.js"></script> <!----> <script type="text/javascript" src="bxlocal://script.js"></script> <link href="bxlocal://style.css" rel="stylesheet" type="text/css"> </head>
Для обращения к офлайн-ресурсу используется схема bxlocal://
или через виртуальную директорию __bxoffline__
. Используя эту схему, вы сообщаете платформе, что хотите обратится к локальному контенту.
Еще одна из важных особенностей офлайн-приложения на BitrixMobile - свобода в использовании офлайн-ресурсов:
Например, через простую ссылку:
<a href="bxlocal://detail.html">Детальная страница</a> <a href="http://mysite.com/__bxoffline__/detail.html">Детальная страница</a>или через
BXMobileApp.PageManager
с передачей параметров:
<script> BXMobileApp.PageManager.loadPageBlank({ url: "bxlocal://detail.html", data:{key:"value"}, title: "Детальная страница" }); </script>
<script> BXMobileApp.PageManager.loadPageBlank({ url: "/mobile_app/detail.php", data:{key:"value"}, title: "Детальная страница" }); </script>
<img src="bxlocal://myimage.png">
Например, можно добавить файл data.json
c содержимым:
{ "key1":"value1", "key2":"value2", "key3":"value3" }
Данные из этого файла можно получить через ajax-запрос. В разных ситуациях это делается по-разному:
__bxoffline__
:
BX.ajax.get("/__bxoffline__/data.json",{},function(data){ console.log(data); });
BX.ajax.get("data.json",{},function(data){ console.log(data); });
Офлайн-ресурсы в приложении загружаются в контексте сервера, а не в контексте файловой структуры.
Например, если вы попытаетесь загрузить условную офлайн-страницу detail.html
:
<script> BXMobileApp.PageManager.loadPageBlank({ url: "bxlocal://detail.html", data:{key:"value"}, title: "Детальная страница" }); </script>то адресом этой страницы будет:
http://mysite.com/__bxoffline__/detail.html
Т.е. как-будто страница была загружена с удаленного сервера. Это дает возможность использовать сущности, привязанные к домену вашего сайта - cookies, хранилище в формате ключ-значение
localstorage и локальные базы данных indexedDB и SQLite.
Как уже было упомянуто в уроке Подключение ядра платформы BitrixMobile, в офлайн-режиме доступны javascript-библиотеки платформы «1С-Битрикс» и ядро мобильной платформы. Соответственно, для запросов можно использовать BX.ajax
, а для кэширования - BX.database
.
В офлайн-приложениях важно кэшировать данные, чтобы можно было отобразить контент пользователю в те моменты, когда данные либо загружаются с дальнего сервера, либо их загрузка в принципе невозможна (нет Интернета или недоступен сервер).
var db = new BX.dataBase({ name: "MyDatabase", displayName: "MyDatabase", capacity: 1024 * 1024 * 4, version: "1.2" });
Функции для типичных операций:
db.createTable(params)
- создание своей таблицы;db.dropTable(params)
- удаление таблицы;db.addRow(params)
- добавление записи в таблицу;db.getRows(params)
- получение данных из таблицы;db.updateRows(params)
- апдейт таблицы;db.deleteRows(params)
- удаление записей из таблицы.var queryData = { query: "SELECT * FROM MYTABLE WHERE ID=? AND CODE=?", values: [12, "some_code"] }; db.query( queryData, function (res) { //code }, function (e) { //code } );
var createTableParams = { tableName: "mytable", fields: [ {name: "id", unique: true}, "name", "data" ], success: function (res) { console.log("success"); }, fail: function (e) { console.log("some error"); console.log(e); } }; db.createTable(createTableParams);
db.addRow( { tableName: "mytable", insertFields: { id: 10, name: "newRecord", data: "sadasd" }, success: function (res) { console.log("success"); }, fail: function (e) { console.log("some error"); console.log(e); } });
db.updateRows({ tableName: "mytable", updateFields: { data: "Very important data!" }, filter: { id: 10 }, success: function (res) { alert("Success") }, fail: function (e) { alert("Error!"); } });
db.getRows({ tableName: "mytable", filter: { id: 10 }, success: function (res) { //res.items - массив записей console.log(res); if (res.items.length > 0) console.log("Success"); }, fail: function (e) { console.log(e); } });
После разработки своего приложения следует протестировать его работу в разных режимах: с Интернетом и без него.
Главное что нужно проверить:
В качестве примера можно использовать готовое демо-приложение News (Скачать, zip, 86,2 Кб).
В этом демо-приложении есть примеры работы с базой данных, запросами и с локальными ресурсами.
news
и с папкой denonews
. В форме создания отметьте галку Добавить шаблон и настройки офлайн приложения.demonews
из zip-архива в папку demonews
, которую создал конструктор в корне вашего сайта./demonews/offline/
. Реальные имена файлов должны совпадать с их именами в левой колонке:
Также можно посмотреть видео (длительность 30 мин.) с докладом «Новые возможности мобильной платформы для разработки своих приложений. Офлайновые приложения, пуш нотификации, события» с зимней партнерской конференции «1С-Битрикс» 2016 года.
Приложение для разработчиков BitrixMobile распространяется через официальные магазины приложений GooglePlay и AppStore. К сожалению, с приложениями из магазина нельзя использовать стандартные средства удаленной отладки компонента браузера, которые описаны здесь: Remote Debugging on Android with Chrome и Safari Web Inspector Guide.
Для отладки приложений, написанных на HTML5/JS, можно использовать Weinre - WEb INspector REmote. Этот инструмент представляет из себя усеченную версию Web Inspector (отладчика WebKit-based браузеров).
Для начала нужно установить на компьютер NodeJS.
Далее нужно проделать следующие шаги:
sudo npm install -g weinre
sudo
не нужно.
weinre --boundHost x.x.x.x --httpPort xxxxНапример:
weinre --boundHost 192.168.1.171 --httpPort 8081
Сервер weinre запущен. Теперь нужно инициализировать отладку на страницах приложения.
<head>
нужно вставить следующее: <script src="http://192.168.1.171:8081/target/target-script-min.js#anonymous"></script>
Взаимодействие с пользователем через уведомления - это одно из преимуществ мобильных приложений в целом. Уведомлениями можно привлечь клиента к своему сервису или магазину, сообщить о скидках, уведомить об изменении статуса заказа и многое другое. Кроме этого, можно легко определить, по каким уведомлениям переходит пользователь, понять, что ему интересно и персонализировать рассылки и контент.
Чтобы получить такой идентификатор для вашего приложения, его требуется указать в поле Идентификатор приложения для отправки (Конструктор мобильных приложений > Дополнительно):
При сборке приложения наши специалисты зарегистрируют этот идентификатор в сервисе BitrixCloudMessaging для платформ iOS и Android. После этого вы сможете отправлять уведомления пользователям вашего приложения.
Токен - это идентификатор устройства, который регистрируется в сервисах Apple и Google для отправки уведомлений.
Для того, чтобы пользователь получал уведомления на свой смартфон, нужно узнать токен его устройства.
Получить токен, а затем отправить методом GET или POST на php-скрипт можно через javascript-код, который нужно разместить на стартовой странице своего приложения:
app.exec("getToken", { callback:function(token) { var platform = (window.platform == "ios"? "APPLE": "GOOGLE"); var config = { url: "myurl.php" , method: "POST", data: { device_name: (typeof device.name == "undefined" ? device.model : device.name), uuid: device.uuid, device_token: token, app_id: “MyAPPid”, device_type: platform, sessid: BX.bitrix_sessid() } }; BX.ajax(config); } });
В примере выше мы получили токен устройства и отправили его на php-скрипт myurl.php. Теперь его нужно сохранить для дальнейшего использования:
<?php use Bitrix\Main\Web\Json; require_once($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php"); $result = Array("status" => "failed"); if (!\Bitrix\Main\Loader::includeModule("pull")) { $result["error"] = "Module 'pull' is not installed"; } else { /** * @var $DB CAllDatabase * @var $USER CALLUser */ $data = null; $userId = $USER->GetID(); if (!$userId) { $userId = 0; } if ($_REQUEST["device_token"]) { $res = array("status" => "failed", "error" => "some unknown error"); $data = array( "DEVICE_TOKEN" => $_REQUEST["device_token"], "DEVICE_ID" => $_REQUEST["uuid"], "DEVICE_TYPE" => $_REQUEST["device_type"], "APP_ID" => $_REQUEST["app_id"], "DATE_AUTH" => ConvertTimeStamp(getmicrotime(), "FULL"), "USER_ID" => $userId ); $dbres = CPullPush::GetList(Array(), Array("DEVICE_ID" => $data["DEVICE_ID"])); $arToken = $dbres->Fetch(); $status = "failed"; if ($arToken["ID"]) { CPullPush::Update($arToken["ID"], $data); $status = "updated"; } else { if ($res = CPullPush::Add($data)) { $status = "registered"; } } $result = array( "token_status" => $status ); } } $result["data"] = $data != null ? $data : array(); header("Content-Type: application/x-javascript"); echo Json::encode($result); die();
Токены устройств со временем могут меняться или истекать.
Например, при обновлении операционной системы на устройстве токен может поменяться. Поэтому рекомендуется периодически удалять неактивные токены и обновлять существующие. Иными словами, при каждом запуске приложения следует повторять операцию обновления.
Для каждого сервиса логика отправки уведомлений разная, поэтому механизм отправки нужно реализовать самостоятельно. Для отправки уведомлений используется класс CPushManager модуля Push&Pull.
Пример кода отправки:
if (CModule::IncludeModule("pull")) { $arMessages = array(); $message = Array( "USER_ID" => 2, //Идентификатор пользователя "TITLE" => "Title", //заголовок, только для Android "APP_ID" => "MyAppID", //Идентификатор приложения "MESSAGE" => “У нас сегодня акция! Не пропусти!”, "EXPIRY" => 0, //время жизни уведомления на сервере Apple и Google "PARAMS"=>array("PARAMS"=>array("tst"=>"1")), "BADGE" => 1 //счетчик на иконке приложения ); $arMessages[] = $message; $manager = new CPushManager(); $manager->SendMessage($arMessages); }
Важным является ключ PARAMS. Данные по этому ключу помогут обработать открытие уведомления пользователем.
USER_ID
этого пользователя. Выполнить отправку на какое то определенное устройство по его device_token нет возможности.После получения уведомления на свое устройство пользователь может проигнорировать его, а может перейти по нему в приложение, в этом случае вы можете обработать этот переход. Например, можно открыть пользователю нужную страницу или показать определенное сообщение, зафиксировать переход по уведомлению у себя на сервере и многое другое.
На стартовой странице нужно разместить javascript-код следующего вида:
var lastNotification = BXMobileApp.PushManager.getLastNotification();
В переменной lastNotification будет объект данных уведомления, по которому пользователь перешел в приложение. В объекте будет ключ params, который вы отправляли через метод CPushManager::SendMessage().
Протестировать свои наработки можно в приложении BitrixMobile для разработчиков. Для работы с уведомлениями нужно использовать идентификатор BitrixMobile.
Для работы push-уведомлений на платформе BitrixMobile нужно при публикации Android-приложения предоставить 3 ключа: Идентификатор приложения, Ключ сервера и Идентификатор отправителя.
Для этого необходимо:
Авторизоваться под аккаунтом разработчика и перейти в Google Firebase. и далее в консоль:
MyApp
, тогда название пакета Android будет com.example.myapp
.Полученные Идентификатор приложения, Ключ сервера и Идентификатор отправителя необходимо будет ввести при заявке на публикацию Android-приложения на платформе BitrixMobile.
Сервис push-уведомлений гарантирует отправку уведомлений в сервисы Google Gloud Messaging и Apple Push Notification Service, но не гарантирует 100% получение уведомления пользователем от этих сервисов.
Причины по которым Google Сloud Messaging и Apple Push Notification Service не доставляют уведомления:
Ниже представлен справочник по API платформы BitrixMobile.
Центральная часть содержит свой собственный стек навигации с одной и больше страницами, которые можно добавлять и удалять. К каждой странице в стеке навигации центральной зоны можно добавлять нативные элементы: кнопки, заголовки, панели и т.д.
Эти части слайдера используются как основные элементы навигации в приложении, они могут скрываться и «жить» на фоне приложения. Javascript все это время работает на этих страницах, поэтому рекомендуется использовать эти страницы как постоянное пространство, в котором можно размещать javascript-код для периодического обновления данных в приложении, long-polling соединений, а также web-страницу с меню, списками или любыми другими компонентами, которые помогают быстро перемещаться по приложению.
Функция изменяет состояние слайдера. Слайдер может быть в одном из 3-х состояний:
BXMobileApp.UI.Slider.setState(sliderState)
|
//Открытие левой части слайдера BXMobileApp.UI.Slider.setState(BXMobileApp.UI.Slider.state.LEFT); //Открытие правой части слайдера BXMobileApp.UI.Slider.setState(BXMobileApp.UI.Slider.state.RIGHT);
|
Функция блокировки/разблокировки состояний слайдера. По умолчанию левая и правая части слайдера заблокированы.
BXMobileApp.UI.Slider.setStateEnabled(state, enabled);
|
//Блокируем открытие правой части слайдера BXMobileApp.UI.Slider.setStateEnabled(BXMobileApp.UI.Slider.state.RIGHT, false); //Блокируем открытие левой части слайдера BXMobileApp.UI.Slider.setStateEnabled(BXMobileApp.UI.Slider.state.LEFT, false);
|
Функция для показа фото через нативный контрол. Изображение(-я) открывае(ю)тся в отдельном окне. Допускается два варианта использования: Одиночный и Множественный.
В зависимости от платформы в просмотрщике доступен разный набор функций.
iOS:BXMobileApp.UI.Photo.show(params);
|
BXMobileApp.UI.Photo.show({"photos":[ { "url":"http://mysite.com/sample.jpg", "description": "description text" } ]});
|
BXMobileApp.UI.Photo.show({"photos":[ { "url":"http://mysite.com/sample.jpg", "description": "description text" }, { "url":"/sample2.jpg", "description": "description text 2" } ... ]});
|
Функция для отображения или скачивания документов (.doc,.pdf,.txt,.txt и т.п.).
В зависимости от платформы доступен разный набор функций и реализовано разное поведение.
iOS:BXMobileApp.UI.Document.open(params);
|
BXMobileApp.UI.Document.open({"url":"/mysite.com/text.txt"});
|
type="date"
в теге <input>
. Однако, это не заработает на Android ниже версии 4.4 (за исключением устройств от Samsung), для этих случаев и создан аналогичный контрол в BitrixMobile.Функция для показа контрола выбора даты и времени.
BXMobileApp.UI.DatePicker.show();Для показа контрола выбора дат нужно предварительно задать параметры через:
BXMobileApp.UI.DatePicker.setParams(pickerParams);
|
//Отображение пикера времени, с заданным начальным временем: BXMobileApp.UI.DatePicker.setParams({ type: "time", start_date: "09:12", format: "h:mm", callback: function (d) { app.alert({title:"time", text:JSON.stringify(d)}); } } ); BXMobileApp.UI.DatePicker.show();Пример для отображения контрола выбора только даты:
//Отображение пикера даты, с заданной начальной датой: BXMobileApp.UI.DatePicker.setParams({ type: "date", start_date: "29.06.1998", format: "dd.MM.yyyy", callback: function (d) { app.alert({title:"date", text:JSON.stringify(d)}); } } ); BXMobileApp.UI.DatePicker.show();Пример пример отображения контрола для выбора даты и времени:
//Отображение пикера даты и времени, с заданной начальными данными. В iOS год не отображается для выбора, но передается, с выбранной датой и временем: BXMobileApp.UI.DatePicker.setParams({ type: "datetime", start_date: "29.06.1998, 09:12", format: "dd.MM.yyyy, h:mm", callback: function (d) { app.alert({title:"datetime", text:JSON.stringify(d)}); } } ); BXMobileApp.UI.DatePicker.show();Пример с ограничением выбора даты:
//Задаем минимально возможную для выбора дату. В данном примере задана: 09.01.2014. На платформе iOS, в случае выбора даты меньше, чем 09.01.2014, пикер отобразит минимально возможную, а именно 09.01.2014: BXMobileApp.UI.DatePicker.setParams({ type: "date", format: "dd.MM.yyyy", min_date: "09.01.2014", callback: function (d) { app.alert({title:"datetime", text:JSON.stringify(d)}); } }); BXMobileApp.UI.DatePicker.show();Пример:
//Задаем максимально возможную для выбора дату. В данном примере задана: 02.03.2015. На платформе iOS, в случае выбора даты больше, чем 02.03.2015, пикер отобразит максимально возможную, а именно 02.03.2015: BXMobileApp.UI.DatePicker.setParams({ type: "date", format: "dd.M.yyyy", max_date: "02.03.2015", callback: function (d) { app.alert({title:"datetime", text:JSON.stringify(d)}); } }); BXMobileApp.UI.DatePicker.show();Пример:
//Использование изначально заданной даты и времени, с ограничением выбора по установленной максимальной дате и времени (начально заданная дата и время, должны быть одинакового формата с максимально возможной для выбора датой и временем). В данном примере заданы дата и время - 01.03.2015, 09:12. На платформе iOS, в случае выбора даты и времени больше, чем 01.03.2015, 09:12, пикер отобразит максимально возможную, а именно 01.03.2015, 09:12: BXMobileApp.UI.DatePicker.setParams({ type: "datetime", start_date: "01.03.2015, 09:12", format: "dd.MM.yyyy, h:mm", max_date: "02.03.2015, 09:00", callback: function (d) { app.alert({title:"datetime", text:JSON.stringify(d)}); } }); BXMobileApp.UI.DatePicker.show();
|
Функция для скрытия контрола выбора даты и времени.
BXMobileApp.UI.DatePicker.hide();
<select>
.
Функция для вызова контрола выбора значений. Работает в двух режимах - Одиночном и Множественном.
BXMobileApp.UI.SelectPicker.show(pickerParams);
|
var items = ["Отлично!", "Хорошо!", "Очень плохо!"]; BXMobileApp.UI.SelectPicker.show({ callback: function (data) { app.alert({title:"Selected", text:JSON.stringify(data)}); }, values: items, });Пример с множественным выбором:
var items = ["Отлично!", "Хорошо!", "Очень плохо!"]; BXMobileApp.UI.SelectPicker.show({ multiselect:true, callback: function (data) { app.alert({title:"Selected", text:JSON.stringify(data)}); }, values: items, default_value: items [1], });
|
Функция открывает barcode-сканнер.
BXMobileApp.UI.BarCodeScanner.open(params);
|
BXMobileApp.UI.BarCodeScanner.open({ callback:function(data) { if (data.text) { app.alert({title:"Barcode", text:"Format: " + JSON.stringify(data.format) + "Barcode: " + JSON.stringify(data.text)}); } else { app.alert({ text: "MOB_SCAN_ERROR", button:"OK" }); } } });
|
Списки - нативные элементы, интерфейс которых приближен к интерфейсу списков платформы.
Элементы списка можно отображать с разделением по секциям или алфавиту. Данный элемент интерфейса позволяет увеличить производительность при отображении списочных данных за счет заложенных механизмов кэширования и lazyload'а для картинок, и функции фильтрации загруженного списка.
Функция возвращает объект нативного списка
var myTable = new BXMobileApp.UI.Table(params, table_id);
|
var table = new BXMobileApp.UI.Table({url: "/my_site/list.php"}, "table"); table.show();
Как источник списки используют данные в формате json. Данные должны отдаваться сервером по url, который был указан при создании списка.
var table = new BXMobileApp.UI.Table( {url: "<адрес источника данных>"},"table");
Схематичное представление:
{ "data":{ // data содержит категории данных "category_code": //ключ категории, значением этого ключа является массив элементов этого списка [ { NAME: "element1", URL: "url1", IMAGE: "1.png", SECTION_ID: "id1" }, { NAME: "element2", URL: "url2", IMAGE: "2.png", SECTION_ID: "id2" } .... ], "category_code2":[ // ключ другой категории ..... ] }, "sections":{ // sections содержит списки секций для каждой категории данных "category_code": //ключ категории, значением этого ключа является массив секций списка [ { NAME: "section_name1", ID: "id1" }, { NAME: "section_name2", ID: "id2" } .... ], "category_code2" [ .... ] }, "names"{ //содержит наименование категорий "category_code": "category_name", "category_code2": "category_name2", } }
<? $data = Array( "data"=>Array( //data содержит категории данных "company"=>Array( //category_code - ключ категории данных, значением этого ключа является массив элементов этого списка Array( "ID"=>1, //идентификатор записи "NAME"=>"ПроГрабли", //имя для отображения "TABLE_URL" => "/demo_api/list_nest.php", // адрес списка, на который будет осуществлен переход при выборе этого элемента списка "IMAGE"=>"http://prograbli.ru/bitrix/templates/new_posts/images/pg-logo.png", //картинка к записи "TAGS" => "Про бизнес в интернете без ошибок", //дополнительная информация к записи ), Array( "ID"=>2, "NAME"=>"Bitrix", "IMAGE"=>"/demo_api/img/bitrixico.png", //картинка к записи (локальная) "TAGS"=>"Отечественная CMS", "URL"=>"http://bitrix.ru" // адрес страницы, на которую будет осуществлен переход при выборе этого элемента списка ), Array( "ID"=>3, "NAME"=>"Digital Workplace", "IMAGE"=>"/demo_api/img/digitalwork.png", "TAGS" => "Социальный интранет: Эксперты", "URL"=>"http://www.digitalworkplace.ru" ) ), ), "names"=>Array("company"=>"Компании") //содержит наименование категорий ); echo json_encode($data); ?>
//Задаем параметры отображения списка var params = { url: "/my_site/list.php", table_settings: { searchField: true, showtitle: true, name: "Список", // } }; var simple_table = new BXMobileApp.UI.Table(params, "tableId"); simple_table.show();
|
Открытие списка с использованием единичной выборки, и отработкой события данной выборки. Обязательное указание флага multiple:false
.
//задаем параметры отображения списка var params = { url: "/my_site/list.php", table_settings: { markmode: true, multiple: false, callback: function (data) { app.alert({title:"Markmode", text:JSON.stringify(data)}); } } }; var markmode_table = new BXMobileApp.UI.Table(params, "tableId"); markmode_table.show();
|
Открытие списка с использованием с множественной выборки.
//задаем параметры отображения списка var params = { url: "/my_site/list.php", table_settings: { markmode: true, multiple: true, } }; var markmode_multiple_table = new BXMobileApp.UI.Table(params, "tableId"); markmode_multiple_table.show();
|
Открытие списка с использованием множественной выборки и заданными, выбранными элементами списка.
//задаем параметры отображения списка var params = { url: "/demo_api/list.php", table_settings: { markmode: true, multiple: true, selected:({company:[1,2]}), } }; var selected_markmode_table = new BXMobileApp.UI.Table(params, "tableId"); selected_markmode_table.show();
|
Задается текст внизу списка.
//задаем параметры отображения списка var params = { url: "/my_site/list.php", table_settings: { footer: "Table Footer" } }; var footer_table = new BXMobileApp.UI.Table(params, "tableId"); footer_table.show();
|
<? $data = Array( "data"=>Array( "company"=>Array( Array( "ID"=>1, "NAME"=>"Bitrix", "IMAGE"=>"/demo_api/img/bitrixico.png", "TAGS"=>"Отечественная CMS", "URL"=>"http://bitrix.ru", ), Array( "ID"=>2, "NAME"=>"Digital Workplace", "IMAGE"=>"/demo_api/img/digitalwork.png", "TAGS"=>"Социальный интранет: Эксперты", "URL"=>"http://www.digitalworkplace.ru" ), Array( "ID"=>4, "NAME"=>"1С-Битрикс: Демонстрационный магазин", "URL" => "https://www.1c-bitrix.ru/products/mobile/demo.php", "IMAGE"=>"https://www.1c-bitrix.ru/images/ecommerce/features/mobile/demo.png", "TAGS" => "Демонстрационное мобильное приложение", ), Array( "ID"=>5, "NAME"=>"1С-Битрикс: Администрирование", "IMAGE"=>"https://www.1c-bitrix.ru/images/ecommerce/features/mobile/unnamed.png", "TAGS"=>"Приложение для администраторов и менеджеров", "URL"=>"https://www.1c-bitrix.ru/products/mobile/adm.php" ), Array( "ID"=>6, "NAME"=>"1С-Битрикс: Разработка приложения", "IMAGE"=>"https://www.1c-bitrix.ru/images/ecommerce/features/mobile/dev.png", "TAGS" => "Приложение для разработки собственных мобильных приложений", "URL"=>"https://www.1c-bitrix.ru/products/mobile/#tab-develop-link" ), Array( "ID"=>7, "NAME"=>"Облачный сервис «Инспектор сайта»", "IMAGE"=>"https://www.1c-bitrix.ru/images/ecommerce/features/mobile/inspector1.png", "TAGS" => "Мониторинг доступности и работоспособности сайта", "URL"=>"https://www.1c-bitrix.ru/products/cms/new/#tab-monitor-link" ), Array( "ID"=>8, "NAME"=>"Мобильное приложение «Мой город»", "IMAGE"=>"https://www.1c-bitrix.ru/images/solutions/gov/mobile_map_ios.png", "TAGS" => "Приложение для решения «Сайт государственной организации»", "URL"=>"https://www.1c-bitrix.ru/solutions/gov/site.php#tab-mobile-link!mob" ), Array( "ID"=>9, "NAME"=>"Мобильное приложение для «Битрикс24»", "IMAGE"=>"http://www.bitrix24.ru/images/content/b24-ios7.png", "TAGS" => "Бесплатное приложение для iOS и Android", "URL"=>"http://www.bitrix24.ru/features/apps.php" ), Array( "ID"=>10, "NAME"=>"Управление сайтом", "IMAGE"=>"https://www.1c-bitrix.ru/images/box/bus_154_170.png", "TAGS" => "1С-Битрикс: Управление сайтом", "URL"=>"https://www.1c-bitrix.ru/products/cms/" ), Array( "ID"=>11, "NAME"=>"Корпоративный портал", "IMAGE"=>"https://www.1c-bitrix.ru/images/box/cp141.png", "TAGS" => "1С-Битрикс: Корпоративный портал", "URL"=>"https://www.1c-bitrix.ru/products/intranet/" ) ), ), "names"=>Array("company"=>"Компании") ); echo json_encode($data); ?>
Открытие списка с использованием вертикального алфавитного указателя. Массив объектов разделяется по группам, отсортированные по алфавиту от имени объекта. В качестве разделителя используются секции, имя секции задается первой буквой группы.
//Задаем параметры отображения списка var params = { url: "/my_site/list2.php", table_settings: { alphabet_index: true, } }; var alphabet_index_table = new BXMobileApp.UI.Table(params, "table"); alphabet_index_table.show();
|
<? $data = Array( "data"=>Array( "company"=>Array( Array( "ID"=>1, "NAME"=>"Bitrix", "IMAGE"=>"/demo_api/img/bitrixico.png", "TAGS"=>"Отечественная CMS", "URL"=>"http://bitrix.ru", "SECTION_ID"=>"site", ), Array( "ID"=>2, "NAME"=>"Digital Workplace", "SECTION_ID"=>"site", "IMAGE"=>"/demo_api/img/digitalwork.png", "TAGS"=>"Социальный интранет: Эксперты", "URL"=>"http://www.digitalworkplace.ru" ), Array( "ID"=>9, "NAME"=>"Мобильное приложение для «Битрикс24»", "SECTION_ID"=>"bitrix", "IMAGE"=>"http://www.bitrix24.ru/images/content/b24-ios7.png", "TAGS" => "Бесплатное приложение для iOS и Android", "URL"=>"http://www.bitrix24.ru/features/apps.php" ), Array( "ID"=>10, "NAME"=>"Управление сайтом", "SECTION_ID"=>"bitrix", "IMAGE"=>"https://www.1c-bitrix.ru/images/box/bus_154_170.png", "TAGS" => "1С-Битрикс: Управление сайтом", "URL"=>"https://www.1c-bitrix.ru/products/cms/" ), Array( "ID"=>11, "NAME"=>"Корпоративный портал", "SECTION_ID"=>"bitrix", "IMAGE"=>"https://www.1c-bitrix.ru/images/box/cp141.png", "TAGS" => "1С-Битрикс: Корпоративный портал", "URL"=>"https://www.1c-bitrix.ru/products/intranet/" ) ), ), "sections"=>Array( // sections содержит списки секций для каждой категории данных "company"=>Array( //ключ категории данных, значением этого ключа является массив секций списка данной категории Array( "NAME"=>"Bitrix", //наименование секции "ID"=>"bitrix" // строковый идентификатор секции для привязки к ней элементов списка ), Array( "NAME"=>"Сайты", "ID"=>"site" ) ) ), "names"=>Array("company"=>"company") ); echo json_encode($data); ?>
Открытие списка с использованием разделительных секций. Массив объектов, отсортированные по заданному идентификатору секции. В качестве имени секции используется наименование секции.
//Задаем параметры отображения списка var params = { url: "/my_site/list3.php", table_settings: { use_sections:true, } }; var section_table = new BXMobileApp.UI.Table(params, "table"); section_table.show();
|
Функция проверяет, видит ли пользователь текущую страницу\экран в данный момент.
BXMobileApp.UI.Page.isVisible(params);
|
BXMobileApp.UI.Page.isVisible( { 'callback' : function(data) { if (data && data.status == 'visible') { //пользователь видит текущую страницу\экран в данный момент } else { //пользователь не видит текущую страницу\экран в данный момент } } });
Функция перезагружает текущий экран.
BXMobileApp.UI.Page.reload();
//перегружаем текущий экран BXMobileApp.UI.Page.reload();
Функция закрывает текущий экран, возвращаясь к предыдущему (имитирует нажатие кнопки Назад).
BXMobileApp.UI.Page.close(params);
|
//закрываем текущий экран BXMobileApp.UI.Page.close();
Функция включает или выключает генерацию событий показа/скрытия клавиатуры (onKeyboardWillShow
, onKeyboardWillHide
, onKeyboardDidHide
, onKeyboardDidShow
).
BXMobileApp.UI.Page.captureKeyboardEvents(enable_status);
|
//Включаем слежение за клавиатурой BXMobileApp.UI.Page.captureKeyboardEvents(true); //Регистрирует обработчик события появления клавиатуры BX.addCustomEvent("onKeyboardDidShow", function(){ //клавиатура появилась, здесь можно что-то делать });
Стек навигации начинается со «стартовой» страницы, с которой нельзя вернуться назад. В стек можно добавлять неограниченное число новых страниц. С каждой добавленной страницы можно перейти назад (программно или через нажатие соответствующей кнопки в панели навигации) - будет осуществлен возврат к предыдущей странице.
В разных платформах стек навигации ведет себя по-разному в силу архитектурных особенностей.
Функция добавляет новый экран\страницу к текущей навигационной цепочке с переданным адресом, заголовком и параметрами.
BXMobileApp.PageManager.loadPageBlank(params);
|
//Открытие страницы с заголовком “Demo” BXMobileApp.PageManager.loadPageBlank({ url: "/demo_api/index_demo.php", title: "Demo", });
На открываемой странице нужно получать параметры так:
BXMobileApp.UI.Page.params.get({ callback: function(data) { //using data } });
|
Функция загружает страницу в качестве стартовой в навигационной цепочке. Перед этим очищается вся цепочка открытых экранов и очищается история переходов.
BXMobileApp.PageManager.loadPageStart(params);
|
BXMobileApp.PageManager.loadPageStart({ url: "/demo_api/index_demo_start.php", title: "Стартовая", page_id: "demo_page_start", });
|
Функция открывает страницу в модальном окне. Это означает, что создается еще один стек навигации поверх существующего. При закрытии этого окна осуществляется возврат к родительскому экрану.
BXMobileApp.PageManager.loadPageModal(params);
|
BXMobileApp.PageManager.loadPageModal({ url: "/demo_api/index_demo_start.php", title: "Модальная", });
|
Функция позволяет выставить список дополнительных доменов, которые могут быть открыты внутри приложения. Эта функция может быть использована для реализации авторизации в социальных сетях или оплаты заказов через внешние платежные системы. Функция должна вызываться при каждом запуске приложения, и для использования «белого списка» должна быть вызвана хотя бы один раз на любой странице.
<протокол>://<домен>
BXMobileApp.PageManager.setWhiteList(string);
|
// Доступ к example.com: BXMobileApp.PageManager.setWhiteList("http://example.com") // Доступ по ssl к example.com (https://): BXMobileApp.PageManager.setWhiteList("https://example.com") // Доступ для всех поддоменов example.com, * - можно указать как для всех протоколов, поддоменов, так и для всех ссылок домена: BXMobileApp.PageManager.setWhiteList("http://*.example.com/") // Доступ для любого протокола, любого поддомена: BXMobileApp.PageManager.setWhiteList("*://*.example.com") // Доступ только адреса внутри /path: BXMobileApp.PageManager.setWhiteList("*://*.example.com/path") // Несколько путей: BXMobileApp.PageManager.setWhiteList("*://*.example.ru/*;*://*.example.com/*")
Функция отображает текстовую панель.
BXMobileApp.UI.Page.TextPanel.show(params);
|
//Отобразится текстовая панель, с параметрами по умолчанию BXMobileApp.UI.Page.TextPanel.show();
|
Функция скрывает текстовое поле..
BXMobileApp.UI.Page.TextPanel.hide()
BXMobileApp.UI.Page.TextPanel.hide();
|
Функция задает параметры для текстовой панели ввода.
Синтаксис:BXMobileApp.UI.Page.TextPanel.setParams:(params);
//Задаем текст, внутри текстового поля, который пропадет после получения фокуса, и переименовываем название кнопки, заданной по умолчанию var params = { placeholder: "Какой-то текст...", button_name: "Отправить", }; BXMobileApp.UI.Page.TextPanel.setParams(params); //Показываем текстовую панель со своими параметрами BXMobileApp.UI.Page.TextPanel.show();Видео
|
//Использование параметра plusAction var params = { placeholder: "Text here...", button_name: "Send", plusAction: function() { app.alert({title:"plusAction", text:"Дополнительные действия"}); } }; BXMobileApp.UI.Page.TextPanel.setParams(params); //Показываем текстовую панель со своими параметрами BXMobileApp.UI.Page.TextPanel.show()Видео
|
Функция делает кнопку Отправить в виде изображения.
Синтаксис:BXMobileApp.UI.Page.TextPanel.setUseImageButton(use);
|
BXMobileApp.UI.Page.TextPanel.show(); //передаем true, чтобы показать кнопку "Отправить" в виде изображения. BXMobileApp.UI.Page.TextPanel.setUseImageButton(true);Видео
|
Функция устанавливает текст в текстовом поле.
Синтаксис:BXMobileApp.UI.Page.TextPanel.setText(text)
|
// отображаем нужный текст в текстовом поле; BXMobileApp.UI.Page.TextPanel.show(); BXMobileApp.UI.Page.TextPanel.setText('Мой текст!');Видео
|
Функция устанавливает фокус в текстовом поле.
Синтаксис:BXMobileApp.UI.Page.TextPanel.focus();
//Покажем текстовую панель с заданным текстом с курсором в конце нашего текста. Клавиатура будет автоматически показана BXMobileApp.UI.Page.TextPanel.show(); BXMobileApp.UI.Page.TextPanel.setText('Мой текст!'); BXMobileApp.UI.Page.TextPanel.focus();Видео
|
Функция для очистки текстового поля.
Синтаксис:BXMobileApp.UI.Page.TextPanel.clear();
BXMobileApp.UI.Page.TextPanel.clear();Видео
|
Кнопка Отправить в виде загрузчика.
Синтаксис:BXMobileApp.UI.Page.TextPanel.showLoading: function(shown){};
|
//Передаем true, чтобы показать кнопку "Отправить" в виде изображения, false - чтобы убрать. BXMobileApp.UI.Page.TextPanel.showLoading(true);Видео
|
Каждая страницы в стеке навигации имеет свой персональный вид навигационной панели (заголовок и кнопка). При переходе от страницы к странице данные в навигационной панели меняются автоматически.
Функция скрывает навигационную панель.
Синтаксис:BXMobileApp.UI.Page.TopBar.hide();
//Cкрываем навигационную панель BXMobileApp.UI.Page.TopBar.hide();Видео:
|
Функция отображает верхнюю панель.
Синтаксис:BXMobileApp.UI.Page.TopBar.show();
//Показываем скрытую навигационную панель. BXMobileApp.UI.Page.TopBar.show();Видео
|
Функция добавляет правую кнопку на навигационную панель.
BXMobileApp.UI.Page.TopBar.addRightButton: function(buttonObject){};
|
//Отображаем правую кнопку на навигационной панели, с кнопкой и текстом на ней, при нажатии на которую будет показано сообщение. var params = { callback:function(){ app.alert({title:"addRightButton", text:"Вы нажали правую кнопку!"}); }, name:"Right Text", type:"text" }; BXMobileApp.UI.Page.TopBar.addRightButton(params);
|
Цветовая настройка навигационной панели.
BXMobileApp.UI.Page.TopBar.setColors(params);
|
BXMobileApp.UI.Page.TopBar.setColors( { background:"#fb0000", titleText: "#ffffff", titleDetailText: "#ffffff" });
|
Функция обновляет правую кнопку на навигационной панели.
BXMobileApp.UI.Page.TopBar.updateButtons: function(buttonObject){};
|
//Обновляем правую кнопку на навигационной панели, при нажатии на которую будет показано сообщение. var params = { button1:{ callback:function(){ app.alert({title:"updateButtons", text:"Вы обновили правую кнопку!"}); }, type:"refresh" } }; BXMobileApp.UI.Page.TopBar.updateButtons(params);
Функция задает текст заголовка на верхней панели.
BXMobileApp.UI.Page.TopBar.title.setText(text)
|
//Задаем текст к заголовку BXMobileApp.UI.Page.TopBar.title.setText('Title Text Test Navigation');Видео
|
Функция задает дополнительный текст заголовка.
Синтаксис:BXMobileApp.UI.Page.TopBar.title.setDetailText(text);
|
//Задаем дополнительный текст к заголовку BXMobileApp.UI.Page.TopBar.title.setDetailText('Detail Text');Видео
|
Функция задает изображение к заголовку на верхней панели.
Синтаксис:BXMobileApp.UI.Page.TopBar.title.setImage(imageUrl);
|
//Задаем изображение к заголовку var url = '/my_site/img.png'; BXMobileApp.UI.Page.TopBar.title.setImage(url);Видео:
|
Функция для установки javascript-обработчика нажатия на заголовок в навигационной панели. Используется только после применения.
Синтаксис:BXMobileApp.UI.Page.TopBar.title.setCallback(callback);
|
//По нажатию на заголовок, выводим сообщение BXMobileApp.UI.Page.TopBar.title.setCallback(function() { app.alert({title:"setCallback", text:"Вы нажали на Заголовок!"}); });Видео:
|
Функция отображает заголовок в навигационной панели.
Синтаксис:BXMobileApp.UI.Page.TopBar.title.show(params);
//Задаем текст заголовка BXMobileApp.UI.Page.TopBar.title.setText('Title Text Test Navigation'); //Отображаем заголовок в навигационной панели. BXMobileApp.UI.Page.TopBar.title.show();Видео:
|
Функция для скрытия заголовка в навигационной панели.
Синтаксис:BXMobileApp.UI.Page.TopBar.title.hide: function(){};
//Скрываем заголовок на навигационной панели BXMobileApp.UI.Page.TopBar.title.hide();Видео
|
Функция отображает скользящую панель.
BXMobileApp.UI.Page.SlidingPanel.show(params);
|
//Создаем скользящую панель с тремя кнопками разных типов и обработчиками событий при нажатии на каждую кнопку. BXMobileApp.UI.Page.SlidingPanel.show({ hidden_sliding_panel: true, scroll_backlash: 20.0, buttons: { id_button1: { name: "Только текст", type: "right_text", callback: function () { app.alert({title:"SlidingPanel", text:"Только текст"}); } }, id_button2: { name: "Текст", type: "basket", callback: function () { app.alert({title:"SlidingPanel", text:"Иконка и текст"}); } }, id_button3: { name: "", type: "menu", callback: function () { app.alert({title:"SlidingPanel", text:"Только иконка"}); } } } });
|
Функция для скрытия панели.
Синтаксис:BXMobileApp.UI.Page.SlidingPanel.hide();
//Скрываем дополнительную кнопочную панель BXMobileApp.UI.Page.SlidingPanel.hide();Видео:
|
Функция для показа экран загрузки на странице.
Синтаксис:BXMobileApp.UI.Page.LoadingScreen.show();
//Отображаем экран загрузки на странице BXMobileApp.UI.Page.LoadingScreen.show();Видео:
|
Функция для скрытия экрана загрузки на странице.
Синтаксис:BXMobileApp.UI.Page.LoadingScreen.hide();
//Скрываем экран загрузки на странице BXMobileApp.UI.Page.LoadingScreen.hide();Видео:
|
Функция включает или отключает возможность автоматического показа / скрытия загрузочного экрана в текущей странице.
BXMobileApp.UI.Page.LoadingScreen.setEnabled(enabled);
|
//запрещаем автоматический показ загрузочного экрана BXMobileApp.UI.Page.LoadingScreen.setEnabled(false);
Функция разрешает/запрещает скроллинг на странице.
BXMobileApp.UI.Page.Scroll.setEnabled(enabled);
|
//запрещаем использование скроллинга на странице BXMobileApp.UI.Page.Scroll.setEnabled(false);
Функция для установки параметров контрола обновления.
BXMobileApp.UI.Page.Refresh.setParams(params);
|
//Задаем свои параметры для контрола обновлений, с сопроводительным текстом при обновлении, заданным максимальным временем отображения контрола и обработчика событий. var params = { timeout: "20", enabled: true, callback: function (){app.alert({title:"Pull to Refresh", text:"Pull to refresh!"})}, pullText: "Pull to refresh", releaseText: "Release to refresh", loadText: "Loading..." }; BXMobileApp.UI.Page.Refresh.setParams(params);
|
Функция активирует контрол обновление. Пользователь может потянуть страницу вниз и отработает js-функция обратного вызова (см. параметр callback). В функции обратного вызова можно совершать произвольные действия, по окончании которых анимацию обновления следует остановить (см. BXMobileApp.UI.Page.Refresh.stop).
BXMobileApp.UI.Page.Refresh.setEnabled(enabled);
|
//Деактивация контрола BXMobileApp.UI.Page.Refresh.setEnabled(false);
Функция стартует анимацию обновления, программно (без участия пользователя).
Синтаксис:BXMobileApp.UI.Page.Refresh.start();
//Старт анимации BXMobileApp.UI.Page.Refresh.start();Видео:
|
Функция останавливает анимацию обновления.
Синтаксис:BXMobileApp.UI.Page.Refresh.stop();
//Останавливаем анимацию BXMobileApp.UI.Page.Refresh.stop();Видео:
|
Функция создает набор кнопок, представляющих несколько возможных вариантов выполнения действий.
BXMobileApp.UI.ActionSheet(params, id);
|
//Создаем выпадающее меню, с двумя кнопками и обработчиками событий при нажатии на данные кнопки. В данном примере “test” является идентификатором данного выпадающего меню. var actionSheet = new BXMobileApp.UI.ActionSheet( { title:"Продукты Bitrix", buttons: [ { title:"Управление сайтом", callback:function() { app.alert({ title: "Управление сайтом", button: "OK", text: "Профессиональная система управления веб-проектами, универсальный программный продукт для создания, поддержки и успешного развития" }); } }, { title:"Корпоративный портал", callback:function() { app.alert({ title: "Корпоративный портал", button: "OK", text: "Система управления внутренним информационным ресурсом компании для коллективной работы над задачами, проектами и документами, для эффективных внутренних коммуникаций. " }); } }, { title:"Мобильное приложение", callback:function() { app.alert({ title: "Мобильное приложение", button: "OK", text: "Это технология, позволяющая быстро разрабатывать мобильные приложения под iOS и Android для сайтов, созданных на платформе «1С-Битрикс»." }); } } ] }, "test");
Функция для отображения созданного выпадающего меню.
Синтаксис:BXMobileApp.UI.ActionSheet.show();
//Создаем выпадающее меню с двумя кнопками и обработчиками событий при нажатии на данные кнопки. В данном примере “test” является идентификатором данного выпадающего меню. var actionSheet = new BXMobileApp.UI.ActionSheet( { title:"Продукты Bitrix", buttons: [ { title:"Управление сайтом", callback:function() { app.alert({ title: "Управление сайтом", button: "OK", text: "Профессиональная система управления веб-проектами, универсальный программный продукт для создания, поддержки и успешного развития" }); } }, { title:"Корпоративный портал", callback:function() { app.alert({ title: "Корпоративный портал", button: "OK", text: "Система управления внутренним информационным ресурсом компании для коллективной работы над задачами, проектами и документами, для эффективных внутренних коммуникаций. " }); } }, { title:"Мобильное приложение", callback:function() { app.alert({ title: "Мобильное приложение", button: "OK", text: "Это технология, позволяющая быстро разрабатывать мобильные приложения под iOS и Android для сайтов, созданных на платформе «1С-Битрикс»." }); } } ] }, "test"); //Отображаем созданное выпадающее меню. actionSheet.show();
|
Функция создает контекстное меню страницы.
BXMobileApp.UI.Menu(params, id);
|
//Создаем контекстное меню, состоящее из трех пунктов. В данном примере “test” является идентификатором данного контекстного меню. var menu = new BXMobileApp.UI.Menu( { items: [ { name:"Управление сайтом", image: "/demo_api/img/upravlenie-saitom.png", url:"http://www.1c-bitrix.ru/products/cms/", }, { name:"Корпоративный портал", action:function() { app.alert( { title: "Корпоративный портал", button: "OK", text: "Система управления внутренним информационным ресурсом компании для коллективной работы над задачами, проектами и документами, для эффективных внутренних коммуникаций. " }); }, icon: 'check' }, { name:"Мобильное приложение", url:"/my_site/index2.php", arrowFlag:"true" } ] }, "test");
Функция для отображения созданного контекстного меню.
Синтаксис:BXMobileApp.UI.Menu.show();
//Создаем контекстное меню, состоящее из трех пунктов. В данном примере “test” является идентификатором данного контекстного меню. var menu = new BXMobileApp.UI.Menu( { items: [ { name:"Управление сайтом", image: "/demo_api/img/upravlenie-saitom.png", url:"http://www.1c-bitrix.ru/products/cms/", }, { name:"Корпоративный портал", action:function() { app.alert( { title: "Корпоративный портал", button: "OK", text: "Система управления внутренним информационным ресурсом компании для коллективной работы над задачами, проектами и документами, для эффективных внутренних коммуникаций. " }); }, icon: 'check' }, { name:"Мобильное приложение", url:"/my_site/index2.php", arrowFlag:"true" } ] }, "test"); //Отобразим данное контекстное меню путем нажатия на заголовок в навигационной панели, используя методы навигационной панели. Задаем основной текст заголовка, используя BXMobileApp.UI.Page.TopBar.title.setText();. Используя обработчик события нажатия на заголовок BXMobileApp.UI.Page.TopBar.title.setCallback();, отобразим созданное контекстное меню. Используем BXMobileApp.UI.Page.TopBar.title.show();, чтобы отобразить активный заголовок на навигационной панели. BXMobileApp.UI.Page.TopBar.title.setText('Заголовок'); BXMobileApp.UI.Page.TopBar.title.setCallback(function() { menu.show();//отображаем созданное контекстное меню }); BXMobileApp.UI.Page.TopBar.title.show();
|
Функция для программного скрытия контекстного меню.
BXMobileApp.UI.Menu.hide();
//Скрываем контекстное меню. BXMobileApp.UI.Menu.hide();
Локальные уведомления используются для оповещения пользователя о каких-либо событиях, о протекании каких-либо процессов. Например, в интернет-магазине можно сообщать пользователю о смене статуса заказа, в чате можно показать новое сообщение от пользователя или оповестить о проблемах соединения с сервером.
BXMobileApp.UI.NotificationBar(params);
|
// Уведомление с лоудером var notifyBar = new BXMobileApp.UI.NotificationBar( { message: ‘Уведомление с лоудером’, useLoader: true, align:"center", color: "#76088c", autoHideTimeout:2000, hideOnTap:true, }); notifyBar.show(); //show - функция отображения панели уведомления. notifyBar.hide(); //hide - функция скрытия панели уведомления.
|
// Многострочное уведомление с картинкой new BXMobileApp.UI.NotificationBar( { message: ‘Демо нотификационной панели. Панель можно увеличить, уменьшить, добавить иконку, картинку, загрузчик, поменять цвет фона и текста. Также можно изменить прозрачность от 0 до 100%’, maxLines: 10, contentType: 'html', indicatorHeight:60, autoHideTimeout:10000, hideOnTap:true, textColor:"#ffffff", color:"#cc000000", imageURL: dataPath+"/img/addition-icon.png" }).show();
|
Счетчик на иконке приложения. Указывает на пропущенные уведомления в приложении.
Синтаксис:BXMobileApp.UI.Badge.setIconBadge(number);
|
//Передаем бейджу на иконке приложения значение, равное 2 BXMobileApp.UI.Badge.setIconBadge(2);Видео
|
Счетчик на кнопках в приложении. Указывает на пропущенные уведомления.
Синтаксис:BXMobileApp.UI.Badge.setButtonBadge(badgeCode, number);
|
//Назначаем кнопке с указанным badgeCode 'demobutton' бейдж со значением, равное 3 BXMobileApp.UI.Badge.setButtonBadge('demobutton', 3);Видео
|