Android - 当应用处于后台但在前台正常工作时,Firebase通知无法打开目标活动

时间:2017-04-11 11:56:59

标签: android firebase notifications firebase-cloud-messaging

我尝试过stackoverflow的一些解决方案。但在我的情况下不能正常工作。 以下是我的MyFirebaseMessagingService课程,其中包含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());

    }
}

以下是我的AndroidManifest.xml代码。

<?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>

我已经尝试了一些解决方案但不适用于我的情况。当应用程序是前台但不在后台工作时,一切正常。 我想在用户点击通知时打开特定的活动名称NotificationViewer.Java活动。但是,当我的应用程序处于后台时,它会继续打开我的启动器活动。

2 个答案:

答案 0 :(得分:0)

您需要在通知请求中的json有效内容中设置单击操作  &#39; click_action&#39; =&GT; &#39; YourTAG&#39;并在清单活动中应用相同的标记

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

答案 1 :(得分:0)

您最有可能使用Firebase 通知消息而不是数据消息。

如果是这种情况,使用数据 FCM消息应该可以帮到您。

可以在https://firebase.google.com/docs/cloud-messaging/concept-options

中看到
  

当您希望FCM处理代表您的客户端应用程序显示通知时,请使用通知消息。如果要在客户端应用程序上处理消息,请使用数据消息。

通知消息

当您的应用程序位于前台时,它会收到有效负载,但是当处于后台时,通知消息会被传递到通知托盘。

数据讯息: 无论是在前台还是在后台,这些都会始终传递给应用程序。

注意:仅FCM数据消息不会将您的应用程序置于前台。您将需要在接收数据消息时执行此操作的其他代码。