Интеграция Intercom SDK для поддержки в мобильном приложении
Intercom отличается от Zendesk и Freshdesk тем, что изначально проектировался как product engagement платформа — с таргетированными in-app сообщениями, onboarding-турами и автоматическими чат-ботами (Fin AI). Когда нужно не просто реагировать на запросы, а проактивно сопровождать пользователя — Intercom обычно выигрывает.
Установка и инициализация
iOS
// Podfile
pod 'Intercom'
// AppDelegate
import Intercom
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
Intercom.setApiKey("ios_sdk-...", forAppId: "your_app_id")
return true
}
Intercom не поддерживает Swift Package Manager полностью для динамических фреймворков на iOS — только CocoaPods или Carthage. Это первое, что удивляет разработчиков, привыкших к SPM.
Android
// build.gradle.kts
implementation("io.intercom.android:intercom-sdk:15.x.x")
// Application.onCreate()
Intercom.initialize(this, "android_sdk-...", "your_app_id")
Идентификация пользователя
Intercom поддерживает два режима: анонимный (для неавторизованных) и идентифицированный с HMAC-верификацией.
// iOS: авторизованный пользователь
let attrs = ICMUserAttributes()
attrs.userId = "user_12345"
attrs.email = "[email protected]"
attrs.name = "John Doe"
// Кастомные атрибуты для сегментации
attrs.customAttributes = [
"plan": "premium",
"signup_date": Date()
]
Intercom.loginUser(with: attrs) { result in
switch result {
case .success: break
case .failure(let error): print(error)
}
}
HMAC-верификация обязательна в продакшене. Без неё любой пользователь может подменить userId и получить чужую историю переписки. Backend генерирует HMAC:
Intercom.setUserHash("backend_generated_hmac_string")
Генерация на backend (Node.js):
const crypto = require('crypto');
const hash = crypto.createHmac('sha256', process.env.INTERCOM_SECRET)
.update(userId)
.digest('hex');
Messenger и In-App сообщения
Открытие чата:
Intercom.present() // весь Messenger
Intercom.presentMessageComposer(nil) // сразу новое сообщение
Intercom.presentContent(.helpCenter) // только Help Center
In-App сообщения (баннеры, модалки) показываются автоматически на основе правил в Intercom Console — не требуют кода на клиенте, только корректной идентификации пользователя.
Скрытие Launcher
По умолчанию Intercom показывает floating button поверх всего контента. В большинстве приложений это нежелательно — нужен кастомный entry point:
// Скрыть стандартный launcher
Intercom.setLauncherVisible(false)
// Кастомная кнопка поддержки
@IBAction func supportTapped(_ sender: UIButton) {
Intercom.present()
}
Push-уведомления
// Регистрация APNs токена
func application(_ application: UIApplication,
didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
Intercom.setDeviceToken(deviceToken)
}
// Обработка входящего push
func userNotificationCenter(_ center: UNUserNotificationCenter,
didReceive response: UNNotificationResponse,
withCompletionHandler completionHandler: @escaping () -> Void) {
if Intercom.isIntercomPushNotification(response.notification.request.content.userInfo) {
Intercom.handlePushNotification(response.notification.request.content.userInfo)
}
completionHandler()
}
Push Intercom приходит через APNs стандартно, но payload содержит intercom ключ — нужно проверять перед обработкой, чтобы не конфликтовать с Firebase Messaging.
Конфликт с другими SDK
Intercom и Firebase Messaging оба устанавливают UNUserNotificationCenterDelegate. Нужен единый делегат, который роутит push:
// AppDelegate
func userNotificationCenter(_ center: UNUserNotificationCenter,
willPresent notification: UNNotification,
withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
let userInfo = notification.request.content.userInfo
if Intercom.isIntercomPushNotification(userInfo) {
completionHandler([])
} else {
// Firebase или другой обработчик
completionHandler([.banner, .sound])
}
}
Ориентиры по срокам
Базовая интеграция с чатом, идентификацией и push — 3–5 дней. Настройка кастомных событий для сегментации, тестирование in-app сообщений и проверка HMAC на staging — плюс 1–2 дня.







