Troubleshoot Issues on Android Apps

This guide provides detailed solutions to common problems that occur when implementing the MobilePush Android SDK in your app.

Push Messages Not Displayed 

If you encounter issues receiving messages in your app, consider the following troubleshooting steps.

Check the SDK’s Log Output 

  1. Enable logging in the SDK and verify no errors are being logged.

    Ensure you attempt this important debugging step. The SDK provides verbose messages that are helpful in identifying and rectifying errors.

    Important

  2. To capture the log output from MobilePush SDK, add the MCLogListener interface.

    8.x and higher
    1// Enable SFMC logging
    2SFMCSdk.setLogging(LogLevel.DEBUG, LogListener.AndroidLogger())
    3
    4// Set Log Level
    5MarketingCloudSdk.setLogLevel(MCLogListener.VERBOSE)
    6
    7// Set Android Logcat Log Listener
    8MarketingCloudSdk.setLogListener(MCLogListener.AndroidLogListener())
  3. Implement a custom log listener.

    8.x
    1// Custom Logger implementation
    2class MyLogger : MCLogListener, LogListener {
    3    override fun out(level: Int, tag: String, message: String, throwable: Throwable?) {
    4        // level: VERBOSE, DEBUG, INFO, WARN, ERROR
    5        // Do something with the log output
    6    }
    7
    8    override fun out(level: LogLevel, tag: String, message: String, throwable: Throwable?) {
    9        // level: DEBUG, WARN, ERROR
    10        // Do something with the log output
    11    }
    12  }
    13
    14// Set Custom Log Listener
    15MarketingCloudSdk.setLogListener(MyLogger())

Send a Test Push 

To test whether your device can receive a push directly from FCM, follow these steps.

  1. Get the push token from the SDK

    8.x
    1SFMCSdk.requestSdk { sdk ->
    2  sdk.mp {
    3    it.pushMessageManager.pushToken?.let {
    4        token -> Log.d("TOKEN", token)
    5    }
    6  }
    7}
    7.x
    1MarketingCloudSdk.requestSdk { sdk ->
    2  Log.d("TOKEN", sdk.pushMessageManager.pushToken)
    3}
  2. Use the following script to send yourself a push message.

    1#!/usr/bin/env bash
    2export PUSH_TOKEN=#Use push token from SDKs PushMessageManager#getPushToken() method
    3export FCM_SERVER_KEY=#Use value from Firebase console
    4curl --header "Authorization: key=$FCM_SERVER_KEY" \
    5  --header Content-Type:"application/json" \
    6  https://fcm.googleapis.com/fcm/send \
    7  -d "{\"to\":\"$PUSH_TOKEN\",\"data\":{\"_m\":\"test_message\",\"alert\":\"It Worked!\",\"title\":\"Test Push\", \"_sid\":\"SFMC\"}}"

If your device successfully receives a message using the sample script but still can’t receive a message from Marketing Cloud Engagement, follow these steps.

  1. Wait 15 minutes after the first registration call for the device you’re testing with to ensure your device is properly registered in Engagement.
  2. Check the List you created in the Engagement UI and ensure the DeviceId you printed in Logcat shows up in the list.

For information about sending a test message in the Marketing Cloud Engagement, see Send a Test Message to Validate Accuracy.

Note

Evaluate the SDK state 

Look through the output from the SDK’s getSdkState() method.

