[英]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.