OneNextWay
OneNextWay

Reputation: 41

How to open app when notification received without user interaction In React Native

How to open app when notification received without user interaction

I am using react native push notification library for Push notification. App should auto start from background and quit state without user interaction and getInitialNotification method should be called. I want to invoke app on specific notification type.

===============================================

File: RNPushNotificationHelper

===============================================



public void invokeApp(Bundle bundle) {

    String packageName = context.getPackageName();
    Intent launchIntent = context.getPackageManager().getLaunchIntentForPackage(packageName);
    String className = launchIntent.getComponent().getClassName();

    try {
        Class<?> activityClass = Class.forName(className);
        Intent activityIntent = new Intent(context, activityClass);

        if(bundle != null) {
            activityIntent.putExtra("notification", bundle);
        }

        activityIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

        context.startActivity(activityIntent);
    } catch(Exception e) {
        Log.e(LOG_TAG, "Class not found", e);
        return;
    }
}

===============================================

File: RNReceivedMessageHandler

===============================================


 // If notification ID is not provided by the user for push notification, generate one at random
 if (bundle.getString("id") == null) {
    SecureRandom randomNumberGenerator = new SecureRandom();
    bundle.putString("id", String.valueOf(randomNumberGenerator.nextInt()));
}

Application applicationContext = (Application) context.getApplicationContext();

RNPushNotificationConfig config = new RNPushNotificationConfig(mFirebaseMessagingService.getApplication());  
RNPushNotificationHelper pushNotificationHelper = new RNPushNotificationHelper(applicationContext);

boolean isForeground = pushNotificationHelper.isApplicationInForeground();

RNPushNotificationJsDelivery jsDelivery = new RNPushNotificationJsDelivery(context);
bundle.putBoolean("foreground", isForeground);
bundle.putBoolean("userInteraction", false);
jsDelivery.notifyNotification(bundle);

// If contentAvailable is set to true, then send out a remote fetch event
if (bundle.getString("contentAvailable", "false").equalsIgnoreCase("true")) {
    jsDelivery.notifyRemoteFetch(bundle);
}

Log.v(LOG_TAG, "invokeApp: " + bundle);
pushNotificationHelper.invokeApp(bundle);

if (config.getNotificationForeground() || !isForeground) {
    Log.v(LOG_TAG, "sendNotification: " + bundle);
    pushNotificationHelper.sendToNotificationCentre(bundle);
}

But It does not seem to work in Background OR Quit state. I checked logcat it showing logs when in foreground.

Upvotes: 4

Views: 2088

Answers (1)

m123
m123

Reputation: 3152

Notification actions

I am assuming that this is not possible because it would be a major security gap.

In the Android docs, only the tap on the notification and notification actions are listed as options for actions in the background. The section.

Restrictions bypasses

There is a so-called "Restrictions on starting activities from the background" from Android 10 (API level 29).

However, these have several exceptions. I think the most interesting for you are these:

  • The app receives a notification PendingIntent from the system. In the case of pending intents for services and broadcast receivers, the app can start activities for a few seconds after the pending intent is sent.

  • The app has been granted the SYSTEM_ALERT_WINDOW permission by the user.

Upvotes: 1

Related Questions