Создание мобильного приложения на cordova, для любого сайта.

RSS
Создание мобильного приложения на cordova, для любого сайта.
 
Создание мобильного приложения на cordova, для любого сайта.

Если стоит задача разработки мобильного приложения для сайта, можете воспользоваться данной заметкой. Постарался сделать ее более менее подробной, но при этом не сильно нудной.
 
Если (скорее всего) в процессе импорта проекта в Android Studio получаете ошибку не совместимости с Gradle-7
Перейдите: в Файл -> Структура проекта
И выберите
Anrdoid Gradle Plugin Version = 3.1.4
Gradle Version = 6.0

Можете поиграться с версиями повыше, но с этими точно работает.


Полный текст возможной ошибки
Код
* Get more help at https://help.gradle.org

CONFIGURE FAILED in 34s

Deprecated Gradle features were used in this build, making it incompatible with Gradle 7.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/6.1.1/userguide/command_line_interface.html#sec:command_line_warnings
Код
Unable to find method 'org.gradle.api.file.ProjectLayout.directoryProperty(Lorg/gradle/api/provider/Provider;)Lorg/gradle/api/file/DirectoryProperty;'.
Possible causes for this unexpected error include:
Gradle's dependency cache may be corrupt (this sometimes occurs after a network connection timeout.)
Re-download dependencies and sync project (requires network)

The state of a Gradle build process (daemon) may be corrupt. Stopping all Gradle daemons may solve this problem.
Stop Gradle build processes (requires restart)

Your project may be using a third-party plugin which is not compatible with the other plugins in the project or the version of Gradle requested by the project.

In the case of corrupt Gradle processes, you can also try closing the IDE and then killing all Java processes.
 
Спасибо интересный материал, действительно ценник выставленный битриксами немного зашкаливает но как они объясняют это копейки по сравнению со стоимостью нативного приложения.
У меня возник только один вопрос, могу ли использовать для сборки приложения cordova или phone gap если для создания контента я использовал модуль МП битриксов, а так же их методы и классы BitrixMobile, не повлияет ли это на сборку?
 
Цитата
Julixs написал:
Спасибо интересный материал, действительно ценник выставленный битриксами немного зашкаливает но как они объясняют это копейки по сравнению со стоимостью нативного приложения.
У меня возник только один вопрос, могу ли использовать для сборки приложения cordova или phone gap если для создания контента я использовал модуль МП битриксов, а так же их методы и классы BitrixMobile, не повлияет ли это на сборку?
BitrixMobile скорее всего не заработает в таком приложении, но я как-то не пробовал и проверить сейчас негде.
Просто, попробуйте подключить его в Header.php и что-нибудь воспроизвести
 
Если, при сборке проекта на новой версии платформы ios (6.*.*) получаете ошибку сборки вида:
Код
** BUILD FAILED **

The following build commands failed:
        Check dependencies
(1 failure)
Error code 65 for command: xcodebuild with args: 
------ СОКРАЩЕНО -------
ERROR running one or more of the platforms: Error: /ПУТЬ_К_ПРОЕКТУ/platforms/ios/cordova/run: Command failed with exit code 2
xcodebuild: Command failed with exit code 65
Выполните терминале:
chmod +x /ПУТЬ_К_ПРОЕКТУ/platforms/ios/MeetingPoint/Scripts/copy-www-build-step.sh
 
Если используете плагины геолокации и камеры, для ios обязательно использовать описание- для чего используете эти данные.
Иначе приложение не пройдет проверку и будет отклонено.

В config.xml добавляем
Код
    <!-- Geolocation descript -->
    <edit-config target="NSLocationWhenInUseUsageDescription" file="*-Info.plist" mode="merge">
        <string>Необходимо для улучшения поиска товаров в Вашем регионе</string>
    </edit-config>
    <edit-config target="NSLocationAlwaysAndWhenInUseUsageDescription" file="*-Info.plist" mode="merge">
        <string>Необходимо для улучшения поиска товаров в Вашем регионе</string>
    </edit-config>
    <edit-config target="NSLocationAlwaysUsageDescription" file="*-Info.plist" mode="merge">
         <string>Необходимо для улучшения поиска товаров в Вашем регионе</string>
    </edit-config>

    <!-- Camera descript -->
    <edit-config target="NSCameraUsageDescription" file="*-Info.plist" mode="merge">
        <string>Необходимо для поиска товаров по штрихкоду</string>
    </edit-config>
 
