Android - Firebase Notification not opening targeted activity when app is in background but working properly in foreground

亡梦爱人 提交于 2020-01-07 04:48:27

问题


I have tried some solution from the stackoverflow . But not working properly in my case. Below is my MyFirebaseMessagingService class which extends FirebaseMessagingService

public class MyFirebaseMessagingService   extends FirebaseMessagingService {

    String url , title , body ;

    Map<String,String> data = new HashMap<>();

    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {


        title = remoteMessage.getNotification().getTitle();
        body = remoteMessage.getNotification().getBody();

        if(remoteMessage.getData().size()>0){
            Log.d("DATA", remoteMessage.getData().toString());
            try{
                data = remoteMessage.getData();
                url = data.get("url");
            }
            catch (Exception e){
                Log.e("Error", e.toString());
            }

            showNotification(url , title , body);
        }






    }

    private void showNotification(String url, String title, String body) {
        Intent intent = new Intent(this, NotificationViewer.class);
        intent.putExtra("URL",url);
        PendingIntent pendingIntent = PendingIntent.getActivity(this,0,intent,PendingIntent.FLAG_ONE_SHOT);
        NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this) ;
        notificationBuilder.setContentTitle(title);
        notificationBuilder.setContentText(body);
        notificationBuilder.setAutoCancel(true);
        notificationBuilder.setSmallIcon(R.drawable.logo);
        notificationBuilder.setContentIntent(pendingIntent);
        NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.notify(0,notificationBuilder.build());

    }
}

Below is my AndroidManifest.xml code .

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="dcastalia.com.munshijobsportal">

    <uses-permission android:name="android.permission.CALL_PHONE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />


    <application
        android:name=".Controller.AppController"
        android:allowBackup="true"
        android:icon="@drawable/logo"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
            android:name=".activity.SplashActivity"
            android:noHistory="true"
            android:theme="@style/AppTheme.NoActionBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>


        <service android:name=".firebase.MyFirebaseInstanceIDService">
            <intent-filter>
                <action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
            </intent-filter>
        </service>
        <service android:name=".firebase.MyFirebaseMessagingService">
            <intent-filter>
                <action android:name="com.google.firebase.MESSAGING_EVENT" />
            </intent-filter>
        </service>

        <activity android:name=".activity.NotificationViewer"
            android:exported="true">
        </activity>
    </application>

</manifest>

I have tried out some solution but not working in my case. Everything is working fine when app is foreground but not working in background. I want to open a particular activity name NotificationViewer.Java activity when user click on the notification. But when my app is in background it keep opening my Launcher Activity.


回答1:


You need to set click action in your json payload in notification request 'click_action' => 'YourTAG' and apply same tag in your manifest activity

<activity
      android:name=".activity.NotificationViewer">
      <intent-filter>
             <action android:name="YourTAG" />  
             <category android:name="android.intent.category.DEFAULT"/>              
      </intent-filter>
</activity>



回答2:


You are most likely using the Firebase Notification message instead of the Data message.

If this is the case, using Data FCM message should do the trick for you.

As can be seen in https://firebase.google.com/docs/cloud-messaging/concept-options

Use notification messages when you want FCM to handle displaying a notification on your client app's behalf. Use data messages when you want to process the messages on your client app.

Notification Messages:

When your application is in the foreground, it receives the payload, but when in the background, Notification messages are delivered to the notification tray.

Data Messages: These are are always delivered to the application, regardless if it is in the foreground or in the background.

NOTE: The FCM data message alone will not bring your application in the foreground. You will need additional code that will do that upon reception of the data message.



来源:https://stackoverflow.com/questions/43345241/android-firebase-notification-not-opening-targeted-activity-when-app-is-in-bac

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!