Intercom present() method opens 2 message drawers on iOS when built using EAS | Community
Skip to main content
Answered

Intercom present() method opens 2 message drawers on iOS when built using EAS

  • April 1, 2026
  • 1 reply
  • 70 views

Hi guys, I recently integrated intercom in our app React Native app running Expo 54. @intercom/intercom-react-native (^9.6.3). I noticed whenever I build on EAS, calling present() or presentMessageComposer() opens two instances of the messenger bottomsheet in our app. Doesn’t happen whenever I try to build locally using prebuild tho. Has anyone encountered this before? 

Best answer by Dara K

Hey ​@md-berny 

What you’re seeing (two bottom sheets opening) almost always points to Intercom being initialised twice in the EAS build, even if it looks fine locally. A few things to check:

  1. JS initialisation (once only)

    • Make sure you only call Intercom.initialize(...) once in your JS/TS code (e.g. in your app entry file).
    • It shouldn’t be called again inside individual screens/components, or in both App.tsx and some custom wrapper.
  2. Expo config plugin vs manual native setup

    • If you’re using the Expo config plugin in app.json / app.config:
      {
      "plugins": ["@intercom/intercom-react-native"]
      }
      then you shouldn’t also have manual Intercom setup in native files (e.g. MainApplication.java / AppDelegate.m). The plugin wires this up for you, and having both can cause the module to be registered twice in EAS builds.
    • A local prebuild can behave differently if the plugin/native changes aren’t identical to what EAS is using, which matches what you’re seeing.
  3. Clean EAS build after changes

    • After removing any duplicate init (either extra JS initialisation or extra native wiring), do a clean EAS build and test again.

1 reply

Forum|alt.badge.img+5
  • Intercom Team
  • Answer
  • April 10, 2026

Hey ​@md-berny 

What you’re seeing (two bottom sheets opening) almost always points to Intercom being initialised twice in the EAS build, even if it looks fine locally. A few things to check:

  1. JS initialisation (once only)

    • Make sure you only call Intercom.initialize(...) once in your JS/TS code (e.g. in your app entry file).
    • It shouldn’t be called again inside individual screens/components, or in both App.tsx and some custom wrapper.
  2. Expo config plugin vs manual native setup

    • If you’re using the Expo config plugin in app.json / app.config:
      {
      "plugins": ["@intercom/intercom-react-native"]
      }
      then you shouldn’t also have manual Intercom setup in native files (e.g. MainApplication.java / AppDelegate.m). The plugin wires this up for you, and having both can cause the module to be registered twice in EAS builds.
    • A local prebuild can behave differently if the plugin/native changes aren’t identical to what EAS is using, which matches what you’re seeing.
  3. Clean EAS build after changes

    • After removing any duplicate init (either extra JS initialisation or extra native wiring), do a clean EAS build and test again.