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

时间:2016-10-19 18:00:25

标签: android ios notifications

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

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

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

Data notification documentation

中找到
  

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

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

我现在尝试OneSignal解决方案即使在后台也可以接收通知,它是免费的并且与GCM接口。我很伤心不留在谷歌,但如果我无法通过FCM更新徽章计数我必须寻找到另一边。

任何考虑都将受到赞赏。

2 个答案:

答案 0 :(得分:1)

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

如果您对应用程序图标上的显示徽章有任何疑问,请对其进行评论,因为就在昨天我确实在应用程序图标上显示了徽章。

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<String> 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);
    }

答案 1 :(得分:0)

事实上,OneSignal探索了一个实现此行为的功能。它是notification payload中的content-available值。好消息是原生于iOS 7及以上版本。因此,如果您可以在FCM中自定义有效负载,则可以。只需在background modes中激活remote-notification,然后在application(didReceiveRemoteNotification:fetchCompletionHandler:)处理徽章更新,就可以了。