-
Notifications
You must be signed in to change notification settings - Fork 0
Troubleshooting
The Notification Service Extension (NSE) handles delivery reports and rich push content. If these aren't working, the issue is almost always signing or entitlements.
Symptoms:
- Push notifications arrive but delivery reports show 0% in the Infobip portal
- Rich media (images) not showing on notifications
Check these in order:
-
NSE is included in the build -- open the
.ipa(rename to.zipand extract) and verifyInfobipNotificationServiceExtension.appexexists inside the.appbundle. -
App Groups match -- the main app and NSE must share the exact same App Group ID. Verify in Xcode under Signing & Capabilities for both targets. The group ID must also match the
com.mobilemessaging.app_groupvalue in your main app'sInfo.plist. -
NSE provisioning profile has App Groups -- the NSE App ID on the Apple Developer Portal must have the App Groups capability enabled. EAS managed credentials handle this automatically; manual credentials require explicit setup (see EAS Setup - Manual Credentials).
-
aps-environment matches build type --
iosMode: 'development'for development builds,iosMode: 'production'for Ad Hoc/App Store. A mismatch causes silent push failures. -
Check NSE logs -- connect the device, open Console.app, filter by process
InfobipNotificationServiceExtension. Look for:-
"Could not start notification extension. ApplicationCode not found in keychain."-- the main app hasn't synced credentials to the shared keychain yet. Launch the main app at least once after install. - No logs at all -- the NSE is not being invoked. Check signing and entitlements.
-
[!] CocoaPods could not find compatible versions for pod "MobileMessaging"
The nseVersion plugin prop must match the MobileMessaging version used by infobip-mobile-messaging-react-native-plugin. Check the RN plugin's podspec for the pinned version:
grep MobileMessaging node_modules/infobip-mobile-messaging-react-native-plugin/*.podspecSet nseVersion to match:
["infobip-mobile-messaging-expo-plugin", { "nseVersion": "15.0.0" }][!] The platform of the target `InfobipNotificationServiceExtension` (iOS 13.0) is not compatible
The Infobip SDK requires iOS 15.0+. Ensure iosDeploymentTarget is '15.0' or higher (this is the default).
Expo SDK 55 projects using use_frameworks! may encounter pod install failures. This is a known compatibility issue between use_frameworks! and certain native module configurations.
Workaround: If you're using expo-build-properties to set useFrameworks:
[
"expo-build-properties",
{
"ios": {
"useFrameworks": "static"
}
}
]Ensure the Infobip plugin is listed after expo-build-properties in your plugins array.
Manifest merger failed: Attribute application@allowBackup value=(true)
is also present at [com.infobip:...] value=(false)
The Infobip Android SDK sets android:allowBackup="false" and android:enableOnBackInvokedCallback="true", which conflict with Expo defaults. The plugin automatically adds tools:replace attributes to resolve this. If you still see this error:
- Run
npx expo prebuild --cleanto regenerate from scratch - Verify the plugin is in your
app.jsonplugins array - Check that no other plugin is removing the
tools:replaceattribute
The Infobip SDK auto-merges permissions, services, and receivers via the Android manifest merger. If another SDK declares conflicting attributes, you may need to add additional tools:replace entries. See the Android manifest merger documentation.
Expo Go does not support config plugins. The Infobip plugin modifies native code at prebuild time -- Expo Go uses a pre-built binary that cannot include these changes.
To develop with Infobip push notifications, use a development build:
npx expo install expo-dev-client
eas build --profile development --platform ios
# or
npx expo run:iosIf you see errors like MobileMessaging module not found or push registration fails silently, confirm you're running a development build and not Expo Go.
expo-notifications and the Infobip SDK can coexist for local notifications, but for remote push notifications you should use only one provider.
If both are installed:
-
iOS: Both SDKs register for push tokens. The
aps-environmententitlement is shared (last plugin in thepluginsarray wins). Place Infobip afterexpo-notificationsin the plugins array. -
Android: Both register a Firebase messaging service. Android routes
com.google.firebase.MESSAGING_EVENTto only one service. The Infobip SDK'sMobileMessagingFirebaseServicemay not receive events if another service claims them first.
Recommendation: If using Infobip for push, remove expo-notifications remote push setup and use Infobip's API for all remote notifications. expo-notifications can still be used for local notifications.
iOS NSE conflict: iOS invokes only one Notification Service Extension per notification. If another SDK creates its own NSE target, only one will be active. To support both, use a custom NSE file (iosNSEFilePath prop) that delegates to both SDKs:
override func didReceive(_ request: UNNotificationRequest,
withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
if MobileMessagingNotificationServiceExtension.isCorrectPayload(request.content.userInfo as? [String: Any] ?? [:]) {
MobileMessagingNotificationServiceExtension.didReceive(request, withContentHandler: contentHandler)
} else {
// Delegate to the other SDK's NSE handler
OtherSDK.didReceive(request, withContentHandler: contentHandler)
}
}Android: Multiple Firebase messaging services can coexist if each checks the payload and passes through unrecognized messages. The Infobip SDK already does this.
After changing plugin props in app.json, always run:
npx expo prebuild --cleanA regular npx expo prebuild (without --clean) may not re-apply all changes because some modifications use createFileIfNoneExists and skip files that already exist. The --clean flag deletes the ios/ and android/ directories and regenerates them from scratch.
This applies to changes like:
- Switching
iosModebetween'development'and'production' - Changing
iosAppGrouporiosAppGroupSuffix - Enabling/disabling
enableNotificationExtension - Changing
deepLinkScheme
graph TD
E1["No provisioning profile for<br/>*.InfobipNotificationServiceExtension"]
S1["Create NSE App ID and profile<br/>See EAS Setup"]
E2["ApplicationCode not found<br/>in keychain"]
S2["Launch main app once after install<br/>to sync credentials"]
E3["google-services.json not found"]
S3["Add googleServicesFile to app.json<br/>or googleServicesFilePath to plugin props"]
E4["MobileMessaging module not found"]
S4["You're in Expo Go<br/>Use a development build"]
E5["CocoaPods version conflict"]
S5["Match nseVersion to RN plugin's<br/>MobileMessaging version"]
E1 --> S1
E2 --> S2
E3 --> S3
E4 --> S4
E5 --> S5
If your issue isn't covered here, check the React Native plugin wiki for SDK-level troubleshooting.