Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/211.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在聊天应用程序中使用什么通知系统?_Android_Ios_Notifications - Fatal编程技术网

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

Android 在聊天应用程序中使用什么通知系统?,android,ios,notifications,Android,Ios,Notifications,我正在用Android中的Firebase数据库开发一个聊天应用程序 我已经完成了核心(聊天和用户列表活动),但还没有完成通知系统 我想在使用firebase时实现Google FCM,但我发现了一个漏洞,因为我似乎无法处理所有发送到不在前台的iOs应用程序的通知 正如在 在iOS上,FCM存储消息并仅在应用程序位于前台且已建立FCM连接时发送消息。在Android上,客户端应用程序在onMessageReceived()中接收数据消息,并可以相应地处理键值对 我需要捕捉数据通知,即使应用程序在

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

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

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

正如在

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

我需要捕捉数据通知,即使应用程序在后台,我也需要这样做,因为我想更新应用程序图标上的徽章计数器,让用户知道他有多少未读消息

我现在尝试的解决方案可以收到通知,即使在后台,它是免费的,并与GCM接口。我很难过不能和谷歌呆在一起,但是如果我不能用FCM更新徽章数量的话,我就得找另一边


任何考虑都将不胜感激。

事实上,OneSignal开发了一个功能来实现此行为。它是中可用的
内容
值。好消息是,这是iOS 7及以上版本所固有的。因此,如果您可以在FCM中自定义有效负载,这是可能的。只要在中激活
远程通知
并在中处理徽章更新,您就可以开始了。

当应用程序处于后台或未运行时,使用以下代码从服务器获取徽章,因为您的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);
    }
公共类自定义\u FirebaseMessagingService扩展FirebaseMessagingService{
私有静态最终字符串TAG=“FirebaseMsgService”;
//私人活动strPushClickDesti;
字符串activityName;
@凌驾
公共无效zzm(意向){
Log.i(“uniqbadge”、“zzm”);
Set keys=intent.getExtras().keySet();
用于(字符串键:键){
试一试{
Log.i(“uniq”,“”+key+“”+intent.getExtras().get(key));
if(钥匙相等(“徽章”)){
字符串cnt=intent.getExtras().get(key.toString();
int badgeCount=整数.valueOf(cnt);
Log.i(“uniq”、“徽章计数”+徽章计数);
ShortcutBadger.applyCount(这个,badgeCount);
Log.i(“uniq”和“+”end”);
}
}捕获(例外e){
Log.i(“uniqbadge”、“zzm Custom_FirebaseMessagingService”+e.getMessage());
}
}
super.zzm(意图);
}

但OneSignal有完全相同的限制,因为这不是谷歌的错,而是苹果的设计决定。在iOS 9之前,你根本无法在后台处理收到的远程通知。只有在新的iOS 10中,苹果才允许这样做。此外,当通知到达时,系统会自动更新徽章。OSHandleNotificationR当应用程序收到通知时调用eceivedBlock。注意:这仅在应用程序处于焦点时调用。如果你需要在应用程序处于后台时调用此函数,以便在发送通知时将内容设置为true。-我只需要使用此功能进行徽章计数,如果fcm默认提供此功能,我可以继续使用。什么zzz()方法到底做了什么?