Добрый день, Михаил.
Очень полезны Ваши статьи и видео по bitrix и cordova. Огромное спасибо за проделанный труд.
У меня вопрос, который не могу ни как решить. Может у Вас есть решение.
По умолчанию все ссылки на скачивание файлов (например PDF) не работают. Т.е. файлы не скачиваются.
Пробовал разные способы, но ни как не могу добиться казалось бы элементарного функционала.
Приходилось ли решать подобную задачу?
 
Цитата
Александр написал:
У меня вопрос, который не могу ни как решить. Может у Вас есть решение.
По умолчанию все ссылки на скачивание файлов (например PDF) не работают. Т.е. файлы не скачиваются.

Эсли правильно понял диллему, вам нужно использовать плагин
cordova-plugin-file
Вот тут документация
https://cordova.apache.org/docs/en/11.x/reference/cordova-plugin-file/index.html
 
Да, плагин такой есть. Его я пытался использовать, но безрезультатно.
Объясню более подробно, что я пытаюсь сделать.

Если пользователь заходит на сайт где есть ссылка на скачивание файла, то при клике на эту ссылку начинается скачивание в папку download.
Например тут - https://bazarow.ru/pricenew/    есть ссылка "скачать опросник DOC"

С cordova так не получается. Даже при попытке открыть через cordova-plugin-inappbrowser ни чего не происходит.
 
Большое спасибо за инструкции! Очень помогают.

А есть ли какой-то вариант сохранять авторизацию пользователя после закрытия приложения (как в браузере)? Сейчас пока приложение висит в фоне, все ок, но после его закрытия авторизация слетает.

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

PDF файлы, вместо открытия можно принудитьно скачивать, должно помочь
Код
<a href="путь к файлу" download>Файл</a>

Или открывать их во фрейме, поверх контента, с кнопкой закрытия.
Изменено: Михаил Базаров - 10.01.2023 10:56:41
 
Цитата
написал:
Авторизация работает так же как и на обычном сайте. Просто увеличьте время сессии пользователя до нужного значения.
Проверил еще раз, на андроиде авторизация сохраняется после полного перезапуска приложения, а на iOS после полного перезапуска приложения авторизация слетает и каждый раз нужно авторизовываться заново.

Тестировал на реальных устройствах.

Тут точно не во времени сессии дело, именно приложение не сохраняет сессию. Может подскажете куда здесь можно копать?
 
Цитата
Гость написал:
Тут точно не во времени сессии дело, именно приложение не сохраняет сессию. Может подскажете куда здесь можно копать?

"Сайт" открываете плагином inappbrowser или просто, стартовая страница сайта и есть приложение? Если редирект на нужную страницу плагином, то сессии должны сохраняться- проверил сейчас на iphone.
 
Михаил, может подскажете как вы побороли открытие внешних ссылок сайта на ios?

Перепробовал разные способы. Указывал им target="_system", делал скрипты типа этого:
Код
$(document).on('click', 'a', function (e) {
   var elem = $(this);
   var url = elem.attr('href');
   if (url.indexOf('https://') !== -1) {
      e.preventDefault();
      alert (1);
      window.open(url, '_system');
      return false;
   }
});
Ничего не получается, на iOS внешние сайты все-равно открываются внутри приложения. :(  
 
Ура, получилось, может кому понадобится:
Код
var iab = cordova.InAppBrowser;
iab.open(url, '_system');
Вот через такое открытие в предыдущем скрипте все работает!
 
И все-таки без вашей помощи не обойтись..  :)  
Когда отправляю приложение в AppStore, получаю ошибку на почту:
Код
TMS-90809: Deprecated API Usage - App updates that use UIWebView will no longer be accepted as of December 2020.
Instead, use WKWebView for improved security and reliability.
И тут проблема..
Как я понял, в последних версиях кордовы (платформы ios в ней) выпилен UIWebView и не нужно ставить плагин cordova-plugin-wkwebview-engine.
Сейчас версия платформы iOS 6.2.0 и даже если ставить cordova-plugin-wkwebview-engine, оно пишет что плагин работает только с версией ниже 6.0.0:
Код
Plugin doesn't support this project's cordova-ios version. 
cordova-ios: 6.2.0, failed version requirement: >=4.0.0 <6.0.0
Skipping 'cordova-plugin-wkwebview-engine' for ios

