Custom handling for push receipts, opens, dismissals, and key-value pairs via Broadcast Receiver
Using a custom BroadcastReceiver for push notifications has been deprecated. Use  subscribeToPushNotificationEvents() instead.
Braze also broadcasts custom intents when push notifications are received, opened, or dismissed. If you have a specific use case for these scenarios (such as the need to listen for custom key-value pairs or proprietary handling of deep links), you will need to listen for these intents by creating a custom BroadcastReceiver.
Step 1: Register your BroadcastReceiver
Register your custom BroadcastReceiver to listen for Braze push opened and received intents in your AndroidManifest.xml:
1
2
3
4
5
6
7
<receiver android:name="YOUR-BROADCASTRECEIVER-NAME" android:exported="false" >
  <intent-filter>
    <action android:name="com.braze.push.intent.NOTIFICATION_RECEIVED" />
    <action android:name="com.braze.push.intent.NOTIFICATION_OPENED" />
    <action android:name="com.braze.push.intent.NOTIFICATION_DELETED" />
  </intent-filter>
</receiver>
Step 2: Create Your BroadcastReceiver
Your receiver should handle intents broadcast by Braze and launch your activity with them:
- It should subclass BroadcastReceiverand overrideonReceive().
- The onReceive()method should listen for intents broadcast by Braze.- A NOTIFICATION_RECEIVEDintent will be received when a push notification arrives.
- A NOTIFICATION_OPENEDintent will be received when the user clicks a push notification.
- An NOTIFICATION_DELETEDintent will be received when a push notification is dismissed (swiped away) by the user.
 
- A 
- It should perform your custom logic for each of these cases. If your receiver will open deep links, be sure to turn off automatic deep link opening by setting com_braze_handle_push_deep_links_automaticallytofalsein yourbraze.xml.
For a detailed custom receiver example, see the following code snippets:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class CustomBroadcastReceiver extends BroadcastReceiver {
  private static final String TAG = CustomBroadcastReceiver.class.getName();
  @Override
  public void onReceive(Context context, Intent intent) {
    String pushReceivedAction = Constants.BRAZE_PUSH_INTENT_NOTIFICATION_RECEIVED;
    String notificationOpenedAction = Constants.BRAZE_PUSH_INTENT_NOTIFICATION_OPENED;
    String notificationDeletedAction = Constants.BRAZE_PUSH_INTENT_NOTIFICATION_DELETED;
    String action = intent.getAction();
    Log.d(TAG, String.format("Received intent with action %s", action));
    if (pushReceivedAction.equals(action)) {
      Log.d(TAG, "Received push notification.");
    } else if (notificationOpenedAction.equals(action)) {
      BrazeNotificationUtils.routeUserWithNotificationOpenedIntent(context, intent);
    } else if (notificationDeletedAction.equals(action)) {
      Log.d(TAG, "Received push notification deleted intent.");
    } else {
      Log.d(TAG, String.format("Ignoring intent with unsupported action %s", action));
    }
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
class CustomBroadcastReceiver : BroadcastReceiver() {
  override fun onReceive(context: Context, intent: Intent) {
    val pushReceivedAction = Constants.BRAZE_PUSH_INTENT_NOTIFICATION_RECEIVED
    val notificationOpenedAction = Constants.BRAZE_PUSH_INTENT_NOTIFICATION_OPENED
    val notificationDeletedAction = Constants.BRAZE_PUSH_INTENT_NOTIFICATION_DELETED
    val action = intent.action
    Log.d(TAG, String.format("Received intent with action %s", action))
    when (action) {
      pushReceivedAction -> {
        Log.d(TAG, "Received push notification.")
      }
      notificationOpenedAction -> {
        BrazeNotificationUtils.routeUserWithNotificationOpenedIntent(context, intent)
      }
      notificationDeletedAction -> {
        Log.d(TAG, "Received push notification deleted intent.")
      }
      else -> {
        Log.d(TAG, String.format("Ignoring intent with unsupported action %s", action))
      }
    }
  }
  companion object {
    private val TAG = CustomBroadcastReceiver::class.java.name
  }
}
With notification action buttons, BRAZE_PUSH_INTENT_NOTIFICATION_OPENED intents fire when buttons with opens app or deep link actions are clicked. Deep link and extras handling remains the same. Buttons with close actions don’t fire BRAZE_PUSH_INTENT_NOTIFICATION_OPENED intents and dismiss the notification automatically.
Step 3: Access custom key-value pairs
Custom key-value pairs sent either via the dashboard or the messaging APIs will be accessible in your custom broadcast receiver for whatever purpose you choose:
1
2
3
4
5
6
7
8
// intent is the Braze push intent received by your custom broadcast receiver.
String deepLink = intent.getStringExtra(Constants.BRAZE_PUSH_DEEP_LINK_KEY);
// The extras bundle extracted from the intent contains all custom key-value pairs.
Bundle extras = intent.getBundleExtra(Constants.BRAZE_PUSH_EXTRAS_KEY);
// example of getting specific key-value pair from the extras bundle.
String myExtra = extras.getString("my_key");
1
2
3
4
5
6
7
8
// intent is the Braze push intent received by your custom broadcast receiver.
val deepLink = intent.getStringExtra(Constants.BRAZE_PUSH_DEEP_LINK_KEY)
// The extras bundle extracted from the intent contains all custom key-value pairs.
val extras = intent.getBundleExtra(Constants.BRAZE_PUSH_EXTRAS_KEY)
// example of getting specific key-value pair from the extras bundle.
val myExtra = extras.getString("my_key")
For documentation on Braze push data keys, refer to the Android SDK.
 Edit this page on GitHub
   Edit this page on GitHub