8.x and higher
1/** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
2  Sometimes the output from the SDK’s Get State method can exceed Android’s output length
3  restrictions.
4  Adding an `indentSpaces` to the output of JSONObjects can help bypass this restriction.
5  Additionally, you can get each of the sections independently.
6* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
7if (BuildConfig.DEBUG) {
8
9  // Enable Logging _BEFORE_ calling the SDK’s configure/init method
10  SFMCSdk.setLogging(LogLevel.DEBUG, LogListener.AndroidLogger())
11  MarketingCloudSdk.setLogLevel(VERBOSE)
12  MarketingCloudSdk.setLogListener(MCLogListener.AndroidLogListener())
13
14  // When the SDK is ready, output its state to the logs
15  SFMCSdk.requestSdk {
16
17    // Specifically get the push state information
18    with(it.getSdkState()["PUSH"] as JSONObject) {
19
20      // General Troubleshooting
21      Log.i("~#SdkState", "initConfig: ${this["initConfig"]}")
22      Log.i("~#SdkState", "initStatus: ${this["initStatus"]}")
23      Log.i("~#SdkState", "PushMessageManager: ${(this["PushMessageManager"] as JSONObject).toString(2)}")
24      Log.i("~#SdkState", "RegistrationManager: ${(this["RegistrationManager"] as JSONObject).toString(2)}")
25
26      // Troubleshoot InApp Messages
27      Log.i("~#SdkState", "InAppMessageManager: ${(this["InAppMessageManager"] as JSONObject).toString(2)}")
28      Log.i(
29        "~#SdkState",
30        "InApp Messages: ${((this["InAppMessageManager"] as JSONObject)["messages"] as JSONArray).toString(2)}"
31      )
32
33      // Get Everything
34      Log.i("~#SdkState", "InApp Events: ${(this["Event"] as JSONObject).toString(2)}")
35    }
36  }
37}
7.x
1/** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
2  Sometimes the output from the SDK’s Get State method can exceed Android’s output length
3  restrictions.
4
5  Adding an `indentSpaces` to the output of JSONObjects can help bypass this restriction.
6
7  Additionally, you can get each of the sections independently.
8
9 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
10if (BuildConfig.DEBUG) {
11
12  // Enable Logging _BEFORE_ calling the SDK’s configure/init method
13  MarketingCloudSdk.setLogLevel(VERBOSE)
14  MarketingCloudSdk.setLogListener(MCLogListener.AndroidLogListener())
15
16  // When the SDK is ready, output its state to the logs
17  MarketingCloudSdk.requestSdk {
18
19    // Specifically get the push state information
20    with(it.sdkState) {
21
22      // General Troubleshooting
23      Log.i("~#SdkState", "initConfig: ${this["initConfig"]}")
24      Log.i("~#SdkState", "initStatus: ${this["initStatus"]}")
25      Log.i("~#SdkState", "PushMessageManager: ${(this["PushMessageManager"] as JSONObject).toString(2)}")
26      Log.i("~#SdkState", "RegistrationManager: ${(this["RegistrationManager"] as JSONObject).toString(2)}")
27
28      // Troubleshoot InApp Messages
29      Log.i("~#SdkState", "InAppMessageManager: ${(this["InAppMessageManager"] as JSONObject).toString(2)}")
30      Log.i(
31        "~#SdkState",
32        "InApp Messages: ${((this["InAppMessageManager"] as JSONObject)["messages"] as JSONArray).toString(2)}"
33      )
34
35      // Get Everything
36      Log.i("~#SdkState", "InApp Events: ${(this["Event"] as JSONObject).toString(2)}")
37    }
38  }
39}

Although this method provides extensive information, when you’re debugging push messaging, focus your attention on the NotificationManager and PushMessageManager sections for key insights.

8.x
1{
2    "sfmcSDKVersion": "1.0.2",
3    "PUSH": {
4        "initConfig": "MarketingCloudConfig(applicationId=<redacted>, accessToken=<redacted>, senderId=<redacted>, marketingCloudServerUrl=http:\/\/localhost:43683\/, mid=null, analyticsEnabled=true, geofencingEnabled=true, inboxEnabled=true, piAnalyticsEnabled=true, proximityEnabled=true, markMessageReadOnInboxNotificationOpen=true, delayRegistrationUntilContactKeyIsSet=false, useLegacyPiIdentifier=true, notificationCustomizationOptions={notificationBuilder=com.salesforce.marketingcloud.explorer.sdk.SdkInterfaces}, urlHandler=com.salesforce.marketingcloud.explorer.sdk.SdkInterfaces@6b985d4, appPackageName=com.salesforce.marketingcloud.explorer.debug, appVersionName=8.0.5-SNAPSHOT.DEBUG, predictiveIntelligenceServerUrl=https:\/\/app.igodigital.com\/api\/v1\/collect\/process_batch)",
5        "initStatus": "InitializationStatus(status=SUCCESS, unrecoverableException=null, locationsError=false, playServicesStatus=0, playServicesMessage=SUCCESS, encryptionChanged=false, storageError=false, proximityError=false, messagingPermissionError=false, sslProviderEnablementError=false, initializedComponents=[BehaviorManager, LifecycleManager, RequestManager, AlarmScheduler, SyncRoute, ControlChannel, LocationManager, ProximityManager, AnalyticsManager, InboxMessageManager, NotificationManager, RegionMessageManager, PushMessageManager, RegistrationManager, InAppMessageManager, Event], isUsable=true)",
6        "RequestManager": {},
7        "AlarmScheduler": {
8            "pending_alarms": {}
9        },
10        "ControlChannel": {
11            "flag": "NONE"
12        },
13        "LocationManager": {
14            "geofencingEnabled": true,
15            "proximityEnabled": true,
16            "apiCode": 0,
17            "apiMessage": "SUCCESS",
18            "locationRequests": 0,
19            "locationsReceived": 0,
20            "geofenceEvents": 0
21        },
22        "ProximityManager": {
23            "proximityEnabled": true,
24            "enteredEvents": 0,
25            "exitedEvents": 0
26        },
27        "AnalyticsManager": {
28            "bet_analytics": true,
29            "et_analytics": true,
30            "pi_analytics": true,
31            "device_stats": true
32        },
33        "InboxMessageManager": {
34            "inbox_messages": "[]"
35        },
36        "NotificationManager": {
37            "notificationsEnabled": true,
38            "shouldShowNotificationListener": "com.salesforce.marketingcloud.explorer.sdk.SdkInterfaces"
39        },
40        "RegionMessageManager": {
41            "geofenceMessagingEnabled": false,
42            "proximityMessagingEnabled": false,
43            "geofence_regions": "[]",
44            "geofence_region_messages": "[]",
45            "proximity_regions": "[]",
46            "proximity_region_messages": "[]",
47            "boot_complete_permission": true
48        },
49        "PushMessageManager": {
50            "pushEnabled": true,
51            "tokenRefreshListeners": [
52                "com.salesforce.marketingcloud.explorer.sdk.SdkModule$$ExternalSyntheticLambda1"
53            ],
54            "debugInfo": {
55                "senderId": "<redacted>",
56                "deviceToken": "<redacted>",
57                "firebaseApps": [
58                    "FirebaseApp{name=[DEFAULT], options=FirebaseOptions{applicationId=1:<redacted>:android:<redacted>, apiKey=<redacted>, databaseUrl=null, gcmSenderId=null, storageBucket=null, projectId=et-public-demo-app}}"
59                ],
60                "c2dmReceiver": [
61                    {
62                        "name": "com.google.firebase.iid.FirebaseInstanceIdReceiver",
63                        "priority": 0
64                    }
65                ],
66                "instanceIdService": [],
67                "messagingService": [
68                    {
69                        "name": "com.salesforce.marketingcloud.messages.push.MCFirebaseMessagingService",
70                        "priority": -1
71                    },
72                    {
73                        "name": "com.google.firebase.messaging.FirebaseMessagingService",
74                        "priority": -500
75                    }
76                ]
77            }
78        },
79        "RegistrationManager": {
80            "current_registration": {
81                "deviceID": "18324364E1C9D141F1ABC9E8B33FC5938C5DA61B0E52AB8E434CBD202ED9BD93",
82                "device_Token": "<redacted>",
83                "sdk_Version": "8.0.5.0",
84                "app_Version": "8.0.5-SNAPSHOT.DEBUG : 23600000",
85                "dST": false,
86                "location_Enabled": false,
87                "proximity_Enabled": false,
88                "platform_Version": "12",
89                "push_Enabled": true,
90                "timeZone": "-18000",
91                "platform": "Android",
92                "hwid": "Google Pixel 4",
93                "etAppId": "<redacted>",
94                "locale": "en_US",
95                "tags": [
96                    "ALL",
97                    "Android",
98                    "DEBUG"
99                ],
100                "attributes": []
101            },
102            "last_sent_timestamp": "2022-03-09T18:10:41.107Z"
103        },
104        "InAppMessageManager": {
105            "messages": [],
106            "eventListener": "com.salesforce.marketingcloud.explorer.sdk.SdkInterfaces",
107            "subscriberToken": "null",
108            "custom_font_set": false,
109            "status_bar_color": -13615201
110        },
111        "Event": {
112            "triggers": []
113        }
114    }
115}
7.x
1{
2  "initConfig": "MarketingCloudConfig(applicationId=<redacted>, accessToken=<redacted>, senderId=<redacted>, marketingCloudServerUrl=http:\/\/localhost:39241\/, mid=null, analyticsEnabled=true, geofencingEnabled=true, inboxEnabled=true, piAnalyticsEnabled=true, proximityEnabled=true, markMessageReadOnInboxNotificationOpen=true, delayRegistrationUntilContactKeyIsSet=false, useLegacyPiIdentifier=true, notificationCustomizationOptions={smallIconResId=2131230860, launchIntentProvider=com.salesforce.marketingcloud.explorer.sdk.SdkInterfaces, channelIdProvider=com.salesforce.marketingcloud.explorer.sdk.SdkInterfaces}, urlHandler=com.salesforce.marketingcloud.explorer.sdk.SdkInterfaces@1133e7c, appPackageName=com.salesforce.marketingcloud.explorer.debug, appVersionName=7.4.4.DEBUG, predictiveIntelligenceServerUrl=https:\/\/app.igodigital.com\/api\/v1\/collect\/process_batch)",
3  "initStatus": "InitializationStatus(status=SUCCESS, unrecoverableException=null, locationsError=false, playServicesStatus=0, playServicesMessage=SUCCESS, encryptionChanged=false, storageError=false, proximityError=false, messagingPermissionError=false, sslProviderEnablementError=false, initializedComponents=[BehaviorManager, LifecycleManager, RequestManager, AlarmScheduler, SyncRoute, ControlChannel, LocationManager, ProximityManager, AnalyticsManager, InboxMessageManager, NotificationManager, RegionMessageManager, PushMessageManager, RegistrationManager, InAppMessageManager, Event], isUsable=true)",
4  "RequestManager": {
5  },
6  "AlarmScheduler": {
7    "pending_alarms": {}
8  },
9  "ControlChannel": {
10    "flag": "NONE"
11  },
12  "LocationManager": {
13    "geofencingEnabled": true,
14    "proximityEnabled": true,
15    "apiCode": 0,
16    "apiMessage": "SUCCESS",
17    "locationRequests": 0,
18    "locationsReceived": 0,
19    "geofenceEvents": 0
20  },
21  "ProximityManager": {
22    "proximityEnabled": true,
23    "enteredEvents": 0,
24    "exitedEvents": 0
25  },
26  "AnalyticsManager": {
27    "bet_analytics": true,
28    "et_analytics": true,
29    "pi_analytics": true,
30    "device_stats": true
31  },
32  "InboxMessageManager": {
33    "inbox_messages": "[]"
34  },
35  "NotificationManager": {
36    "notificationsEnabled": true,
37    "shouldShowNotificationListener": "com.salesforce.marketingcloud.explorer.sdk.SdkInterfaces"
38  },
39  "RegionMessageManager": {
40    "geofenceMessagingEnabled": false,
41    "proximityMessagingEnabled": false,
42    "geofence_regions": "[]",
43    "geofence_region_messages": "[]",
44    "proximity_regions": "[]",
45    "proximity_region_messages": "[]",
46    "boot_complete_permission": true
47  },
48  "PushMessageManager": {
49    "pushEnabled": true,
50    "tokenRefreshListeners": [
51      "com.salesforce.marketingcloud.explorer.sdk.SdkModule$$ExternalSyntheticLambda1",
52      "com.salesforce.marketingcloud.explorer.sdk.SdkModule$$ExternalSyntheticLambda1"
53    ],
54    "debugInfo": {
55      "senderId": "<redacted>",
56      "deviceToken": "<redacted>",
57      "firebaseApps": [
58        "FirebaseApp{name=[DEFAULT], options=FirebaseOptions{applicationId=<redacted>, apiKey=<redacted>, databaseUrl=null, gcmSenderId=null, storageBucket=null, projectId=et-public-demo-app}}"
59      ],
60      "c2dmReceiver": [
61        {
62          "name": "com.google.firebase.iid.FirebaseInstanceIdReceiver",
63          "priority": 0
64        }
65      ],
66      "instanceIdService": [],
67      "messagingService": [
68        {
69          "name": "com.salesforce.marketingcloud.messages.push.MCFirebaseMessagingService",
70          "priority": -1
71        },
72        {
73          "name": "com.google.firebase.messaging.FirebaseMessagingService",
74          "priority": -500
75        }
76      ]
77    }
78  },
79  "RegistrationManager": {
80    "current_registration": {
81      "deviceID": "CECBFF7A84675A152774E60FDE7C461263DFF3957013B0771B39D89F2EA6D41B",
82      "device_Token": "<redacted>",
83      "sdk_Version": "7.4.4",
84      "app_Version": "7.4.4.DEBUG : 23240000",
85      "dST": false,
86      "location_Enabled": false,
87      "proximity_Enabled": false,
88      "platform_Version": "14",
89      "push_Enabled": true,
90      "timeZone": 19800,
91      "platform": "Android",
92      "hwid": "Google Pixel 7",
93      "etAppId": "<redacted>",
94      "locale": "en_US",
95      "tags": [
96        "ALL",
97        "Android",
98        "DEBUG"
99      ],
100      "attributes": []
101    },
102    "last_sent_timestamp": "2024-04-22T07:45:35.509Z"
103  },
104  "InAppMessageManager": {
105    "messages": [],
106    "eventListener": "com.salesforce.marketingcloud.explorer.sdk.SdkInterfaces",
107    "subscriberToken": "<redacted>",
108    "custom_font_set": false,
109    "status_bar_color": -13615201
110  },
111  "Event": {
112    "triggers": []
113  }
114}

If you’ve implemented multiple push providers, review Troubleshoot Multiple Push SDKs for more information.

Troubleshoot Initialization Errors 

The troubleshooting steps for initialization errors vary depending on the version of the SDK you use.

Version 8 and higher 

The InitializationStatus is provided via the InitializationListener passed into the call to the SFMCSdk’s configure method.

Version 7 

The InitializationStatus is provided via the InitializationListener passed into the call to the MobilePush SDK’s init method. While this class contains extensive information that can help troubleshoot SDK initialization issues, there are only a limited number of things that you can address at runtime.

This section describes the methods from InitializationStatus that are useful to check at runtime and how you can recover from them. The InitializationStatus is provided via the InitializationListener passed into the call to the SFMC SDK’s configure method.

status()

The status() method returns the status of the initialization call.

locationsError()

If you’ve configured the SDK to enable either geofence or proximity messaging, locationsError() indicates whether the SDK encountered an issue with the Google Play Service location library. Additionally, you can also use playServicesMessage() and playServicesStatus() to determine the exact action that you must take to resolve this issue. However, the most likely issue is that the device doesn’t have a compatible version of Google Play Services installed and you must prompt the user to perform an update.

messagingPermissionError()

messagingPermissionError() indicates that region messaging was unable to be turned on after a restart due to the android.Manifest.permission.ACCESS_FINE_LOCATION or android.Manifest.permission.ACCESS_BACKGROUND_LOCATION no longer being granted. Enabling geofence or proximity messaging requires you to request the runtime permission for location. Then, after you've called the corresponding messaging enablement method (enableGeofenceMessaging or enableProximityMessaging), the SDK will track this setting and check whether the permission is still granted during each initialization. If the user has revoked the location permission from your application, the SDK disables the previously enabled messaging type and requires you to re-request the permission from the user, and re-enable messaging in the SDK.

Example InitializationListener Implementation 

8.x
1SFMCSdk.configure(context.applicationContext as Application, SFMCSdkModuleConfig.build {
2  this.pushModuleConfig = newConfig
3}) {
4  when(it.status) {
5    com.salesforce.marketingcloud.sfmcsdk.InitializationStatus.SUCCESS -> {
6      Log.v("MyApp", "MobilePush init was successful")
7    }
8    com.salesforce.marketingcloud.sfmcsdk.InitializationStatus.FAILURE -> {
9      Log.e("MyApp", "MobilePush failed to initialize.")
10    }
11  }
12}
7.x
1MarketingCloudSdk.init(context, config) { status ->
2  when (status.status()) {
3    InitializationStatus.Status.COMPLETED_WITH_DEGRADED_FUNCTIONALITY -> {
4      if (status.locationsError()) {
5        //Handle Google Play Services issues.
6        if (GoogleApiAvailability.getInstance().isUserResolvableError(status.playServicesStatus())) {
7          // User will likely need to update GooglePlayServices through the Play Store.
8          // Call GoogleApiAvailability.getInstance().showErrorDialogFragment(...) from Activity.
9        }
10      } else if (status.messagingPermissionError()) {
11        // User disabled location permission.
12        // Re-request permission and if granted enable desired messaging type
13      }
14    }
15    InitializationStatus.Status.SUCCESS -> Log.v("MyApp", "MobilePush init was successful")
16    InitializationStatus.Status.FAILED -> Log.e(
17      "MyApp",
18      "MobilePush failed to initialize.  Status: $status",
19        status.unrecoverableException()
20    )
21  }
22}

Troubleshoot Multiple Push SDKs 

While you can integrate multiple push SDKs into a single app, this approach can lead to complications and we can’t guarantee reliable results. The following sections highlight some considerations you must keep in mind as you develop your app with multiple push SDK integrations. Areas of concern can include registration, geolocation, and more.

Any other push provider you choose must also allow a multiple push provider implementation.

Important

Remove SenderId from SDK Initialization 

Don’t set the SenderId during the SDK’s initialization.

Important

If the SenderId is set during initialization, the SDK attempts to fetch a push token from the Firebase SDK. Doing so can lead to inconsistencies in the token that is registered with Engagement.

Handle Push Token 

Set the push token in the SDK whenever it has been retrieved or updated from the Firebase SDK.

8.x
1try {
2  FirebaseMessaging.getInstance().token.addOnCompleteListener { task ->
3    if (task.isSuccessful) {
4      SFMCSdk.requestSdk { sdk ->
5        sdk.mp {
6          it.pushMessageManager.setPushToken(task.result)
7        }
8      }
9    }
10  }
11} catch (e: java.lang.Exception) {
12  Log.e(TAG, "Failed to retrieve InstanceId from Firebase.")
13}
7.x
1try {
2  FirebaseMessaging.getInstance().token.addOnCompleteListener { task ->
3    if (task.isSuccessful) {
4      MarketingCloudSdk.requestSdk { sdk ->
5        sdk.pushMessageManager.setPushToken(task.result)
6      }
7    }
8  }
9} catch (e: Exception) {
10  Log.e(TAG, "Failed to retrieve InstanceId from Firebase.")
11}

Not updating the SDK with a new push token when onNewToken is triggered prevents Engagement from sending push messages to your application.

Important

Handle Push Message 

When a push message is received from Engagement, pass it into the SDK to be presented.

8.x
1class MessagingService : FirebaseMessagingService() {
2  override fun onMessageReceived(message: RemoteMessage) {
3
4    if (PushMessageManager.isMarketingCloudPush(message)) {
5      SFMCSdk.requestSdk { sdk ->
6        sdk.mp {
7          it.pushMessageManager.handleMessage(message)
8        }
9      }
10    } else {
11      //Not from Marketing Cloud Engagement. Must handle yourself.
12    }
13  }
14}
7.x
1class MessagingService : FirebaseMessagingService() {
2  override fun onMessageReceived(message: RemoteMessage) {
3
4    if (PushMessageManager.isMarketingCloudPush(message)) {
5      MarketingCloudSdk.requestSdk { sdk ->
6        sdk.pushMessageManager.handleMessage(message)
7      }
8    } else {
9      //Not from Engagement.  Must handle yourself.
10    }
11  }
12}

Messages passed into handleMessage that aren’t from Engagement are ignored.

Important

Troubleshoot Push Delivery Analytics 

When encountering issues with push delivery analytics, consider these common problems and their resolutions:

Missing Push Delivery Analytics

  • First confirm that push delivery analytics is enabled in the Engagement UI. If disabled, your Engagement admin must enable it for the SDK to send delivery events.
  • If push delivery events and analytics aren’t appearing in your Engagement reports, verify whether you’re sending supported message types. Push delivery analytics are only available for Push and Alert + Inbox messages. In-App, Geofence, Proximity, and silent pushes aren’t tracked.
Multiple Push Provider Implementation Problems

If you’re using multiple push providers, ensure that no fields or keys are removed from the push payload before passing it to SFMC PushMessageManager.handleMessage. The SDK requires the complete push payload to process push delivery events. If any keys or fields are missing, the SDK logs a warning and doesn’t process the push delivery event.