Skip to content
View in the app

A better way to browse. Learn more.

FGX Native

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Yaroslav Brovin

Administrators
  • Joined

  • Last visited

Blog Entries posted by Yaroslav Brovin

  1. В ближайшем релизе FGX Native 1.1.4.0 появится расширение возможностей TfgCollectionView. Речь идет о перетаскивании элементов списка для ручного упорядочивания элементов.
    video_2020-03-27_04-16-58.mp4.01ba77268ea2bcd5c7b56ad7cf398dcc.mp4
    Для того, чтобы воспользоваться новым функционалом нужно:
    1. Определить, за какой компонент элемента можно будет выполнять перетаскивание элемента.
    Например, можно использовать TfgImage с общепринятой иконкой перетаскивания элементов.
    2. Указать для такого компонента стиля имя через LookupName.

    3. Указать в настройках TfgCollectionView имя компонента из пункта (3).

    4. После перетаскивания элементов в списке, отразить изменение последовательности элементов в вашей модели данных в событии OnMovingItem. 
  2. Добрый вечер,
    Если вас интересует, сколько пользователей используют ваше приложение, как часто, как именно и т.д., то вы можете использовать аналитику приложения от Firebase Google Analytics. Эта возможность была добавлена в 1.18.5.0. 
    Начиная с версии 1.18.9.0, мы добавили поддержку сбора аналитик так же и от сервиса Yandex AppMetrica. Ранее мы выкладывали инструкции, как это можно сделать самостоятельно, отдельно настраивать приложение, отдельно использовать разное API для отправки метрик. Однако, мы полностью интегрировали эту поддержку и теперь ей так же легко воспользоваться, как и Firebase Google Analytics. Но, обо всем по порядку.
    Регистрация приложения в Yandex AppMetrica
    1. Регистрируемся на сервисе, если не сделали этого ранее: https://appmetrica.yandex.ru/
    1. Создаем новый проект в учетной записи AppMetrica и даем ему название:

    Затем далее. По окончании добавления сервис отобразит ваш API ключ, который нужно запомнить. Именно он будет использоваться для взаимодействия вашего приложения и сервиса Yandex AppMetriсa.

    Теперь переходим к настройкам вашего проекта, путем перехода в пункт меню Settings -> Main (Настройки -> Главные) в левой панели.
    Если нам необходимо связать наш проект с iOS приложением. Среди большого числа настроек нас интересует вкладка "Основное" -> "Universal Link". Нам необходимо заполнить поля Bundle ID и App Prefix на основании данных вашего iOS приложения, зарегистрированного в портале Apple Developer.

    AppPrefix - это уникальный префикс, выданный Apple при участии в программе iOS разработчиков. Он же добавляется к названию пакета iOS приложения, тем самым формируя уникальное название приложения. Его можно найти в личном кабинете Apple на вкладке Membership:
    Bundle ID - это идентификатор пакета вашего FGX Native приложения. Если приложение уже зарегистрировано, то вы можете найти название пакета на сайте Apple в разделе Identifiers. 
    После того, как вы указали все данные, необходимо включить "Использовать Universal Link" - это специальная технология, которая призвана обезопасить передачу статистики с устройств пользователя на сервера Yandex.

    Чтобы закончить настройку, необходимо включить поддержку Universal Link на стороне профиля разработчика Apple. Для этого необходимо открыть настройки приложения в консоли Apple и включить поддержку "Associated Domains".

    Теперь ваш профиль приложения сконфигурирован для приема статистики с вашего приложения. Переходим к подключению Yandex AppMetrica к FGX Native приложению. 
    Подключение и настройка Yandex AppMetrica в FGX Native приложении
    Чтобы подключить Yandex AppMetrica в приложении, достаточно настроить подключение в настройках проекта и бросить новый компонент TfgAppMetricaAnalytics на главную форму или дата модуль, который создается при старте приложения.
    1. Переходим в настройки приложения Project -> FGX Options... -> Services (Сервисы) -> Yandex AppMetrica 

    Для всех требуемых конфигураций Android 32-bits / Android 64-bits / iOS Device 64-bit включаем поддержку сервиса (Enabled - 1) и указываем API ключ (2).
    Опционально можно поменять значение длительности сессии. По умолчанию AppMetrica использует значение 10 секунд. Если в течении этого времени пользователь ничего не будет делать в приложении, то это будет означать, что при новом взаимодействии пользователя с приложением, это будет считаться как новая сессия взаимодействия пользователя. 
    2. Бросаем на главную форму или дата модуль, который создается при запуске приложения, новый компонент TfgAppMetricaAnalytics. Через него же можно будет отправлять пользовательские события.

    После чего все готово и можно запускать приложение.
    Как посмотреть статистику
    Чтобы посмотреть аналитику, нужно перейти в личный кабинет Yandex AppMetrica: https://appmetrica.yandex.ru/overview и уже на главной странице можно будет увидеть информацию о количестве установок вашего приложения, аудитории, падениях приложения и т.д.
    Важно: первые отчеты в AppMetrica появляются с небольшой задержкой, а не в режиме реального времени. Если приложение запустилось без видимых ошибок, то подождите пару минут появления метрик на портале https://appmetrica.yandex.ru/application

    В разделе Technologies/Технологии будут доступны интересные технические отчеты о версиях SDK, приложениях, размерах экранов, типах устройств и многое другое.

    Отслеживание экранов приложения и отправка пользовательских метрик
    В интеграции сервиса у нас встроены две дополнительные возможности:
    1. Это отслеживания открытых форм/экранов вашего приложения.
    Если вы хотите узнать, с какими экранами чаще всего взаимодействуют ваши пользователи, вы можете воспользоваться методом компонента SetCurrentScreen. Данный метод отправляет на сервер информацию о названии формы/экрана и ее классе.
    Типичный пример отслеживания открытия формы, может выглядеть так:
    procedure TFormMain.fgFormShow(Sender: TObject); begin fgAppMetricaAnalytics1.SetCurrentScreen(Name, ClassName); end; После запуска приложения, в личном кабинете AppMetrica на вкладке Reports / Отчеты -> Events / События можно наблюдать названия открытых экранов:

    2. Для отправки своего события на сервер, можно воспользоваться методом LogEvent. Доступно две версии этого метода: простой и с параметрами:
    /// <summary> /// Отправляет на сервер AppMetrica событие с именем <c>AName</c>, параметрами c именами <c>AKeys</c> и значениями /// <c>AValues</c>. /// </summary> procedure LogEvent(const AName: string; const AKeys: TArray<string>; const AValues: array of const); overload; /// <summary>Отправляет на сервер AppMetrica событие с именем <c>AName</c>.</summary> procedure LogEvent(const AName: string); overload;  Например, если мы хотим зафиксировать, что пользователь в приложении покупок нажимал на кнопку "положить товар в корзину", то отправка этого события может выглядеть так:
    LogEvent('Положили в корзину', ['product_id', 'product_name', price], [1423, 'Sony PlayStation 5', 60000]); Решение возможных проблем
    Приложение падает на старте
    Если приложение при запуске падает, то скорее всего, вы:
    либо не указали API ключ или же указали некорректный ключ либо не включили сервис в настройках проекта Еще раз проверьте, что все пункты выше выполнены. Так же, при таком падении, можно узнать причину падения в логе устройства, что на iOS, что и на Android.
    Приложение падает на старте и вы используете компоненты FireDAC. (спасибо @Roman)
    Заключение
    Подключение данного сервиса выполняется довольно просто и быстро в FGX Native, но при этом открывает для вас большой набор полезной статистики, которую вы можете предложить, как вашим клиентам, так и использовать ее для совершенствования ваших личных приложений. 
  3. Hello dear Delphi developers,
    We are happy to share with you two new FGX Native courses in Italian, which Claudio Piffer @claudio.piffer designed and prepared for you. Claudio Piffer is strong Delphi Developer with wide knowledge of different technologies. He often speaks at various Delphi conferences and shares his knowledge with other developers. For us, he is known for two speeches at the DelphiDays conference in Italy (2020, 2022), on which he clearly showed and told the possibilities of FGX Native in the shortest possible time. Claudio has prepared two courses that can help you go into the world of mobile development with Delphi and FGX Native:
    Basic. Mobile developement with FGX Native. Advanced. Advanced concepts in FGX Native. You can find the course description, topics and lessons covered by clicking on the links above.
    Thank you,
    Yaroslav Brovin
  4. Добрый вечер, уважаемые Delphi разработчики.
    Не секрет, что в Java/Kotlin мире огромное количество готовых и бесплатных к использованию Android библиотек, чего нельзя сказать о Delphi. Более того, если речь идет про внешние устройства для устройств на базе Android, то производитель всегда поставляет SDK в виде Android библиотеки.  Будь то софт для работы с устройством по USB, промышленный сканер, медицинское оборудование или что-либо другое, все обычно имеет готовый SDK. Если же вы хотите воспользоваться облачными сервисами аналитики от Google или Yandex, то опять же самым удобным вариантом будет использование готового поставляемого SDK.
    К сожалению, надо отметить, что крайне редко производитель поставляет SDK для языка Delphi. Что в итоге делает процесс интеграции SDK на другом языке в Delphi не самой тривиальной задаче и требует специальных интеграции со стороны разработчиков. В этой статье мы рассмотрим о новых возможностях по интеграции библиотек для Android приложения на базе FGX Naitve.   
    С радостью хотим с вами поделиться новыми возможностями в FGX Native в области интеграции сторонних Android библиотек в ваше приложение. Долгое время Delphi не позволяла и до сих пор не позволяет с легкостью добавлять существующие Android-библиотеки. Это значит, что весь мир использования существующих Java библиотек под Android для Delphi был практически недоступен.  Почему это так, и в чем трудности, я затронул в статье в главе "Почему переход на AndroidX не был выполнен ранее?":
    И о чем я рассказал в статье (раздел "Поддержка сторонних Android-библиотек")
    Раньше вы могли добавлять только JAR библиотеки (стандартная возможность RAD Studio IDE). Чуть позже, мы добавили поддержку AAR библиотеки (FGX Native 1.15.0.0). А начиная с FGX Native 1.15.2.0 мы расширили эту поддержку и теперь вы можете просто указать название публичной библиотеки, без необходимости искать JAR/AAR и всех зависимостей.
    Андроид библиотека
    Андроид библиотека идентифицируется тремя параметрами:
    Группа - Уникальное название группы, в рамках которой могут находиться разные библиотеки. Обычно название группы отражает название компании и направление библиотек.
    Например: "com.yandex.android" Артефакт - короткое название библиотеки в рамках группы (1).
    Например: "mobmetricalib" Версия. Номер версии.
    Например: "5.2.0" Объединенные параметры, разделенные ":", квалифицируют библиотеку среди остальных: "com.yandex.android:mobmetricalib:5.2.0".
    Управление используемыми библиотеки в приложении FGX Native для Android осуществляется через наш менеджер, доступный через главное меню:  "Project -> FGX Android Libraries".

    Существует два способа интеграции Андроид-библиотеки.
    1. Старый. Долго, сложно и не поддерживает транзитивные зависимости. Добавление файла библиотеки и всех зависимостей вручную. 
    Для этого вам надо:
    Cкачать физический файл библиотеки в JAR или AAR формате. Определить все используемые транзитивные зависимости и скачать их файлы так же. После чего вручную добавить их через мастер "FGX Android Libraries". Например, чтобы этим способом добавить поддержку Yandex AppMetrika версии 5.2.0 нужно найти и добавить в сумме 11 файлов библиотек:

    2. Новый. Указание названия библиотеки для автоматического скачивания библиотеки и всех зависимостей и интеграция в FGX Native приложение. 
    Начиная с 1.15.2.0 достаточно указать полное название библиотеки и все остальное произойдет автоматически.
    Чтобы добавить новую зависимость, нужно нажать на кнопку "+" и выбрать "Зависимость-библиотека". После чего указать полное имя зависимости или воспользоваться быстрым поиском для поиска интересуемой зависимости.

    Таким способом достаточно указать только полное наименование библиотеки. Например, та же Yandex AppMetrika добавляется путем добавления зависимости на "com.yandex.android:mobmetricalib:5.2.0".
    Репозитории
    Все публичные Android библиотеки обычно хранятся в репозиториях. Репозиторий - это центральное хранилище, где можно найти библиотеку нужной версии, нужного автора (пакет), узнать используемые зависимости (библиотеки часто используют другие для своей работы). Среди наиболее известных публичных репозиториев:
    Maven Central - https://mvnrepository.com/ Google Maven - https://maven.google.com/web/index.html Помимо общеизвестных, любой желающий может развернуть свой репозиторий и хранить там свои наработки. В таком репозитории можно получить информацию о любой библиотеке. Например, Яндекс предлагает библиотеку "mobmetricalib" для работы с AppMetrika. Библиотека называется "com.yandex.android » mobmetricalib" и может быть найдена в одном из таких репозиториев:
     
    А так же здесь вы можете узнать, какие другие библиотеки использует данная библиотека:

    FGX Native подключает два публичных репозитория по умолчанию (Maven Central, Google Maven). Вы можете управлять списком репозиториев и добавлять свои, открыв список кнопкой "Репозитории", если это требуется:
     
    Как использовать добавленные библиотеки в коде?
    После того, как вы интегрировали стороннюю библиотеку, встает вопрос о том, как вызвать API, которое она поставляет. Для этого вам нужно получить заголовочные файлы. Это можно сделать при помощи нашей утилиты Java2Delphi, входящей в поставку FGX Native.
    Описание работы утилиты описано в этой статье:
    Всем спасибо за внимание
  5. Продолжаем освещать новинки обновления 1.15.0.0. И в этот раз речь пойдет про оптимизации старта приложения и новые возможности нашей утилиты Java2Delphi.
    Ускорение запуска FGX Native приложения на Android
    Одним из важных изменений в области работы Java-Delphi мосту - является ускорение запуска FGX Native приложения на Android. До 1.15.0.0 холодный старт пустого приложения мог занимать пару секунд. В 1.15.0.0 мы реализовали отложенную инициализацию Java оберток, в результате чего это позволило нам ускорить старт пустого приложения до ~2-х раз.
    Улучшения в Java2Delphi
    Поддержка AAR
    В новой версии Java2Delphi теперь можно использовать AAR библиотеки. Для этого их нужно указать в конфигурационном файле в ветке "aars".
    "aars": [ "$(FGX)\\Libs\\Android\\fgx.admob.aar" ], Deprecated/Introduced для полей
    Android API меняется от версии к версии. Какие-то типы объявляются устаревшими, какие-то удаленными, а какие-то новыми. Глядя на заголовочный файл тяжело понять, какой метод в какой версии Android доступен. Ранее мы вносили специальные пометки в заголовочные файлы для методов. В этом релизе мы  генерируем аналогичные пометки их и для полей. Так что, теперь можно открыв заголовочный файл, сразу понять в какой версии был добавлен тот или иной элемент, а когда он помечен, как устаревший.
    function isConvex: Boolean; deprecated 'Deprecated in 30'; function addWhitelistedRestrictedPermission(const AArg0: JString; const AArg1: JString; const AArg2: Integer): Boolean; // Introduced in 29'; { constants } property colorMode: Integer read _GetColorMode write _SetColorMode; // Introduced in 26'; Умная генерация параметров при зависимостях
    Одним из главных отличий Java от Delphi является разная реализация пространств имен и доступов к типам. В Delphi по умолчанию два модуля не могут использовать друг друга в интерфейсной части. Появляется так называется циклическая зависимость. В то же время в Java в рамках одного пакета все классы могут использовать друг друга. Получается, что заголовочные обертки для всех классов одного пакета в Java должны были быть объявлены в одном Delphi модуле. Это в свою очередь приводило к значительному росту заголовочного файла. Так как нельзя размещать взаимно используемые классы в разных модулях.
    В этом релизе мы так же улучшили это. Теперь вы можете раскидывать классы по разным модулям, даже если они взаимно используют друг друга. Чтобы избежать циклической зависимости, класс в одном из модулей заменяется на общий JObject. 
    Например:
    Мы выделяем все типы, связанные с анимацией в модуль Android.Api.Animations. Эти типы используют JView, который объявлен в  "Android.Api.ActivityAndView". Часть типов анимации используются в классе Android.Api.ActivityAndView.JView. Так геттер getAnimation должен вернуть объект JAnimation. Однако, данный тип, объявлен в Android.Api.Animations.
    JView = interface(JObject) // function getAnimation: JAnimation; // end; Получается циклическая зависимость. И раньше такой код не мог быть скомпилирован. Сейчас же такая зависимость заменяется генератором на такой код с указанием оригинального класса в фигурных скобках:
    JView = interface(JObject) // function getAnimation: JObject {JAnimation}; // end; Чтобы при использовании получить объект JAnimation, достаточно написать такой код:
    var Animation: JAnimation; Animation := TJAnimation.Wrap(View.getAnimation);
  6. Добрый день!
    Новый релиз 1.14.5.0 посвящен полноценной поддержке RAD Studio 11.2 и новой платформе iOS Simulator ARM 64-bit. Помимо этого, мы немного улучшили средства просмотра Андроид логов и компонент TfgButton.
    iOS Simulator ARM 64-bit
    В этой версии добавлена поддержка iOS Simulator ARM 64-bit. Теперь вы можете запускать ваши FGX Native приложения на симуляторе. Однако, помните, что данный симулятор работает только на процессорах Apple. Так же компоненты авторизации через Facebook Login не поддерживаются в данный момент на симуляторе.
    Улучшения Android Log Viewer
    В этой версии, мы почерпнули несколько интересных идей у Android Studio и реализовали продвинутую раскраску сообщений. Теперь сообщения одного одного процесса визуально выделяются одним и тем же цветом. Это улучшает визуальное разделение сообщений разных процессов.

    Внутренние отступы TfgButton
    Помимо поддержки 11.2 добавлена возможность менять стандартные внутренние отступы у кнопки TfgButton. Иногда требуется убрать отступы, чтобы расширить область отображения надписи и иконки. Теперь это можно сделать при помощи свойства TfgButton.Appearance.ContentPadding.

    RAD Studio 11.2 
    Новая версия RAD Studio 11.2 сломала обратную совместимость некоторых пакетов дизайнера с 11.0 и 11.1. В результате чего версия 1.14.4.0 не работает на 11.2, а 1.14.4.1 не работает на 11.1. В этом релизе мы поставляем две версии дизайнера: отдельно для 11.0-11.1 и 11.2. При установке необходимо выбрать интересующую вас версию.
    Спасибо за внимание, 
    Ваша команда FGX Native
  7. Доброго дня, уважаемые пользователи FGX Native.
    Наши клиенты делают интересные проекты на базе нашего продукта, однако, к сожалению, об этом знаю только я в результате получения обратной связи по FGX Native. Мне кажется, что всем было бы интересно узнать о таких приложениях, о применяемых возможностях FGX Native и об использованных технических решениях. Сегодня я начну с обзора приложения, которое первоначально задумывалось, как приложения для каршеринга. Однако, в ходе разработки, области применения гораздо расширились за счет универсальности разработанного решения. Но обо всем по порядку.
       
    Далее приведен текст автора @r3h0soft.
    Перед нами стояла задача реализовать программный комплекс мониторинга за ГЛОНАСС устройствами, который бы включал возможности:
    Отслеживание местоположения устройств Мониторинг телеметрии Формирование различных отчётов за выбранный период времени И т.д. В комплекс входило так же и мобильная разработка, при которой стоило преимущественно выбрать среду разработки с лаконичными и понятным кодом имеющим в комплекте кроссплатформенной реализации. Выбор остался за Delphi. Мобильное приложение должно было отвечать всем требованиям на текущий момент что касаемо UI, отзывчивый интерфейс, анимации, поддержкой API и т.д.  Но если с реализацией бэкенд всё было прозрачно, то неотъемлемой частью разработки UI было не всё гладко с использованием FireMonkey. Выбор пал на FGX Native, который предлагает все инструменты для простой и лёгкой разработки и решению поставленных задач.
    В FGX Native реализовано собственное уникальное решение реализации UI, за основу взята система позиционирования FlexBox. С его помощью можно на лету, только через свойства компонента, реализовать UI любой сложности, которое будет одинаково выглядеть при любом разрешении устройств без единой строчки кода. Этот подход значительно ускорил процесс разработки и позволил сосредоточится на построении логики приложения, не загромождая код, вычислениями позиционирования элементов интерфейса.
    Карты
    Данный проект сложно представить без отражения мониторинга в режиме реального времени. За основу мы взяли компонент карт TfgMap с возможностью отображать маркеры, полигоны, географические зоны, строить маршруты, используя линии с большим количеством объектов. Удивила скорость работы компонента и его плавность. Одной из приятных функций для нашего проекта оказалась стилизация карт. Это позволило нам настроить внешний вид карты, чтобы он не выбивался из общего дизайна интерфейса. Одной из задач при использовании карт было построение маршрута, реализовав парсер точек по заданному диапазону времени с необходимой информацией о состоянии объекта и его положении GPS, используя фильтр настойки для разграничения маршрута использовали состояния "простоя" объекта, и иные события при которых объект не выполнял движения. Так мы получили точный список точек перемещения и реализовали отображение через поли линии. Через свойства реализации в FGX Native, мы смогли стилизовать под свои нужды, зная определенные участки состояния объекта смогли через маркеры объектов вывести определенные состояния (к примеру, участки превышения скорости). Хорошим моментом послужило что точками можно взаимодействовать присвоив им ID, так можно получить дополнительную информацию в любом участке трекера просто выбрав точку на карте. Конечно, в будущем очень хотелось бы использовать некую сущность для маркера имеющую стиль, для наполнения его своими объектами как в TfgCollectionView и отображения определенных маркеров при определенных состояниях.
    Сами маркеры добавляются легко через менеджер объектов.
      
    Списки
    Не обошлось и без списков, следовало подгружать объекты в стилизованные карточки одного списка, не нагружая при этом систему, с плавность отрисовки и высокой скоростью. Для решения данной задачи взят TfgCollectionView. Этот компонент отвечает всем требованиям и прост как и все другие решения библиотеки в освоении.  Мы использовали списки, как для формирования меню навигации, так и для отображения маршрутов, истории поездок и т.д. Чтобы не нагружать приложение разными формами, мы использовали выдвигаемые панели сбоку TfgDrawerLayout и снизу TfgBottomSheetLayout. С помощью этих компонентов решена задача быстрого доступа к данным истории телеметрии при этом не нагружая интерфейс и проект дополнительными формами.
     
    Не обошлось и без списков, следовало подгружать объекты в стилизованные карточки одного списка, не нагружая при этом систему, с плавность отрисовки и высокой скоростью. Для решения данной задачи взят TfgCollectionView. В списках мы добавили нужные нам стили объектов списка, что позволило генерировать нужный по событию изменяя только имя стиля, это удобно. Единственное чего не хватило, так это свайпа по элементам списка (лево/право). В общем и целом, этот компонент отвечает всем требованиям и прост как и все другие решения библиотеки в освоении.  Мы использовали списки, как для формирования меню навигации, так и для отображения маршрутов, истории поездок и т.д.
    Чтобы не нагружать приложение формами, мы использовали выдвигаемые панели сбоку TfgDrawerLayout и снизу TfgBottomSheetLayout. С помощью этих компонентов решена задача быстрого доступа к данным истории телеметрии при этом не нагружая интерфейс и проект дополнительными формами.
      
     
    Анимация
    Чтобы оживить интерфейс и порадовать пользователя внешним видом было принято решение встроить готовые сценарии анимации. В одном из обновлений FGX Native появилась поддержка продвинутых анимаций Lottie. Мы нашли готовые примеры анимации и просто встроили их в пару кликов. Таким образом получился такой вот симпатичный экран:
    AddingDriver.mp4
    Так же имеется и конструктор анимации для самих компонентов, мы использовали анимацию тряски для неправильного ввода пароля и анимацию появления для уведомлений.
    Сканер штрих кодов
    В ходе работы с приложением, пользователю необходимо выполнить регистрацию ГЛОНАСС устройства. Можно было бы ограничится вводом в ручную серийного номера, указанного на устройстве. Однако, мы воспользовались готовым сканером штрих кодов TfgBarcodeScanner и камерой TfgCamera и сделали эту процедуру автоматической.

    Уведомления и монетизация
    Любое приложение каршеринга - это контроль за местоположением транспортного средства. И в нашем случае это не исключение. Нам нужно было уведомлять пользователя при определенных событиях телеметрии устройства (вход/выход из геозоны, состояния устройства, ДТП, включения зажигания). Для этого мы использовали локальные уведомления. А вот для системных уведомлений, таких как "обновление приложения" или "необходимости оплаты" легко реализованы с помощью Push уведомлений на базе FGX и Firebase.
    Кстати, среди поставляемых примеров, вы найдете много готовых решений и примеров возможностей библиотеки.
    Хотите иметь возможность монетизации в приложении будь то подписка или продажа, для этого есть готовые компоненты оплаты, как для Android так и iOS.
    Реализация авторизации
    Как и любое приложение, работающее с пользователя, нам необходимо было организовать процесс авторизации. Мы использовали Firebase, реализация выполнена с помощью FB4D библиотеки, в FGX имеется возможность легко реализовать авторизацию и с помощью Google Sign, Facebook, VK, AppleID, что не может не радовать. Основная база крутится на PostgreSQL, используя штатные компоненты FireDAC. Общение построено с использованием REST API, чьим ответственным выступил DelphiMVCFramework фреймворк. Как видно, FGX Native не конфликтует с различными сторонними решениями, что позволяет расширять возможности разработки приложений любой сложности и поставленных задач.
    Bluetooth
    Не обошлось и без штатных задач управления устройством с помощью Bluetooth , мы использовали стандартные средства Delphi RTL для синхронизации и управления модулем через Bluetooth.
    Итог
    Это лишь малая часть которой хотел поделиться, возможности FGX Native для нас очень обширны, мы реализовали разные сложные проекты с его помощью, о которых я расскажу напишу в следующих статьях. Среди таких:
    Мониторинг за сотрудниками (курьерами, работниками, водителям где устройством мониторинга выступает мобильное приложение на FGX с использованием сервисов фоновой локации и состоянием устройства, мониторинга задач и управления через Bitrix), личный кабинета клиента микрофинансовой компании, личный кабинет клиентов интернет провайдера, управление модулем автопилота для лодок fishboat по Bluetooth и многое другое. FGX Native - это лучшее решение для нас!
  8. Добрый вечер,
    Мы плотно работаем над новой версией библиотеки FGX Native, в которую войдут новые компоненты-контейнеры и многие другие улучшения. В этой статье мы хотели бы поделиться двумя новыми компонентами-контейнерами TfgVirtualPagerLayout и TfgPagerLayout, которые появятся в релизе 1.13.1.0. 
    TfgVirtualPagerLayout
    Это базовый компонент, который предназначен для динамической загрузки/выгрузки страниц по мере их необходимости. В отличии от привычных подходов с добавлением вложенных компонентов заранее в дизайнере, этот компонент запрашивает загрузку/выгрузку страницы через события OnLoadPage и OnUnloadPage по мере их необходимости. Это значит, что фактически вместо загрузки 10-20 страниц, он загружает только видимую и еще 1-2 смежных в зависимости от текущего состояния компонента и, как следствие, ускоряет загрузку приложения.
    На базе данного компонента можно легко сделать оптимизированный слайдер изображений. Например вот такой:
    PhotoSlider.mp4
    Компонент не хранит все страницы у себя и работает по cхожему c TfgCollectionView принципу, те запрашивает необходимую информацию у разработчика через набор событий. Перед использованием компонента, вам необходимо написать обработчики для 3-х событий:
    OnGetPageCount - вернуть общее количество страниц в компоненте. OnLoadPage - вернуть компонент страницы. Это может быть любой визуальный компонент. Вы можете создавать  страницу в этом событии динамически, а можете реализовать пул объектов, чтобы повторно использовать выгруженные ранее страницы. OnUnloadPage - можно выполнить уничтожение страницы или вернуть страницу в пул объектов для дальнейшего повторного использования. Типичным примером реализации данных событий может быть такой код, создающий страницы с текстом на базе TfgLabel:
    procedure TFormMain.fgVirtualPagerLayout1GetPageCount(Sender: TObject; var ACount: Integer); begin // Сообщаем компоненту о количестве страниц. ACount := 100; end; procedure TFormMain.fgVirtualPagerLayout1LoadPage(Sender: TObject; const AItemIndex: Integer; var APage: TfgControl); var LPage: TfgLabel; begin // Создаем страницу на базе TfgLabel, которая будет отображать номер страницы. LPage := TfgLabel.Create(nil); LPage.Font.Size := 30; LPage.Text := Format('Page %d', [AItemIndex]); APage := LPage; end; procedure TFormMain.fgVirtualPagerLayout1UnloadPage(Sender: TObject; const AItemIndex: Integer; const APage: TfgControl); begin // Удаляем страницу. APage.Free; end; В результате получим:
    Basic_Text_Pages.mp4
     
    Пул страниц
    В этом примере вы можете обратить внимание, что если страницы по структуре одинаковые, то смысла удалять страницу и создавать заново особо не имеет смысла. Поэтому для этого случая, можно написать простой пул объектов, который не будет удалять вкладку, как только она не нужна, а складывать ее в список для дальнейшего повторного использования. Для реализации пула страниц создадим два списка:
    Список используемых страниц в компоненте в текущий момент времени - FAcquiredPages. Список использованных страниц, которые уже не используются в текущий момент времени - FReleasedPages. Код по объявлению списков выглядит так:
    type TFormMain = class(TfgForm) private FAcquiredPages: TList<TfgLabel>; FReleasedPages: TObjsetList<TfgLabel>; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; end; var FormMain: TFormMain; implementation {$R *.xfm} uses System.SysUtils, FGX.Application, FGX.Dialogs, FGX.Log; { TFormMain } constructor TFormMain.Create(AOwner: TComponent); begin inherited; FAcquiredPages := TList<TfgLabel>.Create; FReleasedPages := TObjsetList<TfgLabel>.Create; end; destructor TFormMain.Destroy; begin FreeAndNil(FAcquiredPages); FreeAndNil(FReleasedPages); inherited; end; Теперь, когда компонент запрашивает страницу мы выполняем простые действия:
    Если страница есть в пуле, то мы ее извлекаем. Если свободной страницы в пуле нет, то создаем новую. Когда же страница выгружается компонентом, мы просто возвращаем ее в пул.
    procedure TFormMain.fgVirtualPagerLayout1GetPageCount(Sender: TObject; var ACount: Integer); begin ACount := 100; end; procedure TFormMain.fgVirtualPagerLayout1LoadPage(Sender: TObject; const AItemIndex: Integer; var APage: TfgControl); var Page: TfgLabel; begin if FReleasedPages.Count = 0 then begin // В пуле нету свободных страниц, создаем новую Page := TfgLabel.Create(nil); Page.Font.Size := 30; end else // В пуле есть свободная страница, берем ее Page := FReleasedPages.ExtractAt(0); // Переносим страницу в список используемых страниц. FAcquiredPages.Add(Page); // Задаем текст и возвращаем страницу Page.Text := Format('Page %d', [AItemIndex]); APage := Page; end; procedure TFormMain.fgVirtualPagerLayout1UnloadPage(Sender: TObject; const AItemIndex: Integer; const APage: TfgControl); begin TfgAssert.IsClass(APage, TfgLabel); // Возвращаем страницу в пул для повторного использования FAcquiredPages.Remove(APage as TfgLabel); FReleasedPages.Add(APage as TfgLabel); end; Теперь мы получили такое же приложение, как и без использования пула, но теперь страницы не пересоздаются по мере их пролистывания, а повторно используются. Тем самым мы ускоряем процедуру загрузки страниц. 
    Таким образом, этот компонент позволяет ускорить загрузку приложения за счет загрузки только необходимых страниц, а не всех сразу. На базе данного компонента можно легко реализовать слайдер изображение с большим количеством изображений и многое другое.
    Динамическое изменение страниц
    Поскольку компонент запрашивает страницы и их количество у разработчика, то при любом изменении количества страниц, удаление/добавление страниц необходимо уведомить об этом компонент при помощи следующих методов:
    Reload - Уведомляет компонент о том, что список страниц изменился и надо заново его построить. NotifyPageInserted - Уведомляет компонент, что в список вставлены новые страницы по указанным индексам. NotifyPageRemoved - Уведомляет компонент, что из списка нужно удалить страницы по указанным индексам. Состав страниц нельзя менять в процессе переключения вкладок!
    Дополнительные события
    Данный компонент предлагает широкий набор дополнительных событий, позволяющих полностью контролировать процесс смены вкладок:
    OnChanged - Вызывается только при интерактивной смене вкладки, как только компонент понимает на какую вкладку окончательно переключается пользователь.  OnBeginDragging - Вызывается, когда пользователь опустил палец на экран и начал двигать содержимое.  OnEndDragging - Вызывается, когда пользователь поднял палец с экрана и закончил двигать содержимое. OnBeginScrolingAnimation - Вызывается, когда началась анимация смены вкладки. OnEndScrolingAnimation - Вызывается, когда анимация смены вкладки закончилась. TfgPagerLayout 
    Этот компонент-контейнер построен на базе TfgVirtualPagerLayout и в отличии от TfgVirtualPagerLayout выравнивает все добавленные в него компоненты по страницам. Он не выгружает/загружает страницы и по сути является аналогом TfgPageControl. Вы добавляете в него любые компоненты и TfgPagerLayout сам осуществляет их выравнивание и переключение.
     
  9. Как вы знаете, библиотека FGX Native - это кроссплатформенная библиотека, разрабатываемая с учетом возможностей добавления новых платформ.
    На текущий момент доступна только платформа Андроид. Однако, работа над iOS уже идет полным ходом.
    Рад поделится с вами промежуточными результатами. Перед вами простое приложение с одной кнопкой и меткой:

    Полностью работает система выравнивания, реализована часть базовых сервисов платформы и сделаны первые наброски стандартных компонентов (кнопки, метки и контейнеры).
    video_2020-04-07_02-12-49.mp4.994174c5afa23d87170f03d57d1b01e0.mp4
  10. Поддержка HTML в TfgLabel

    В ближайшем релизе 1.1.4.0 появится возможность указывать форматированный текст, используя упрощенный HTML формат.
    Чтобы использовать форматированный текст необходимо:
    1. Указать в свойстве Text HTML разметку.
    Например: 
    <font color='red'>red</font> <b>and</b> <font color='blue'>blue</font> Внимание! Поддерживается только форматирование текста, такое как изменение цвета и стиля текста.
    2. Указать, что нужно воспринимать исходный текст, как HTML разметка (TextType = HTML).

    Внимание! В версии 1.1.4.0 TfgLabel не поддерживает отображение html в дизайнере IDE.

  11. Автогенерация classes.dex

    В обновлении 1.1.6.0 процесс сборки android приложения претерпел незаметное на первый взгляд, но очень важное для пользователей изменение, а именно,  добавлена автоматическая генерация файла classes.dex.
    classes.dex - обязательный для android приложения файл, содержащий все используемые в приложении Java библиотеки. Ранее конечное приложение собиралось с готовым classes.dex файлом поставляемым вместе с библиотекой FGX Native, что создавало для разработчиков некоторые проблемы при использовании сторонних jar библиотек. Процесс добавления был нетривиален и требовал глубокого погружения в документацию, процессы сборки и микширования classes.dex.
    Механизм автоматической генерации уже используется в FMX проектах, однако, по ряду причин и ограничений, накладываемых IDE, он не мог быть задействован для FGX Native.
    Мы пересмотрели пользовательский опыт и рады представить вам новый удобный диалог для управления jar библиотеками, используемыми в проекте.
    Вызвать диалог можно двумя способами:
    Через главное меню: Project -> FGX Android Libraries Через контекстное меню панели Projects. Target Platforms -> Android (32/64 bits) -> Libraries -> Setup Android Libraries.
    Всё, что необходимо для включения в ваше приложение сторонней jar библиотеки — это добавить её в разделе «Все модули» или «Пользовательские».
    Для возврата списка библиотек к первоначальноиу состоянию воспользуйтесь кнопки «По-умолчанию».
  12. DelphiDay и FGX Native

    и 
    Что связывает итальянскую конференцию DelphiDay по Delphi и FGX Native?
    Правильно! В ближайшие дни FGX Native будет представлена на одной из крупнейших Delphi конференций Европы в Италии, на родине Марко Канту. Это очень важный шаг в истории развития проекта, потому как библиотека постепенно выходит на международный уровень. Возможностью рассказать о себе широкому кругу иностранных разработчиков мы обязаны нашему клиенту из Италии @claudio.piffer, который сам проявил инициативу и подготовил интереснейшую презентацию о  FGX Native. В данной презентации  Клаудио расскажет о главных возможностях библиотеки и поделится своими впечатлениями об её использовании. 
    От всего сердца желаем Клаудио удачи и с нетерпением ждём его выступления.
    Ниже опубликована вся информация о конференции.
    P.S. Выступление будет на итальянском.
    Когда: 11 июня 12:30 (по московскому времени) Программа конференции: https://www.delphiday.it/ Язык: итальянский Заголовок: FGX Native: мобильная альтернатива FMX Спикер: @claudio.piffer  Анонс:

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.