Создадим несколько пакетов:
–
mobile_services_interface–
gps–
hmsТеперь определим основные функции. В нашем случае это Push-уведомления: инициализация, получение токена и обработка открытия уведомлений. Для этого создадим в пакете
mobile_services_interface абстрактный класс.
abstract interface class IPushService {
Future<void> init();
Future<String> getToken();
Future<void> onOpenPush();
}
Можно добавить свои функции или создать такие же классы для сервисов аналитики, Remote Config или др. Настроим зависимости для каждого пакета в pubspec.yaml.
🔵 Для Google Play Services:
mobile_services_interface:
path: ../mobile_services_interface
firebase_messaging: ^latest_version
🔵 Для Huawei Mobile Services:
mobile_services_interface:
path: ../mobile_services_interface
huawei_push: ^latest_version
Теперь напишем классы, расширяющие интерфейс. Помимо этого, можно вынести настройки сервисов в соответствующие пакеты.
Для сборок используем flavors, т.к. делать нам это нужно только для Android.
Перед публикацией заменяем пакет в pubspec.yaml и корректируем строку создания объекта в Dependency Injection. Затем выбираем необходимый flavor и собираем приложение с его конфигурацией.
А как вы решаете задачи с поддержкой разных платформ и сервисов в одном приложении? Расскажите о своем опытом в чате ⚙️