Android通知始终打开MainActivity

时间:2017-01-15 18:19:55

标签: android firebase android-notifications firebase-notifications

设置Firebase后,我收到使用Firebase控制台创建的通知,当我点击它时,我的应用程序会打开清单上声明的firstactivity

我想打开一个以detailactivity为父级的特定firstactivity

我的清单:

...
   <activity
        android:parentActivityName=".views.main.MainActivity"
        android:name=".views.detail.DetailActivity"
        android:screenOrientation="portrait">
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value=".views.main.MainActivity" />
    </activity>
....

我的自定义FirebaseMessagingService:

Intent i = new Intent(this, DetailActivity.class);
    Intent intent2 = new Intent(this, MainActivity.class);
    i.putExtra(ProfileDescriptionActivity.USER_ID, 14);
    TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
    stackBuilder.addParentStack(ProfileDescriptionActivity.class);
    stackBuilder.addNextIntentWithParentStack(intent2);
    stackBuilder.addNextIntent(i);
 PendingIntent pendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);

    NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
            .setAutoCancel(true)
            .setDefaults(Notification.DEFAULT_SOUND)
            .setContentTitle(title)
            .setContentText(message)
            .setSmallIcon(R.drawable.ic_notification)
            .setContentIntent(pendingIntent);

    NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
    manager.notify(0, builder.build());

如果我在应用程序关闭时收到通知,它会在通知栏中正确显示通知。但是当我点击打开时,firstactivity

当应用程序打开并收到通知时,进入通知中心会显示一个空白视图,正确打开我想要的活动。

有什么问题?感谢。

2 个答案:

答案 0 :(得分:0)

要通过FCM自动打开应用程序,您需要使用data-message,这样可以保证始终调用onMessageReceived()方法。

例如,您的有效负载可能是:

{
    "to" : "APA91bHun4MxP5egoKMwt2KZFBaFUH-1RYqx...",
    "notification" : {
      "body" : "great match!",
      "title" : "Portugal vs. Denmark",
      "icon" : "myicon"
    },
    "data" : {
      "Nick" : "Mario",
      "Room" : "PortugalVSDenmark"
    }
  }

为了测试发送此消息,您可以使用任何在线FCM测试人员,例如this

答案 1 :(得分:0)

在FCM中,如果您的应用程序位于前台,则会在 FirebaseMessagingService 中调用 onMessageReceived ,如果应用程序在后台,则会在您声明的元数据中自动显示通知强> AndroidManifest 即可。

因此,在这种情况下,您必须处理 onMessageReceived 并生成通知。

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
    // ...
}

如果要处理这两种情况,则意味着如果要处理这两种情况(前景中的背景),请不要在有效负载中发送通知对象。 例如

如果应用程序在后台,则不会调用 onMessageReceived ,如果应用程序在前台,则调用

{
    "to" : "APA91bHun4MxP5egoKMwt2KZFBaFUH-1RYqx...",
    "notification" : {
      "body" : "great match!",
      "title" : "Portugal vs. Denmark",
      "icon" : "myicon"
    },
    "data" : {
      "Nick" : "Mario",
      "Room" : "PortugalVSDenmark"
    }
}

如果应用程序位于前景且后台,则将此更改为类似于以下有效内容,并且 onMessageReceived在两种情况下都会触发只发送数据有效负载而不是通知负载。 这不能通过FirebaseDashboard完成,这只能通过firebase api来发送消息。

{
    "to" : "APA91bHun4MxP5egoKMwt2KZFBaFUH-1RYqx...",

    "data" : {
      "Nick" : "Mario",
      "Room" : "PortugalVSDenmark"
    }
}