Інтеграція Freshdesk SDK у мобільний додаток: чат, push, кастомізація
Додаток із тисячами користувачів — і email-підтримка тоне в хаосі. Чат всередині додатка став стандартом, але не кожен SDK витримує навантаження. Freshdesk SDK популярний, але на практиці ми стикалися з втраченими історіями після перевстановлення, конфліктами тем на Android та неочікуваною витратою пам'яті. За 5+ років ми інтегрували його в 50+ проєктів — від фінтеху до e-commerce. SDK покриває основні потреби: чат, FAQ, push-сповіщення, тикет-система. Однак документація часто відстає від релізів, і без бойового досвіду легко наступити на граблі. Розберемо ключові моменти, щоб інтеграція пройшла гладко.
Чому варто обрати Freshdesk SDK?
Freshdesk SDK — вибір, коли потрібна тикет-система з чатом, але хочеться уникнути enterprise-цінників Zendesk або Intercom. Freshdesk дешевший при порівнянному функціоналі та підходить для проєктів з бюджетом під контроль. SDK підтримує чат, FAQ, push-сповіщення та REST API. Інтеграція займає від 2 днів до тижня — залежно від необхідних кастомізацій. Наприклад, базова конфігурація з чатом та FAQ готова за 2–3 дні, а повна з Restore ID та мультимовністю — до тижня. У 90% випадків команді вдається вкластися в ці рамки.
Як ми підключаємо SDK
Для встановлення SDK виконайте наступні кроки:
-
Додайте залежність у проєкт.
-
Налаштуйте ініціалізацію в точці входу додатка.
-
Налаштуйте push-сповіщення (APNs/FCM).
- Кастомізуйте тему під бренд.
iOS
# Podfile
pod 'FreshchatSDK'
Freshchat SDK додає близько 8–12 MB до розміру бінарника. Для додатків, де вага критична, це важливо врахувати до початку інтеграції.
Android
// build.gradle.kts
implementation("com.freshchat.consumer.sdk:freshchat-android:5.x.x")
Для Android потрібен мінімальний minSdk = 21 — якщо в проєкті нижче, знадобиться зниження або умовне завантаження.
Ініціалізація (iOS)
import FreshchatSDK
let config = FreshchatConfig(
appID: "YOUR_APP_ID",
andAppKey: "YOUR_APP_KEY"
)
config.teamMemberInfoVisible = true
config.showNotificationBanner = true
Freshchat.sharedInstance().initWith(config)
На Android ініціалізація аналогічна: створюєте FreshchatConfig в Application.onCreate().
Як налаштувати push-сповіщення для Freshchat?
Push-сповіщення — ключовий канал для миттєвої відповіді. Freshchat використовує власний push-канал через APNs на iOS та FCM на Android. Вам знадобиться завантажити p8-ключ або p12-сертифікат у Freshdesk Admin → Mobile App. У додатку передайте APNs токен при реєстрації:
func application(_ application: UIApplication,
didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
Freshchat.sharedInstance().setPushRegistrationToken(deviceToken)
}
При отриманні сповіщення перевірте, чи належить воно Freshchat:
func application(_ application: UIApplication,
didReceiveRemoteNotification userInfo: [AnyHashable: Any]) {
if Freshchat.sharedInstance().isFreshchatNotification(userInfo) {
Freshchat.sharedInstance().handleRemoteNotification(userInfo, andAppState: application.applicationState)
}
}
Цей фрагмент коду — стандартна обробка. Не забудьте налаштувати App Groups для спільного використання push-даних між додатком та розширеннями.
Які типові помилки виникають при інтеграції?
Нижче — таблиця частих проблем та їх рішень:
| Проблема |
Рішення |
| Конфлікт тем на Android |
Наслідувати тему Freshchat від вашої базової через FreshchatTheme override в styles.xml |
| Втрата історії чату |
Реалізувати механізм Restore ID: зберегти ID на backend і відновлювати при перевстановленні |
| Локалізація рядків |
Перевизначити рядки SDK через Localizable.strings (iOS) або strings.xml (Android) з тими ж ключами |
| Несумісність з ProGuard |
Додати правила keep: -keep class com.freshchat.** { *; } |
Приклад конфігурації ProGuard
```proguard
-keep class com.freshchat.** { *; }
-keep class com.freshchat.consumer.** { *; }
-keepclassmembers class * {
@com.freshchat.consumer.sdk.annotation.Keep *;
}
```
Важливо: кастомні властивості передаються агенту — вони видимі в панелі Freshdesk при перегляді чату. Не передавайте чутливі дані (паролі, повні номери карт) навіть у замаскованому вигляді.
Відновлення історії чату: що потрібно знати?
Після видалення додатка історія чату втрачається, якщо не реалізувати механізм Restore ID. Freshchat генерує унікальний ID при першій ініціалізації — його потрібно зберегти на backend і відновити при наступній сесії, викликавши setRestoreId. Це критично для додатків, де важлива безперервність підтримки. Restore ID не залежить від токенів пристроїв і дозволяє відновити чат навіть на новому пристрої. Середній час на реалізацію — 2–3 години.
Що входить в інтеграцію
- Налаштування чату та FAQ з кастомними тегами
- Інтеграція push-сповіщень (APNs / FCM)
- Кастомізація теми під бренд додатка
- Реалізація Restore ID для збереження історії
- Документація з інтеграції та навчання команди
- Супровід при публікації в App Store та Google Play
Строки
| Етап |
Час |
| Базова інтеграція (чат + push) |
2–4 дні |
| Кастомізація теми |
+1–2 дні |
| Restore ID та мультимовність |
+2–3 дні |
| Повний цикл |
1 тиждень |
Вартість розраховується індивідуально. Зв'яжіться з нами для оцінки вашого проєкту — ми підготуємо пропозицію за 1 день. Отримайте консультацію з інтеграції Freshdesk SDK та замовте демонстрацію на вашому стенді.
Гарантуємо коректну роботу push-сповіщень та збереження історії чату. Наш досвід з більш ніж 50 проєктами дозволяє уникнути типових граблів.
Підтримка мобільних додатків: моніторинг, хотфікси та оновлення ОС
Після виходу нової major версії ОС кожен другий додаток отримує сплеск crash rate. Background App Refresh перестає працювати, foreground service policy блокує фонові задачі, а новий iPhone з іншим співвідношенням сторін ламає hardcoded layout. Якщо не реагувати протягом 24–48 годин, рейтинг у стор падає, користувачі йдуть до конкурентів. Ми маємо 10+ років досвіду супроводу мобільних додатків і знаємо, як утримати crash-free rate на рівні 99,9% навіть після великих оновлень ОС. Замовте безкоштовний аудит — оцінимо ваш проект за 24 години.
Регулярна підтримка знижує crash rate до 99.9% — це в 10 разів краще, ніж без неї
Без проактивного моніторингу команди витрачають тижні на пошук причини крэшу, а користувачі отримують нестабільну версію. Ми налаштовуємо алерти в реальному часі: Firebase Crashlytics, Sentry з breadcrumbs, а для Flutter — sentry_flutter з WidgetsFlutterBinding.ensureInitialized(). Головна метрика — crash-free users rate нижче 99,5% — тривожний сигнал, нижче 99% — інцидент. Наш SLA: критичний крэш (crash rate >1%) — хотфікс за 24–48 годин до публікації, 3–7 днів до проходження рев'ю Apple. Для Android доступне прискорене рев'ю через Google Play Console. Згідно з Wikipedia, crash-free rate вище 99,9% є стандартом для топових додатків.
Як налаштувати Crash Monitoring в продакшні?
Ми інтегруємо Crashlytics або Sentry, налаштовуємо алерти в Slack/Telegram із зазначенням affected users та velocity. Для React Native додаємо breadcrumbs — видно, які actions передували крэшу. Для Flutter — runZonedGuarded та sentry_flutter. Типовий сценарій: після релізу нової версії ОС з'являється крэш у UISheetPresentationController через зміну поведінки detents. Crashlytics показує 0,3% affected users, але velocity зростає. Оперативно верифікуємо на пристрої, знаходимо причину, випускаємо хотфікс. Моніторинг Crashlytics знижує час пошуку помилок у 5 разів порівняно з ручним логуванням.
Технічні деталі налаштування Sentry
Для максимальної деталізації breadcrumbs додаємо:
- iOS:
SentrySDK.startSession() + кастомні breadcrumbs через SentrySDK.addBreadcrumb
- Android:
SentryAndroid.init() з BeforeSendCallback для фільтрації чутливих даних
- Flutter:
FlutterError.onError + runZonedGuarded
Після налаштування система автоматично класифікує інциденти за рівнем критичності.
Хотфікси: що можна зробити без публікації в стор
App Store забороняє змінювати виконуваний код без рев'ю (App Store Review Guidelines 2.5.2). Але є легальні механізми оперативного втручання.
-
Remote Config (Firebase або власний) — зміна поведінки через прапорці без оновлення. Вимкнути проблемну фічу, показати maintenance banner, змінити URL endpoint — все це за годину, а не за тиждень.
-
OTA оновлення для React Native:
react-native-code-push або Expo Updates дозволяють оновити JS-бандл без App Store. Обмеження: тільки JS-код, нативні модулі потребують повного оновлення.
-
Expo EAS Update — сучасна альтернатива CodePush з підтримкою каналів (production/staging) та rollback.
Ми радимо комбінувати Remote Config для критичних перемикачів і OTA для швидких виправлень логіки. Це скорочує час реакції вдвічі порівняно з традиційним релізним циклом.
Що робити при виході нової версії ОС?
Apple анонсує iOS beta на WWDC, фінальний реліз — через три місяці. Ми починаємо тестування з першої бети — це дає запас 3–4 місяці. Критичні області перевірки при кожному major iOS update:
| Компонент |
Що змінюється |
Ризики |
| Privacy Manifest |
Обов'язковий для використання ряду API |
Reject при рев'ю |
UIScene lifecycle |
Зміни в управлінні сценою |
Завершення фонових задач |
UICollectionView/UITableView анімації |
Зміна дефолтних анімацій |
Візуальні баги |
| Swift Concurrency |
Поведінка TaskGroup, async let |
Гонки даних |
На Android target SDK зобов'язаний оновлюватися щорічно. Google Play вимагає targetSdk мінімум Android -1. Перехід з targetSdk 33 на 34 змінює behaviour для foreground services, broadcast receivers, implicit intents. Ми тестуємо на реальних пристроях із кожною бетою, щоб уникнути сюрпризів у день релізу.
Як підготувати додаток до нової версії ОС: покроковий план
- Завантажити бета-версію Xcode або Android Studio.
- Зібрати проект з новим SDK і виправити компіляційні помилки.
- Запустити на реальному пристрої та перевірити критичні flows (авторизація, платежі, push-сповіщення).
- Оновити залежності з відомими вразливостями через Dependabot.
- Виправити deprecated API, які будуть видалені в релізі.
- Зімітувати сплеск користувачів (load testing) для виявлення race conditions.
- Опублікувати оновлення за 2 тижні до релізу ОС.
Процес роботи
| Етап |
Що робимо |
Типові терміни |
| Аудит поточного стану |
Аналізуємо crash logs, dependency граф, target SDK, версії бібліотек |
1–2 дні |
| Планування |
Складаємо backlog технічного боргу, пріоритезуємо хотфікси, встановлюємо SLA |
1 день |
| Реалізація |
Пишемо хотфікси, налаштовуємо Remote Config, оновлюємо залежності |
1–4 тижні |
| Тестування |
Перевіряємо на реальних пристроях, використовуємо Firebase Test Lab та XCTest/Espresso |
2–5 днів |
| Деплой |
Публікація в App Store та Google Play, моніторинг crash rate після релізу |
1–3 дні |
| Пост-релізний моніторинг |
Відстежуємо метрики, реагуємо на нові інциденти |
Безстроково |
Технічний борг та планування
Підтримка — це не тільки реакція на баги. Ми плануємо технічний борг: застарілі залежності з відомими вразливостями (npm audit / bundler-audit), deprecated API, які будуть видалені в наступному Xcode, бібліотеки без активної підтримки. Dependabot або Renovate автоматично створюють PR при виході нових версій. Мінімальну підтримувану версію ОС переглядаємо щорічно — підняття з iOS 15 на iOS 16 дозволяє видалити значний обсяг workaround-коду. Регулярне оновлення залежностей знижує витрати на підтримку в 2–3 рази порівняно з реактивним підходом.
Як уникнути типових помилок при супроводі?
- Ігнорувати crash rate нижче 1% — з часом він накопичується і падає рейтинг.
- Використовувати OTA для зміни нативного коду — порушення гайдлайнів Apple.
- Не перевіряти сумісність з новими версіями iOS до виходу фінального релізу — втрачаєте 3 місяці.
- Оновлювати залежності вручну без Dependabot — ризик забути про критичні вразливості.
Що входить в роботу (deliverables)
- Налаштування моніторингу (Crashlytics, Sentry або інший інструмент)
- SLA-реагування на інциденти (24/7 для critical, 48h для high)
- Документація відомих крэшів та workaround-ів
- Доступи до консолей розробника (App Store Connect, Google Play Console)
- Навчання команди роботі з Crashlytics та Remote Config
- Щомісячні звіти з метриками stability та recommendations
Строки орієнтовно: від 1 місяця (базова підтримка) до 6+ місяців (повний супровід з розвитком фіч). Вартість розраховується індивідуально — зв'яжіться з нами, і ми підготуємо комерційну пропозицію за 24 години.
Гарантія стабільності вашого додатку — це наш досвід 10+ років та сертифіковані спеціалісти з iOS та Android. Замовте безкоштовний аудит поточного стану вже сьогодні та отримайте план дій для підтримки на рівні top-grossing додатків.