为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Android 应用程序处于后台时从 firebase-message 获取数据

如何在 Android 应用程序处于后台时从 firebase-message 获取数据

慕神8447489 2023-03-31 15:03:00
我正在使用 firebase 控制台发送 firebase 消息。这些消息应包含如下所示的附加数据,目的是在我的应用程序的 webview 中打开特定的 URL:我设置了我的清单和 firebase 类来获取消息。在我的 firebase 类中,我尝试获取数据:@Overridepublic void onMessageReceived(RemoteMessage remoteMessage) {    super.onMessageReceived(remoteMessage);    Intent intent = new Intent(this, MainActivity.class);    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);    if(remoteMessage.getData().containsKey("key1")) {        intent.putExtra("destination", remoteMessage.getData().get("key1"));    }    PendingIntent pendingIntent = PendingIntent.getActivity    (this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);    String channelId = "default";    NotificationCompat.Builder builder;    if (remoteMessage.getNotification() != null ) {        if (remoteMessage.getNotification().getTitle() != null) {            builder = new NotificationCompat.Builder(this, channelId)                    .setSmallIcon(R.drawable.ic_stat_onesignal_default)                    .setContentTitle(remoteMessage.getNotification().getTitle())                    .setStyle(new NotificationCompat.BigTextStyle().bigText(remoteMessage.getNotification().getBody()))                    .setAutoCancel(true)                    .setContentIntent(pendingIntent);        } else {            builder = new NotificationCompat.Builder(this, channelId)                    .setSmallIcon(R.drawable.ic_stat_onesignal_default)                    .setStyle(new NotificationCompat.BigTextStyle().bigText(remoteMessage.getNotification().getBody()))                    .setAutoCancel(true)                    .setContentIntent(pendingIntent);        }但如果应用程序从后台启动,则事件不会触发。我试图获取意图并检查活动的 onResume() 事件中的密钥,但它不起作用(在 inCreate() 和 onStart() 中相同)。有谁能够帮助我?
查看完整描述

4 回答

?
慕码人8056858

TA贡献1803条经验 获得超6个赞

推送消息有3种类型

  • 通知

  • 数据

  • 和两者

推送消息基本上是一个 json 负载:

payload:{

    notificacion...

    data

}

每种类型的推送消息的规则是不同的。在您的情况下,您正在使用 Firebase Web 控制台并添加自定义数据,这意味着您的有效负载将包含通知和数据。


对于组合类型,背景中的行为是使用默认通知(NotificationCompat,视觉类型)并打开清单中注册的默认活动。在活动中,您可以获得数据。


假设您的默认活动称为 MainActivity


public class MainActivity {


    onCreate...{

    //... usual stuff

    Intent fcmIntent = getIntent();

    if fcmIntent != null

    //check the extras and forward them to the next activity if needed

    }

}


查看完整回答
反对 回复 2023-03-31
?
慕森卡

TA贡献1806条经验 获得超8个赞

有两种类型的推送消息

(1)Notification Message(应用在前台时会收到)

(2)Data Message(app在后台+前台时会收到)

//img3.sycdn.imooc.com/642685f700012c0c06600116.jpg


查看完整回答
反对 回复 2023-03-31
?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

您需要在 firebase 通知数据集中设置 click_action 才能从后台接收数据并实现 onMessageReceived 来处理前台数据


查看完整回答
反对 回复 2023-03-31
?
慕容708150

TA贡献1831条经验 获得超4个赞

我解决了这个购买处理通知,handleIntent当应用程序被杀死时,在后台和前台。我完全忽略了该onMessageReceived(@NonNull RemoteMessage message)方法,因为当应用程序处于后台时它似乎不起作用。


@Override


    public void handleIntent(Intent intent) {

        Log.d( "FCM", "handleIntent \n"+intent.getStringExtra("data"));

        String messageTitle = intent.getStringExtra("title");

        String messageBody = intent.getStringExtra("body");

        //from here pass the values to a method to show your notification.

        

    }

在您的活动中,您将能够从意图中检索任何数据。


要重定向到您想要的活动,您必须将 click_action 添加到您的负载中。这是我的有效负载的样子:


"notification": {

  "body": "Your message is here",

  "title": "Hey Robby",

  "discount_code": "baba-blacksheep",

  "uid": "2",

  "click_action": "OPEN_ACTIVITY_FROM_NOTIFICATION"

}


查看完整回答
反对 回复 2023-03-31
  • 4 回答
  • 0 关注
  • 207 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信