Інтеграція Zendesk SDK для підтримки у мобільному додатку
Zendesk SDK дає користувачам доступ до live-чату й системи тикетів прямо з додатку. Але інтеграція займає більше дня не з складності SDK — а з тонкостей ініціалізації, конфліктів з іншими залежностями й настройки кастомного UI під дизайн-систему продукту.
Архітектура Zendesk SDK
Zendesk пропонує два незалежні SDK:
- Zendesk SDK (Support) — створення тикетів, перегляд історії обращень
- Zendesk Chat SDK — live-чат з агентом у реальному часі
- Zendesk Messaging (рекомендується для нових проектів) — об'єднує чат і тикети, працює через Sunshine Conversations
Для більшості нових інтеграцій рекомендуємо Messaging SDK — він замінює обидва попередніх й підтримує push-уведомлення про нові ответи агента.
Інтеграція на iOS (Swift)
// AppDelegate або @main App
import ZendeskSDKMessaging
import ZendeskSDK
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
Zendesk.initialize(
withAppId: "YOUR_APP_ID",
clientId: "YOUR_CLIENT_ID",
zendeskUrl: "https://yoursubdomain.zendesk.com"
)
Messaging.initialize(with: Zendesk.instance!)
return true
}
Відкриття чату:
let messagingViewController = Messaging.instance?.messagingViewController()
present(messagingViewController!, animated: true)
Проблема з ініціалізацією. Якщо Zendesk.initialize вызывається не в головному потоці — SDK падає з Thread Checker попередженням у Xcode й іноді крешу на cold start. Ініціалізація тільки на main thread.
Ідентифікація користувача
Для авторизованих користувачів передаємо JWT-токен замість анонімної сесії:
Zendesk.instance?.setIdentity(
.jwtWithToken(token: userJwtToken)
)
JWT-токен генерується на backend зі стандартними claims: sub (user ID), email, name. Без ідентифікації агент бачить анонімного користувача й не може зв'язати чат з історією аккаунта.
Інтеграція на Android (Kotlin)
// Application.onCreate()
Zendesk.initialize(this,
appId = "YOUR_APP_ID",
clientId = "YOUR_CLIENT_ID",
zendeskUrl = "https://yoursubdomain.zendesk.com"
)
Messaging.initialize(Zendesk.instance)
// Відкриття екрана підтримки
val intent = Messaging.instance!!.getMessagingActivity(context)
startActivity(intent)
Конфлікт з Proguard. Zendesk SDK вимагає специфічних keep-правил. Якщо їх немає — додаток крешиться при відкритті чату в release-збірці з ClassNotFoundException. Актуальні правила є в офіційній документації, але AGP іноді їх не застосовує автоматично через consumerProguardFiles.
# proguard-rules.pro
-keep class zendesk.** { *; }
-keep class com.zendesk.** { *; }
Push-уведомлення для нових ответів агента
Користувач закрив додаток — потрібно уведомити про новий ответ:
// iOS: реєструємо токен у Zendesk
func application(_ application: UIApplication,
didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
Zendesk.instance?.pushNotificationsProvider?.register(
deviceToken: deviceToken,
locale: Locale.current.languageCode ?? "en"
)
}
Zendesk сам відправляє push через свій сервіс — не потрібно настраивать окремий серверний механізм. Але APNS-сертифікат або p8-ключ потрібно додати в Zendesk Admin Console → Channels → Mobile SDK.
Кастомізація UI
Zendesk Messaging SDK пропонує обмежену кастомізацію через MessagingConfiguration. Якщо потрібен повністю кастомний UI — дивимось у сторону Sunshine Conversations REST API: отримуємо історію через API, рендеримо самі, відправляємо повідомлення через webhook.
Орієнтири по строкам
Базова інтеграція з чатом і push — 2–4 дні. Настройка JWT-ідентифікації, кастомного UI й тестування push на iOS й Android — до 1 тижня.







