当前位置: 首页 > 知识库问答 >
问题:

当android应用程序从最近的任务栏中删除时,Firebase(FCM)通知不会出现

王英奕
2023-03-14

我通过自己的webservice用PHP发送Firebase通知,如下所示。

$url = 'https://fcm.googleapis.com/fcm/send';
        $fields = array(
             'registration_ids' => $tokens,
             'data' => $message
            );
        $headers = array(
            'Authorization:key = SERVER_KEY ',
            'Content-Type: application/json'
            );

1.当应用程序在前台和后台没有任何问题时,通知就会出现,但如果我从最近的托盘中删除了应用程序,那么通知就不会出现,我必须要处理这个问题,有什么解决方案吗?(就像Whatsup通知显示的所有场景,甚至我强制停止了这个应用程序的设置)

2.一旦我收到通知,从“OnMessageReceived”如何将这些消息、正文内容传递给我的活动/片段?

public class MyFirebaseMessagingService extends FirebaseMessagingService {
    private static final String TAG = "MsgService";
    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        Log.d(TAG, "From: " + remoteMessage.getFrom());
        Log.d(TAG, "Data Payload : " + remoteMessage.getData());
        sendNotification(remoteMessage.getData().get("message"));
    }
    private void sendNotification(String messageBody) {
        Intent intent = new Intent(this, MainActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent,
                PendingIntent.FLAG_ONE_SHOT);
        Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
        NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
                .setSmallIcon(R.mipmap.ic_launcher)
                .setContentTitle("Firebase Push Notification")
                .setContentText(messageBody)
                .setAutoCancel(true)
                .setSound(defaultSoundUri)
                .setContentIntent(pendingIntent);
        NotificationManager notificationManager =
                (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.notify(0, notificationBuilder.build());
    }
} 
    null

成功的设备:(通知是从最近的任务栏中删除后发出的)

  • HTC One X(4.2果冻豆)
  • 三星galaxy grand prime(4.4 Kitkat)

共有1个答案

单于钊
2023-03-14

1.当应用程序在前台和后台没有任何问题时,通知就会出现,但如果我从最近的托盘中删除了应用程序,那么通知就不会出现,我必须要处理这个问题,有什么解决方案吗?(就像Whatsup通知显示的所有场景,甚至我强制停止了这个应用程序的设置)

根据您的代码,您必须在RemoteMessage.getNotification().getBody()上获得空指针异常,因为您不是在发送通知,而是在发送curl请求中的数据负载。根据我的个人经验,您刚才提到的问题在Android Kitkat或以下设备中尤为常见。在Lollipop或更高的时候,Firebase push似乎可以很好地工作。

2.一旦我收到通知,从“OnMessageReceived”如何将这些消息、正文内容传递给我的活动/片段?

您可以从OnMessageReceived()发出广播,并在活动中注册一个Braodcast接收器,在广播意图中发送数据。示例代码:

private BroadcastReceiver receiver;

@Overrride
public void onCreate(Bundle savedInstanceState){

  // your oncreate code

  IntentFilter filter = new IntentFilter();
  filter.addAction("SOME_ACTION");

  receiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
      String message = intent.getStringExtra("message");
    }
  };
     registerReceiver(receiver, filter);
}

 @Override
 protected void onDestroy() {
  if (receiver != null) {
   unregisterReceiver(receiver);
   receiver = null
  }
  super.onDestroy();
 }
public class MyFirebaseMessagingService extends FirebaseMessagingService {
    private static final String TAG = "MsgService";
    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        Log.d(TAG, "From: " + remoteMessage.getFrom());
        Log.d(TAG, "Notification Message Body: " + remoteMessage.getData());

        Intent intent=new Intent();
        intent.setAction("SOME_ACTION");
        intent.putExtra("message", remoteMessage.getNotification().getBody());
        sendBroadcast(intent);
    }
} 

3.在某些情况下,我想发送通知给所有的,而不是把所有的令牌添加到数组中。还有什么其他方法可以处理“发送给所有人”之类的事情吗?

在Firebase API中没有像“发送给所有人”这样的东西,唯一的方法是使用Firebase控制台,它有自己的问题要处理,比如白色图标问题,并撕开通知的自定义参数。

 类似资料:
  • 手机是OnePlus3T。oxygen OS版本为4.1.6。当应用程序在前台、后台但在内存中时,应用程序会收到通知。但当应用程序不在内存中(即从内存中刷出)时不会收到通知。其他安装了android操作系统版本4.2、5.1.1、6.0.1、7.1.1的设备也会收到通知,即使应用程序不在内存中。 好心建议点什么。提前道谢。

  • 无错误FCM工作良好,当应用程序打开,如果关闭或刷掉,通知将不会触发。

  • 我使用的是FCM云消息,当应用程序在后台但未被杀死或应用程序正在运行时,它工作得很好。一旦应用程序被停止或从最近的应用程序杀死,它不会收到任何通知。 即使是在应用程序启动后,它也不会收到旧的消息。 用于发送通知的服务器端代码 firebase服务和通知的清单代码 感谢任何帮助。

  • 问题内容: 在android中,顶部的通知栏大多数时候都有阴影。但是,有时,例如当应用程序显示其标题栏时,或者在某些其他情况下(例如在Twitter应用程序或市场中),阴影效果消失了。我的猜测是,当下面的内容可以滚动时,阴影应该存在。 但是,在我的应用中,下面的内容无法滚动,我认为徽标顶部的阴影看起来很糟。 有谁知道如何禁用它? 问题答案: 该是你的影子,并将其设置为你的主题将消除它。您可以在Go

  • 我观察到,如果应用程序从多任务托盘停止,就会出现这种情况。我该如何解决这个问题? 更新:我观察到当我从任务托盘关闭应用程序时,我的应用程序在应用程序管理器中被强制停止。而当我从任务托盘关闭Whatsapp时,它仍然没有被强制停止。WhatsApp是如何处理的?

  • 我使用的是OnePlus3(7.1.1)有一个问题,当应用程序从最近的任务中被刷掉(变死),然后如果我从Firebase控制台推送一个通知,它将不会收到任何通知时,它不会收到通知。 有解决办法吗?vivo、oppo、虎外、秀米、雷迪米、米都有同样的错误 和同样的代码工作与索尼,三星摩托。!