代码之家  ›  专栏  ›  技术社区  ›  Omar Qadomi

FirebaseMessagingService无法在后台使用one plus 3 android oreo 8.0

  •  0
  • Omar Qadomi  · 技术社区  · 6 年前

    当应用程序未运行并从最近的应用程序列表中删除时,Firebase onMessageReceived从未调用。 我正在使用Firebase,并从服务器向我的应用程序发送数据负载通知。我曾尝试使用JobScheduler每1分钟启动一次MyFirebaseMessagingService,以防系统终止我的服务,但这种方法在1+3上对我不起作用。 我知道android对后台服务增加了限制,以优化电池使用,但这种限制会影响FCM服务吗?

    这是我的消息字符串:

    {
    "notification": {
        "title": "Hello",
        "body": "Notification",
        "badge": 1,
        "icon": "app_icon",
        "color": "#ffffff",
        "sound": "default",
        "clickAction": "home",
        "tag": "parent_ccid_6"
    },
    "message": {
        "priority": "high",
        "type": "daily_tips",
        "data": {
            "parent_ccid": "parent_ccid_6",
            "id": "2",
            "sound": "default"
        }
    },
    

    }

    这是我在舱单上的服务

     <service
            android:name=".util.FCM.MyFirebaseMessagingService"
            android:exported="false">
            <intent-filter>
                <action android:name="com.google.firebase.MESSAGING_EVENT" />
                <action android:name="android.intent.action.BOOT_COMPLETED" />
                <action android:name="com.google.android.c2dm.intent.RECEIVE" />
            </intent-filter>
        </service>
    
    4 回复  |  直到 6 年前
        1
  •  0
  •   Ramkumar.M    6 年前

    以上牛轧糖必须使用通知频道

    样品

            int notifyID = 1;
            String CHANNEL_ID = "my_channel_01";
             // The id of the channel.
            CharSequence name = "channel ram";
             // The user-visible name of the channel.
            String groupId = "Building654651";
            CharSequence groupName = "BuilgingHub123";
            int importance = 0;
                importance = NotificationManager.IMPORTANCE_HIGH;
                NotificationChannel mChannel = new NotificationChannel(CHANNEL_ID, name, importance);
     Notification notification = new Notification.Builder(this)
                    .setContentTitle(getString(R.string.app_name))
                    .setContentText(messageBody)
                    .setSmallIcon(R.drawable.ic_notifi).setColor(Color.parseColor("#FFA23B"))
                    .setChannelId(CHANNEL_ID)
                    .build();
      NotificationManager mNotificationManager =
                    (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
            mNotificationManager.createNotificationChannelGroup(new NotificationChannelGroup(groupId, groupName));
            mNotificationManager.createNotificationChannel(mChannel);
                mNotificationManager.notify(notifyID, notification);
    
        2
  •  0
  •   kishna.147    6 年前

    当应用程序位于后台时,根据android文档,永远不会调用onMessageReceived。 链接:- https://firebase.google.com/docs/cloud-messaging/android/receive

    当应用程序位于后台时,通知将发送到设备的系统托盘,并将调用应用程序的默认意图(即启动器屏幕),您必须在此屏幕上处理该通知。

    另一种解决方案是,您可以从有效负载中删除“notification”关键字,然后当您的应用程序位于后台且onMessageReceived将被调用时,您将能够收到通知。

        3
  •  0
  •   Omar Qadomi    6 年前

    我没有找到任何通过代码解决此问题的解决方案。 恢复通知的唯一方法是转到设置并从电池优化设置中选择“不优化”,它在后台工作正常,否则不会触发通知处理程序。 我在One plus 3上安装的所有应用程序都遇到了这个问题。

        4
  •  0
  •   user1289408 user1289408    4 年前

    尝试 android:exported= “” 真的 “。在android清单文件中。