Skip to content

feat(android)!: upgrade Intercom Android SDK to 18.0.0#411

Open
imSzukala wants to merge 2 commits intomainfrom
irena/android-sdk-upgrade
Open

feat(android)!: upgrade Intercom Android SDK to 18.0.0#411
imSzukala wants to merge 2 commits intomainfrom
irena/android-sdk-upgrade

Conversation

@imSzukala
Copy link
Copy Markdown
Contributor

Why?

Android SDK 18.0.0 is a major release that removes the handlePushMessage() API (the SDK now auto-opens conversations on push tap), raises compileSdk/targetSdk to 36, and migrates internal storage from SharedPreferences to DataStore. The React Native wrapper needs to be updated to align with these breaking changes.

How?

Remove the handlePushMessage() method from native modules, TurboModule spec, and public JS API. Bump build tooling (AGP 8.9.0, Gradle 8.11.1, compileSdk/targetSdk 36) to match SDK requirements. Clean up dead code left behind by the removal.

Implementation Plan

Evaluation of Changes

Change File(s) Verdict
SDK bumped to 18.0.0 (intercom-sdk + intercom-sdk-ui) android/build.gradle ✅ Correct
compileSdk/targetSdk → 36, buildTools → 36.0.0 android/build.gradle ✅ Correct
AGP 8.6.1 → 8.9.0 android/build.gradle ✅ Correct (AGP 8.9 requires Gradle 8.11+)
Gradle 8.7 → 8.11.1 gradle-wrapper.properties ✅ Correct (compatible with AGP 8.9)
handlePushMessage() removed from newarch module newarch/IntercomModule.java ✅ Correct
handlePushMessage() removed from oldarch module oldarch/IntercomModule.java ✅ Correct
handlePushMessage() removed from TurboModule spec src/NativeIntercomSpec.ts ✅ Correct
handlePushMessage removed from public API + type src/index.tsx ✅ Correct
Example apps upgraded (RN 0.74 → 0.81) examples/ ✅ Correct (no handlePushMessage refs remain)

The static helper methods (handleRemotePushWithCustomStack, handleRemotePushMessage) correctly use intercomPushClient.handlePushWithCustomStack() — the replacement API that's been stable since SDK 16.2.0. All other Intercom.client().* calls in the wrapper remain unchanged in 18.0.0.

Cleanup

  • Remove dead HANDLE_PUSH_MESSAGE error code constant
  • Remove unused Toast and ReadableArray imports from both arch modules
  • Migrate deprecated lintOptions to lint block in build.gradle
  • Update README to remove handlePushMessage docs and fix SDK version numbers
  • Remove handlePushMessage AppState listeners from all example apps

Considerations for release

  • Semver: Removing handlePushMessage from the public JS API is a breaking change — warrants a major version bump
  • Data migration: Upgrading triggers a one-way migration (SharedPreferences → DataStore). Downgrading back to 17.x will lose local SDK state.

Verification

  • Android project builds successfully (assembleDebug)
  • Example app launches on emulator without crashes
  • Intercom SDK initializes correctly (shows logged-in status and unread count)
  • No remaining handlePushMessage references in codebase

Generated with Claude Code

Upgrade the Android SDK from 17.4.7 to 18.0.0, a major release that
removes the `handlePushMessage()` API — the SDK now automatically opens
conversations when push notifications are tapped.

Breaking changes:
- Remove `handlePushMessage()` from native modules, TurboModule spec,
  and public JS API
- Raise compileSdk/targetSdk to 36 and buildToolsVersion to 36.0.0
- Upgrade AGP to 8.9.0 and Gradle to 8.11.1

Cleanup:
- Remove dead HANDLE_PUSH_MESSAGE error code constant
- Remove unused Toast and ReadableArray imports from both arch modules
- Migrate deprecated lintOptions to lint block in build.gradle
- Update README to remove handlePushMessage docs and fix SDK versions
- Remove handlePushMessage AppState listeners from all example apps

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@imSzukala imSzukala self-assigned this Apr 8, 2026
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants