Callbacks

Push Notification Callbacks

Follow these steps for setting up callbacks for your Flutter app using the setUpPushCallbacks method:

Step 1. Add below subscribeToPushCallbacks() method inside the class which extends state of main.dart and call it from initState()

void subscribeToPushCallbacks() {
      //Push click stream listener
      _webEngagePlugin.pushStream.listen((event) {
        String deepLink = event.deepLink;
        Map<String, dynamic> messagePayload = event.payload;
      });

      //Push action click listener
      _webEngagePlugin.pushActionStream.listen((event) {
        print("pushActionStream:" + event.toString());
        String deepLink = event.deepLink;
        Map<String, dynamic> messagePayload = event.payload;
        //Implement the code here to use deeplink
      });
  }

Step 2. Add the below code snippet inside the class which extends state of main.dart for disposing of the push streams.

//Close the streams in dispose()
  @override
  void dispose() {
    _webEngagePlugin.pushSink.close();
    _webEngagePlugin.pushActionSink.close();
    super.dispose();
  }

Let's quickly walk you through the function of each method:

Callback MethodWhat It Means
pushStreamPush Notification Clicked: The callback is invoked when a user clicks on the push notification.
pushActionStreamPush Notification CTA Clicked: The callback is invoked when a user clicks on the call to action of the push notification.

The callback is invoked when a user clicks on the primary call to action of the push notification.

👍

And you're good to go!

For Android

Callbacks will be automatically attached as expected after adding the dart changes.

For iOS

Follow these steps for setting up a Push Click callback using the pushNotificationDelegate method. This callback is invoked when the user clicks the primary call to action of the push notification.

Step 1. Add the below code snippet in the AppDelegate file for importing and defining WebEngagePlugin variable

#import <WebEngagePlugin.h>
//...

@property (nonatomic, strong) WebEngagePlugin *bridge;
import WebEngage
//...

var bridge:WebEngagePlugin? = nil

Step 2. Initialize bridge variable in didFinishLaunchingWithOptions and assign value to push notification delegate.

self.bridge = [WebEngagePlugin new];
    //For setting push click callback set pushNotificationDelegate after webengage SDK is initialised


//Assign bridge variable to push delegates
[WebEngage sharedInstance].pushNotificationDelegate = self.bridge;

//Init WebEngage
[[WebEngage sharedInstance] application:application didFinishLaunchingWithOptions:launchOptions];
bridge = WebEngagePlugin()

// Push notification delegates
WebEngage.sharedInstance().pushNotificationDelegate = self.bridge
//Initialize SDK
WebEngage.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)

👍

And you're good to go!

In-app Notification Callbacks

In-app message callbacks can help you prevent conflicts with views in your app. These callbacks can be implemented for both, your Android and iOS apps. Here's how you can configure them:

Step 1. Add the below code snippet in the AppDelegate file for importing and defining WebEngagePlugin variable

#import <WebEngagePlugin.h>
//...

@property (nonatomic, strong) WebEngagePlugin *bridge;
import WebEngage
//...

var bridge:WebEngagePlugin? = nil

Step 2. Initialize bridge variable in didFinishLaunchingWithOptions and assign value to push notification delegate.

self.bridge = [WebEngagePlugin new];
    //For setting in-app click callback set notificationDelegate while initialising WebEngage SDK
    
[[WebEngage sharedInstance] application:application didFinishLaunchingWithOptions:launchOptions notificationDelegate:self.bridge];
//Initialize SDK with in-app notification delegates

WebEngage.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions, notificationDelegate: self.bridge)

Step 3: Add the below methods in main.dart

void _onInAppPrepared(Map<String, dynamic> message) {
    print("This is a inapp Prepated callback from native to flutter. Payload " +
        message.toString());
  }
  void _onInAppClick(Map<String, dynamic> message,String s) {
    print("This is a inapp click callback from native to flutter. Payload " +
        message.toString());

  }

  void _onInAppShown(Map<String, dynamic> message) {
    print("This is a callback on inapp shown from native to flutter. Payload " +
        message.toString());
  }

  void _onInAppDismiss(Map<String, dynamic> message) {
    print("This is a callback on inapp dismiss from native to flutter. Payload " +
        message.toString());
  }

Let's quickly walk you through the function of each method:

Callback MethodWhat It Means
onInAppPreparedIn-App Notification Prepared: This callback gets triggered before the in-app message is shown to your users. It allows you to customize the UI, colors, CTAs (buttons), and content of the In-app message received from WebEngage before displaying it to your users.
onInAppShownIn-App Message Shown: This callback is invoked after the message is displayed to an active user in your app.
onInAppClickIn-app Message Clicked: This callback gets triggered when the user clicks the primary call to action button on the notification.
onInAppDismissIn-App Message Dismissed: This callback is invoked when the user dismisses the message.

Step 4: Add the below code inside initmethod() in main.dart

_webEngagePlugin.setUpInAppCallbacks(
        _onInAppClick, _onInAppShown, _onInAppDismiss, _onInAppPrepared);

AnonymousId Change Callbacks

This callback is invoked when the Anonymous ID of the user is changed and when the SDK gets initialsed.
Anonymous ID changes on logout and installations/re-installations.

For Android

Callbacks will be automatically attached as expected after adding the changes here.

For iOS

Add the below code snippet in the AppDelegate file for registering the callback if not already added.

self.bridge = [WebEngagePlugin new];
    //For setting push click callback set pushNotificationDelegate after webengage SDK is initialised


//Assign bridge variable to push delegates
[WebEngage sharedInstance].pushNotificationDelegate = self.bridge;

//Init WebEngage
[[WebEngage sharedInstance] application:application didFinishLaunchingWithOptions:launchOptions];
bridge = WebEngagePlugin()

// Push notification delegates
WebEngage.sharedInstance().pushNotificationDelegate = self.bridge

//Initialise SDK
WebEngage.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)

❗️

Warning

Assign pushNotificationDelegate before initialising the SDK as shown in above code snippet.

Dart changes

Add below code in your main.dart file.

_webEngagePlugin.anonymousActionStream.listen((event) {
      var anonymousdId = event!['anonymousUserID'];
    });

👍

And you're good to go!

Please feel free to drop in a few lines at [email protected] in case you have any further queries. We're always just an email away!