Пробовал пройтись поиском по проекту. Все упоминания UIWebView идут в плагине cordova-plugin-remote-injection. А новых версий плагина нет и я так понял именно он не адаптирован и из-за него ошибки?

Что делать? Как вы побеждаете это? :(  
 
Вот тут скачайте, замените этот модуль в своем проекте, просто перезаписав в папке plugins
Удалите обе платформы и снова добавте, перезапишется и в них

https://github.com/mibazarow/Cordova-Start-Project
 
С вашей помощью дошел-таки до последнего этапа и все обломали модераторы Эппл.

Отклонили приложение по пункту Guideline 4.2.2 - Design - Minimum Functionality
Цитата
Мы заметили, что основная функциональность вашего приложения заключается в маркетинге ваших услуг, при этом интерактивные возможности или функциональность, ориентированные на пользователя, ограничены или отсутствуют. Приложения, которые в основном являются маркетинговыми материалами или рекламой, не подходят для App Store.

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

Как я почитал, "Guideline 4.2.2 - Design - Minimum Functionality"одна из самых распространенных причин отклонения, особенно для сайтов-приложений. У меня просто сайт компании с каталогом продукции и услуг на шаблоне для корпоративного сайта от известной компании на маркетплейсе :) Понятное дело там есть заявки через формы и тд.

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

Типа, калькулятор замера стоимости того, что продает компания, с сохранением где-то в кабинете
Изменено: Михаил Базаров - 03.02.2023 11:46:08
 
Эхх, ладно, буду пробовать уже потом тогда с этим сайтом. У нас есть еще интернет-магазин, буду пробовать его добавить в эпстор, он важнее. С интернет-магазинами все проще будет при модерации? Я так понял вы добавляете в основном магазины как раз, как они проходят модерацию?
 
Кто-нибудь знает, можно ли на сайте, запущенном в кордове узнать что он работает сейчас в ней? Через javascritt-хапрос какой-нибудь?
 
Можно поставить плагин cordova-plugin-device
И воспользоваться
Код
document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady() {
    alert('Сработает только в приложении, на готовность устройства');
}
 
Здравствуйте, который день уже бьюсь над задачей, как получить разрешения на камеру? В консоли ошибка: cannot open camera "0" without camera permission. В манифесте и конфиге, вроде, все прописала, что в мануалах советуют, но, все бестолку! Подскажите, пожалуйста))
 
Попробуйте так:
Запрос на камеру
Код
navigator.permissions.query({name:'camera'})
  .then(permissionStatus => {
    if (permissionStatus.state === 'granted') {
      // Разрешение на использование камеры уже получено
      // Можно использовать камеру
    } else if (permissionStatus.state === 'prompt') {
      // Разрешение на использование камеры ещё не получено
      // Запросить разрешение
      navigator.mediaDevices.getUserMedia({ video: true })
        .then(() => {
          // Разрешение на использование камеры получено
          // Можно использовать камеру
        })
        .catch(error => {
          // Разрешение на использование камеры не получено
          console.error('Ошибка при запросе разрешения на камеру:', error);
        });
    } else {
      // Разрешение на использование камеры отклонено или недоступно
      console.error('Разрешение на камеру отклонено или недоступно');
    }
  })
  .catch(error => {
    console.error('Ошибка при запросе разрешения на камеру:', error);
  });

В config.xml
Код
<uses-permission android:name="android.permission.CAMERA" />
<feature name="Camera">
  <param name="android-package" value="org.apache.cordova.camera.CameraLauncher" />
</feature>
 
Здравствуйте. А для публикации в Play Market  не нужен сертификат цифровой подписи? Как это ведется в cordova?
 
При сборке в Android Studio его создаете, сохраняете куда-нибудь и подписываете aab перед выгрузкой в маркет.
Потом стараетесь не терять- восстанавливать очень тяжело.
Форма ответов
 
Текст сообщения*
Перетащите файлы
Ничего не найдено
Файл
Загрузить файлы
 
Поблагодарить и поддержать:
Или подписаться на boosty канал: Видео на Ютубе