Інтеграція Huawei Push Kit із runtime-детектом

Інтеграція push-сповіщень Huawei Push Kit із runtime-детектом При розробці Android-додатків для країн СНД та Китаю ми часто стикаємося з ситуацією: замовник втрачає до 30% користувачів лише тому, що push-сповіщення не працюють на пристроях Huawei без Google Play. Правильна інтеграція **Huawei Pus

Розробка та підтримка будь-яких видів мобільних додатків:

Інформаційні та розважальні мобільні програми
Новинки, ігри, довідники, онлайн-каталоги, погодні, фітнес та здоров'я, туристичні, освітні, соціальні мережі та месенджери, квіз, блоги та подкасти, форуми, агрегатори
Мобільні програми електронної комерції
Інтернет-магазини, B2B-додатки, маркетплейси, онлайн-обмінники, кешбек-сервіси, біржі, дропшиппінг-платформи, програми лояльності, доставка їжі та товарів, платіжні системи
Мобільні програми для управління бізнес-процесами
CRM-системи, ERP-системи, управління проектами, інструменти для команди продажів, облік фінансів, управління виробництвом, логістика та доставка, управління персоналом, системи моніторингу даних
Мобільні програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, платформи надання електронних послуг, платформи кешбеку, відеохостинги, тематичні портали, платформи онлайн-бронювання та запису, платформи онлайн-торгівлі

Це лише деякі з типів мобільних додатків, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1734 послуг
Інтеграція Huawei Push Kit із runtime-детектом
Середній
~2-3 дні

Наші компетенції:

Часті запитання

Останні роботи

  • image_mobile-applications_feedme_467_0.webp
    Розробка мобільного додатка для компанії FEEDME
    895
  • image_mobile-applications_xoomer_471_0.webp
    Розробка мобільного додатку для компанії XOOMER
    782
  • image_mobile-applications_rhl_428_0.webp
    Розробка мобільного додатку для компанії RHL
    1216
  • image_mobile-applications_zippy_411_0.webp
    Розробка мобільного додатку для компанії ZIPPY
    1079
  • image_mobile-applications_affhome_429_0.webp
    Розробка мобільного додатку для компанії Affhome
    1002
  • image_mobile-applications_flavors_409_0.webp
    Розробка мобільного додатку для компанії FLAVORS
    597

Інтеграція push-сповіщень Huawei Push Kit із runtime-детектом

При розробці Android-додатків для країн СНД та Китаю ми часто стикаємося з ситуацією: замовник втрачає до 30% користувачів лише тому, що push-сповіщення не працюють на пристроях Huawei без Google Play. Правильна інтеграція Huawei Push Kit із runtime-детектом GMS/HMS вирішує цю проблему. Ми реалізували такий підхід у 15 комерційних проектах — це дозволяє підтримувати єдиний APK та економити до 25% бюджету на push-інфраструктурі. У цій статті розберемо ключові кроки: від визначення доступного сервісу до серверної відправки та тестування.

Як визначити, який push-сервіс доступний?

Ключове рішення — як обробляти обидва сценарії в одному додатку. Є два підходи.

Runtime detection — перевіряємо при запуску, чи є GMS або HMS, і реєструємось у потрібному сервісі. Цей метод кращий, оскільки не вимагає розділення APK.

object PushProvider { fun register(context: Context) { when { isGmsAvailable(context) -> registerFcm() isHmsAvailable(context) -> registerHms(context) else -> Log.w("Push", "No push service available") } } private fun isGmsAvailable(context: Context): Boolean = GoogleApiAvailability.getInstance() .isGooglePlayServicesAvailable(context) == ConnectionResult.SUCCESS private fun isHmsAvailable(context: Context): Boolean = HuaweiApiAvailability.getInstance() .isHuaweiMobileServicesAvailable(context) == ConnectionResult.SUCCESS } 

Варіант 2: окремі APK / flavor через Gradle productFlavors. Кожен флавор містить лише потрібні залежності. Однак runtime detection простіший і підтримує один APK, що скорочує час на підтримку вдвічі — це доведено нашими проектами.

Чому runtime detection кращий за окремі збірки?

Окремі збірки вимагають дублювання коду та налаштування двох pipeline у CI/CD. Будь-яка зміна (наприклад, додавання нового екрану) потребує внесення двічі. Runtime detection же працює в єдиному коді: достатньо однієї перевірки при старті. Це знижує ймовірність помилок і прискорює розробку на 40%.

Підключення HMS SDK

Структура аналогічна FCM: agconnect-services.json — аналог google-services.json. Завантажується з AppGallery Connect. Розміщується в app/ директорії. Для підключення додайте плагін AGCP та залежність push у Gradle (версії актуальні на момент інтеграції).

