活动被杀死时未调用MyFirebaseMessagingService

时间:2017-08-22 20:27:46

标签: android firebase android-activity push-notification firebase-notifications

当应用程序处于活动状态时,一切正常运行,但是当没有活动正在运行时,我仍然会通过firebase通知收到 app_name 正文的通知,并打开MainActivity。这是我的MyFirebaseMessagingService类: - 我看到了一个similar question,但在我的情况下它并没有帮助我。

public class MyFirebaseMessagingService extends FirebaseMessagingService {

    @Override
public void onMessageReceived(RemoteMessage remoteMessage) {

    if(remoteMessage.getNotification()!=null){
        if(DictionarySscWords.send_notifications) { //tried removing this condition but same result.
            sendnoti(remoteMessage.getNotification().getBody());
        }
    }
}

private void sendnoti(String body) {
   Intent i1=new Intent(this,MainActivity.class);
    i1.putExtra("word", body);
    i1.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    PendingIntent pi=PendingIntent.getActivity(this,0,i1,PendingIntent.FLAG_CANCEL_CURRENT);
    Uri ns=RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
    NotificationCompat.Builder nb=new NotificationCompat.Builder(this).setSmallIcon(R.drawable.heart)
            .setContentTitle("Word Of the Day")
            .setContentText(body).setSmallIcon(R.drawable.heart)
            .setAutoCancel(true)
            .setSound(ns)
            .setContentIntent(pi);
    NotificationManager notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
    notificationManager.notify(0,nb.build());
}

}

当应用程序处于活动状态时

enter image description here

当没有活动正在运行时

enter image description here 还试图通过AVD但没有错误。
我很困惑如何在不通过这个类的情况下创建通知,好像这被称为不同的值将在这里填充。
感谢

1 个答案:

答案 0 :(得分:1)

正如Firebase Documentation所说:

  

通知邮件在发送到通知托盘时   应用程序在后台。对于前台应用程序,将处理邮件   通过这些回调:

     

DidReceiveRemoteNotification:在Android上的iOS OnMessageReceived()上。   数据包中的通知密钥包含通知。

如果您使用基于message的通知,那么只有当您的应用程序位于前台时才会处理,否则,Firebase将处理它们。

基于message的通知示例:

{
    "to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
    "notification" : {
      "body" : "great match!",
      "title" : "Portugal vs. Denmark",
      "icon" : "myicon"
    }
  }

如果您想要处理所有通知,如果应用程序位于前台或后台,则需要独立处理,您需要开始根据data发送推送通知。例如:

{
   "to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
   "data" : {
     "Nick" : "Mario",
     "body" : "great match!",
     "Room" : "PortugalVSDenmark"
   },
 }