Handling push notifications elegantly.

Push notifications help keep your customers up to date on information, but when the number of notifications is huge, the receivers may discard all the notifications together. This makes your customers miss important updates. In terms of providing the latest information to the customer, notifications with old information become obsolete and are to be discarded. 

A collapsible message is a message that may be replaced by a new message if it is yet to be seen or acted upon by the customer. Using the collapse key feature, you can overwrite the last update to the customer with a latest update. 

The following are some possible use-cases where a collapsible message is useful:

  • Increase your sales by updating your customers with up-to-date offer details.
  • Provide latest updates on election results.
  • Keep updating your customer with the latest information on the Weather updates.
  • Update sports fans with the latest scores.
  • Update the latest order status to your customers for a hassle-free delivery.

Platform-based implementation

APNS supports identifying multiple notifications into one single notification using the collapse identifier. Notifications with the same collapse identifier will only display the latest, and the older ones are discarded. This can be achieved by sending settings as part of the payload. 

Android does not support this feature, but app implementation can be customized to achieve this feature in Android. 

This blog provides the details of how it can be achieved in both the platforms.

Implement collapsing notifications in an iOS app

IBM Cloud Push Notifications supports this with the payload key apnsCollapseId. The following is a sample payload for sending a notification with the apnsCollapseId:

{
    "message":{
        "alert":"Build is successful "
    },
    "settings":{
        "apns":{
            "title":"new Status for the BuildId: #2345w",
           "apnsCollapseId":"CollapseId123"
        }
    }
}

This sample app displays the notifications on build status. Two notifications are sent to the iOS App about the status of a build with the same apnsCollapseId.  

Since the second notification also has the same apnsCollapseId and the user has not yet acted upon the notification, the old notification is replaced by the new one, and the user is displayed with only the new notification in the notification center. 

Implement collapsing notifications in an Android app

By default, Android does not support collapsing the notifications, but the same result can be achieved by custom implementation. 

Update the androidmanifest.xml file with the following. This helps override the Intent service:

<service android:exported="true" android:name=".MessageIntentServiceOne">
     <intent-filter>
          <action android:name="com.google.firebase.MESSAGING_EVENT"/>
     </intent-filter>
</service>

This MessageIntentServiceOne is called when a new notification arrives for the app:

public class MessageIntentServiceOne extends MFPPushIntentService {

    @Override
    public void onMessageReceived(RemoteMessage message) {

        String from = message.getFrom();

        Map<String, String> data = message.getData();
        JSONObject dataPayload = new JSONObject(data);

        MFPInternalPushMessage recMessage = new MFPInternalPushMessage(dataPayload);
        int collapseid = -1;
        JSONObject payload = null;
        try {
            payload = new JSONObject(recMessage.getPayload());
            if(payload != null && payload.has("collapseId")) {
                collapseid = payload.getInt("collapseId");
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }

        if(collapseid != -1 ) {
            onNotificationReceived(data, collapseid);
        } else {
            super.onMessageReceived(message);
        }
    }
}

MessageIntentServiceOne.onMessageReceived is triggered when a new notification arrives. This method reads the collapseId from the payload, and based on the collapseId, replaces the old notification so that only the latest notification is displayed to the customer.

The following is a sample payload for sending a notification with the collapseId:

{ 
   "message":{ 
      "alert":"Build is successful "
   },
   "settings":{ 
      "apns":{ 
         "title":"new Status for the BuildId: #2345w",
         "apnsCollapseId":"CollapseId123"
      },
      "gcm":{ 
         "androidTitle":"new Status for the BuildId: #2345w",
         "payload":{ 
            "collapseId":"CollapseId123"
         }
      }
   }
}

Below are how the notifications are replaced in the Android notification center:

Note: collapseKey settings supported by IBM Cloud Push Notifications for Android are applied only for dozed notifications; normal notifications will not support this feature.

Resources

More from Announcements

Success and recognition of IBM offerings in G2 Summer Reports  

2 min read - IBM offerings were featured in over 1,365 unique G2 reports, earning over 230 Leader badges across various categories.   This recognition is important to showcase our leading products and also to provide the unbiased validation our buyers seek. According to the 2024 G2 Software Buyer Behavior Report, “When researching software, buyers are most likely to trust information from people with similar roles and challenges, and they value transparency above other factors.”  With over 90 million visitors each year and hosting more than 2.6…

Manage the routing of your observability log and event data 

4 min read - Comprehensive environments include many sources of observable data to be aggregated and then analyzed for infrastructure and app performance management. Connecting and aggregating the data sources to observability tools need to be flexible. Some use cases might require all data to be aggregated into one common location while others have narrowed scope. Optimizing where observability data is processed enables businesses to maximize insights while managing to cost, compliance and data residency objectives.  As announced on 29 March 2024, IBM Cloud® released its next-gen observability…

Unify and share data across Netezza and watsonx.data for new generative AI applications

3 min read - In today's data and AI-driven world, organizations are generating vast amounts of data from various sources. The ability to extract value from AI initiatives relies heavily on the availability and quality of an enterprise's underlying data. In order to unlock the full potential of data for AI, organizations must be able to effectively navigate their complex IT landscapes across the hybrid cloud.   At this year’s IBM Think conference in Boston, we announced the new capabilities of IBM watsonx.data, an open…

IBM Newsletters

Get our newsletters and topic updates that deliver the latest thought leadership and insights on emerging trends.
Subscribe now More newsletters