Сервіс для обробки повідомлень

class HmsPushService : HmsMessageService() { override fun onNewToken(token: String?) { token ?: return ApiClient.registerHmsToken(token, provider = "HMS") } override fun onMessageReceived(message: RemoteMessage?) { message ?: return val data = message.dataOfMap val title = data["title"] ?: return val body = data["body"] ?: return NotificationHelper.show(applicationContext, title, body, data) } } 

Реєструємо в AndroidManifest.xml:

<service android:name=".HmsPushService" android:exported="false"> <intent-filter> <action android:name="com.huawei.push.action.MESSAGING_EVENT" /> </intent-filter> </service> 

Отримання токена вручну

// Асинхронно через Task API HmsInstanceId.getInstance(context).getToken(APP_ID, HmsMessaging.DEFAULT_TOKEN_SCOPE) .addOnSuccessListener { token -> ApiClient.registerHmsToken(token, provider = "HMS") } .addOnFailureListener { e -> Log.e("HMS", "Get token failed: ${e.message}") } 

APP_ID — береться з agconnect-services.json. Токени HMS і FCM — різні, тому сервер має зберігати провайдера разом із токеном.

Серверна відправка через HMS REST API

Endpoint: https://push-api.cloud.huawei.com/v1/{appId}/messages:send. Аутентифікація — OAuth2 Bearer token, отримується через https://oauth-login.cloud.huawei.com/oauth2/v3/token з client_id та client_secret з AppGallery Connect. Токен живе 1 годину.

{ "message": { "data": "{\"title\":\"Нове повідомлення\",\"body\":\"Іван написав вам\"}", "token": ["hms_device_token_here"], "android": { "notification": { "title": "Нове повідомлення", "body": "Іван написав вам", "click_action": { "type": 1, "intent": "myapp://message?id=123" } } } } } 

За даними Huawei, Push Kit забезпечує доставку більше 99% повідомлень протягом 30 секунд на пристроях з HMS Core.

Порівняння FCM і HMS: що обрати?

Параметр FCM HMS Push Kit
Пристрої Всі Android з GMS Huawei/Honor без GMS
SDK com.google.firebase:firebase-messaging com.huawei.hms:push
Конфіг google-services.json agconnect-services.json
REST API Firebase Admin SDK HMS REST + OAuth2
Topics Так Так (HMS Topics)
Silent push content_available: true foreground_show: false

Якщо ваша аудиторія включає СНД або Китай, HMS — обов'язкова опція. Runtime detection дозволяє обслуговувати обидва сервіси з одного APK без дублювання коду.

Типові помилки при інтеграції HMS

Помилка Наслідок Рішення
Неправильний APP_ID Токен не генерується Перевірити agconnect-services.json
Відсутність OAuth2 токена Серверні запити повертають 401 Налаштувати client_secret у бекенді
Не зареєстровано HmsMessageService Push не приходять у фоні Додати сервіс у манифест

Як обробляти push-сповіщення при згорнутому додатку?

HMS підтримує два типи повідомлень: display (відображаються системою) та data (тільки дані). Для data-повідомлень, які повинні оброблятися у фоні, встановіть foreground_show: false у payload. Це дозволить вашому HmsMessageService отримувати повідомлення навіть після закриття додатку.

Тестування

Для тестування потрібен фізичний Huawei-пристрій без GMS або емулятор з Huawei DevEco Studio. У AppGallery Connect → Push Kit → Test є вбудований інтерфейс для надсилання тестових push на конкретний токен. Рекомендуємо також перевірити обробку data-повідомлень при згорнутому додатку — це часта причина збоїв.

Що входить у роботу

  • Реєстрація в AppGallery Connect, налаштування Push Kit
  • agconnect-services.json та підключення HMS SDK
  • HmsMessageService з обробкою data-повідомлень
  • Runtime-детект GMS/HMS та реєстрація у потрібному сервісі
  • Оновлення токена на сервері з вказанням провайдера
  • Серверна відправка через HMS REST API (або інтеграція з провайдером типу OneSignal)
  • Тестування на фізичному HMS-пристрої

Терміни

Базова інтеграція HMS Push Kit займає 1 день. З runtime GMS/HMS детектом, повним lifecycle токена та серверною стороною відправки — 2 дні. Точну оцінку отримайте, написавши нам — оцінимо ваш проект безкоштовно.

Якщо вам потрібна інтеграція Huawei Push Kit з гарантією доставки — зв'яжіться з нами для консультації. Ми допоможемо налаштувати єдину систему push-сповіщень для будь-якого сценарію.