簡體   English   中英

在Android中-當應用程序處於前台時如何防止Firebase推送通知?

[英]In android - How to prevent Firebase push notification when app is in foreground?

我在onMessageReceived(RemoteMessage remoteMessage)做了一個推送通知服務,並在onMessageReceived(RemoteMessage remoteMessage)很好地發送了數據通知並接收了它,

我很清楚何時發送哪種類型的通知,這就是為什么我在應用被終止時使用數據通知來獲取它的原因。

但就我而言, 我不想在應用程序處於前景模式時發送任何通知,因為當應用程序處於前景模式時, onMessageReceived(RemoteMessage remoteMessage)將始終被調用。

如何預防這種情況?

我的通知格式是這樣。

{
   "to" : "cGPhwcLbe5Y:APA91bFVAR6n9GxbDBovzd8X9nMBvKZ4Z098FzmkMGGUAuMhdps4uEof8mppUh7vrFTAsdFGzyurHa4gQ1nWgP-ncaN53ZtHziLi8YdHMEOGvtx6pA7ttCY5QhE5XKdFZ2QfX",
   "data" : {
    "message":"hi"
 }

}

您可以從服務器發送兩種不同類型的消息。

在此處輸入圖片說明

其中, 通知消息Firebase本身處理。

數據消息是自定義有效負載,您需要在其中管理自己的通知。

因此您需要在服務器腳本中使用數據密鑰。

然后只需從此答案中檢查哪個應用程序正在頂層堆棧中運行:https://stackoverflow.com/a/27689352/942224

private boolean isAppInForground(Context context, String packageName){
  String[] activePackages;
  ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
   activePackages = getActivePackages(am);

   if (activePackages != null) {
       return activePackages[0].equals(packagName)
   }
    return false;
}



private String[] getActivePackages(ActivityManager mActivityManager) {
final Set<String> activePackages = new HashSet<>();
final List<ActivityManager.RunningAppProcessInfo> processInfos = mActivityManager.getRunningAppProcesses();
for (ActivityManager.RunningAppProcessInfo processInfo : processInfos) {
            if (processInfo.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
                activePackages.addAll(Arrays.asList(processInfo.pkgList));
            }
        }
        return activePackages.toArray(new String[activePackages.size()]);
    }

僅當您的應用程序位於前台時,通知才會傳遞到onMessageReceived回調。 如果您的應用程序處於后台或關閉狀態,則通知中心會顯示一條通知消息。 如果要防止在應用程序處於前台時調用onMessageReceived 只需從您的應用中刪除FirebaseMessagingService

檢查文檔: 將您的第一條消息發送到后台應用程序

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM