在聊天应用程序中使用什么通知系统?

我正在使用Android中的Firebase数据库开发聊天应用程序。

我已经完成了核心(聊天和用户列表活动),但我还没有做通知系统。

我想实现谷歌FCM,因为我正在使用firebase,但我发现它有一个漏洞,因为我似乎无法处理传递给不在前台的iOs应用程序的所有通知。

如数据通知文档中所示

在iOS上,FCM存储消息并仅在应用程序位于前台并建立FCM连接时传递消息。 在Android上,客户端应用程序在onMessageReceived()中接收数据消息,并可以相应地处理键值对。

即使应用程序处于后台,我也需要捕获数据通知,我需要特别说明,因为我想在应用程序图标上更新我的徽章计数器,以便让用户知道他有多少未读消息。

我现在尝试OneSignal解决方案即使在后台也可以接收通知,它是免费的并且与GCM接口。 我很遗憾没有留在Google,但如果我无法使用FCM更新徽章数量,我必须向另一方寻求帮助。

任何考虑将不胜感激。

事实上,OneSignal探索了一种实现此行为的function。 它是通知有效 content-available中的content-available值。 好消息是iOS 7及以上版本。 因此,如果您可以在FCM中自定义有效负载,则可以。 只需在后台模式下激活remote-notification并在application(didReceiveRemoteNotification:fetchCompletionHandler:)处理徽章更新application(didReceiveRemoteNotification:fetchCompletionHandler:)即可开始使用。

由于FirebaseMessagingService正在运行,因此当app处于后台或未运行时,使用以下代码从服务器获取徽章。

如果您对应用程序图标上的显示徽章有任何疑问而不是评论它,因为就在昨天我确实在应用程序图标上显示徽章。

 public class Custom_FirebaseMessagingService extends FirebaseMessagingService { private static final String TAG = "FirebaseMsgService"; //private Activity strPushClickDesti; String activityName; @Override public void zzm(Intent intent) { Log.i("uniqbadge", "zzm"); Set keys = intent.getExtras().keySet(); for (String key : keys) { try { Log.i("uniq", " " + key + " " + intent.getExtras().get(key)); if (key.equals("badge")) { String cnt = intent.getExtras().get(key).toString(); int badgeCount = Integer.valueOf(cnt); Log.i("uniq", " badge count " + badgeCount); ShortcutBadger.applyCount(this, badgeCount); Log.i("uniq", " " + "end"); } } catch (Exception e) { Log.i("uniqbadge", "zzm Custom_FirebaseMessagingService" + e.getMessage()); } } super.zzm(intent); }