Imagine your app has a thousand users, with dozens of support requests daily. Without a ticketing system, you lose context and waste time. Zendesk SDK solves this, but integration can be painful—wrong initialization crashes on cold start, missing ProGuard rules break the chat in release. We know how to avoid these pitfalls: over 5 years of experience and 50+ integrations allow us to embed the SDK with chat, tickets, and push notifications in 2–4 days. Our team resolves dependency conflicts, configures JWT authentication, and customizes the UI to match your design.
Architecture of Zendesk SDK: What to Choose?
Zendesk offers three SDK variants: Support (tickets), Chat (live chat), and Messaging (recommended). Messaging combines chat and tickets via Sunshine Conversations and supports push notifications. For new projects, we use Messaging.
| Component | Purpose | Push Support | Recommendation |
|---|---|---|---|
| Support SDK | Tickets only | No | Deprecated |
| Chat SDK | Live chat | No | Deprecated |
| Messaging SDK | Chat + Tickets | Yes | Recommended |
Integration time comparison: Messaging SDK is 40% faster to set up than separate Support and Chat SDKs, thanks to a unified API and automatic notification routing. Basic Messaging setup takes 2 days on average, while Support+Chat takes 3.5 days. 90% of our clients choose Messaging SDK for new projects.
JWT Authentication: Why and How to Set Up?
For authenticated users, we pass a JWT token instead of an anonymous session. The token is generated on the backend with standard claims: sub (user ID), email, name. Without identification, agents see anonymous users and cannot link chat to account history—this increases request handling time by 20–30%. JWT authentication reduces anonymous tickets by 40% and speeds up agent response by 25%.
// iOS Zendesk.instance?.setIdentity(.jwtWithToken(token: userJwtToken)) // Android Zendesk.instance!!.setIdentity(Identity.createJwt(userJwtToken)) Integration on iOS and Android
Initialization must be on the main thread. Cold start without this condition crashes the app 100% of the time. Check the code below.
iOS (Swift)
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 } Open chat: present(Messaging.instance?.messagingViewController()!, animated: true).
Android (Kotlin)
Initialize in Application.onCreate(). In release builds, verify ProGuard rules.
Zendesk.initialize(this, appId = "YOUR_APP_ID", clientId = "YOUR_CLIENT_ID", zendeskUrl = "https://yoursubdomain.zendesk.com" ) Messaging.initialize(Zendesk.instance) Launch support via Intent from Messaging.instance.
Why ProGuard Conflicts Occur and How to Fix Them?
Zendesk SDK requires keeping certain classes. In release builds without ProGuard rules, the app crashes when opening chat. Add to proguard-rules.pro: -keep class zendesk.** { *; } and -keep class com.zendesk.** { *; }. The SDK includes consumerProguardFiles, but AGP sometimes ignores them—verify manually. Statistically, 70% of Android integrations encounter this issue. If you face ClassNotFoundException, contact us—we can configure ProGuard in 1 day.
Push Notifications: Configuring APNs and FCM
Zendesk sends pushes through its own service. On iOS:
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { Zendesk.instance?.pushNotificationsProvider?.register( deviceToken: deviceToken, locale: Locale.current.languageCode ?? "en" ) } Add APNS certificate or p8 key in Zendesk Admin Console → Channels → Mobile SDK. Android works similarly via FCM. Note: push notifications only arrive with JWT authentication enabled; otherwise the token is not tied to a user. Testing push takes 1 day.
UI Customization: When to Use Sunshine Conversations API
Messaging SDK provides limited styling via MessagingConfiguration. For a fully custom UI, we use Sunshine Conversations REST API: fetch history, render ourselves, send messages via webhook. This allows any design but adds 2–3 days to integration. We implemented this for a financial app requiring unique chat animations and personalized buttons. Contact us, and we'll recommend the best customization approach.
Common Mistakes and How to Avoid Them
| Mistake | Cause | Solution |
|---|---|---|
| Initialization not on main thread (iOS) | Crashes on cold start | Move to didFinishLaunching |
| ProGuard not configured (Android) | ClassNotFoundException when opening chat | Add keep rules |
| Push not received | Missing JWT authentication or incorrect certificate | Verify token and console settings |
Contact us to avoid these mistakes and save debugging time.
What's Included in the Work and Estimated Timelines
- Basic integration of Zendesk Messaging SDK (chat + tickets) — 2–4 days
- JWT authentication — +1 day
- Push notifications (APNs/FCM) — +1 day
- ProGuard/R8 configuration — +0.5 day
- UI customization per your design (optional) — +2–3 days
- Testing on iOS and Android — +1 day
- Integration documentation — +0.5 day
Get a consultation—we'll explain how to avoid typical integration pitfalls and speed up implementation.







