Інтеграція Freshdesk SDK для підтримки у мобільному додатку
Freshdesk SDK (Freshchat) — вибір, коли потрібна тікет-система з чатом й при цьому хочеться уникнути enterprise-ціноків Zendesk або Intercom. SDK достатньо зрілий, але документація періодично відстає від актуальних версій, що створює нестандартні складності при інтеграції.
Встановлення
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: AppDelegate
import FreshchatSDK
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
let config = FreshchatConfig(
appID: "YOUR_APP_ID",
andAppKey: "YOUR_APP_KEY"
)
config.teamMemberInfoVisible = true
config.showNotificationBanner = true
Freshchat.sharedInstance().initWith(config)
return true
}
// Android: Application.onCreate()
val config = FreshchatConfig("YOUR_APP_ID", "YOUR_APP_KEY")
config.isTeamMemberInfoVisible = true
Freshchat.init(this, config)
Ідентифікація й користувацькі властивості
// iOS: встановлення даних користувача
let user = FreshchatUser.sharedInstance()
user.firstName = "John"
user.lastName = "Doe"
user.email = "[email protected]"
user.externalID = "user_id_12345"
Freshchat.sharedInstance().setUser(user)
// Кастомні властивості для агента
Freshchat.sharedInstance().setUserPropertyforKey("subscription_plan", withValue: "premium")
Важливо: кастомні властивості передаються агенту — вони видні в панелі Freshdesk при перегляді чату. Не передавайте чутливі дані навіть замасковані.
Відкриття інтерфейсу
// Конкретний канал підтримки
Freshchat.sharedInstance().showConversations(self, with: nil)
// FAQ-раздел
Freshchat.sharedInstance().showFAQs(self, with: nil)
Freshchat дозволяє обмежити показувані FAQ по тегам — зручно, якщо FAQ написані на кількох мовах або для різних сегментів користувачів:
let options = FreshchatOptions()
options.tags = ["premium", "ios"]
Freshchat.sharedInstance().showFAQs(self, with: options)
Push-уведомлення
// iOS: передаємо APNs токен
func application(_ application: UIApplication,
didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
Freshchat.sharedInstance().setPushRegistrationToken(deviceToken)
}
// Обробка push
func application(_ application: UIApplication,
didReceiveRemoteNotification userInfo: [AnyHashable: Any]) {
if Freshchat.sharedInstance().isFreshchatNotification(userInfo) {
Freshchat.sharedInstance().handleRemoteNotification(userInfo, andAppState: application.applicationState)
}
}
Freshchat використовує власний push-канал через APNs. p8-ключ або p12-сертифікат завантажується в Freshdesk Admin → Mobile App.
Типові проблеми
Конфлікт тем на Android. Freshchat тягне свою тему FreshchatTheme й переопалює кольори ActionBar. Якщо в додатку кастомна тема — після відкриття Freshchat UI кольори тулбара скидаються. Вирішення: насліджувати тему Freshchat від вашої базової теми через FreshchatTheme override у styles.xml.
Localization. SDK з коробки підтримує кілька мов, але якщо потрібна кастомна локалізація строк інтерфейсу (наприклад, брендована кнопка «Написати нам» замість «Start a conversation») — необхідно переопалювати строки через Localizable.strings (iOS) або strings.xml (Android) з тими ж ключами, що використовує SDK.
Restore ID. Після видалення й переустановлення додатку історія чату пропадає, якщо не реалізувати механізм Restore ID. Freshchat генерує ID при першій ініціалізації — його потрібно зберегти на backend й відновити при наступній сесії.
Орієнтири по строкам
Базова інтеграція з чатом і push — 2–4 дні. Повна інтеграція з Restore ID, кастомною темою, FAQ по тегам і мультиязычністю — до 1 тижня.







