广播接收器使用什么Firebase云消息传递意图过滤器?

Jup*_*ter 3 android broadcastreceiver firebase firebase-cloud-messaging

我正在尝试让Android系统收到Firebase Cloud消息通知时运行Android BroadcastReceiver。

public class MyBroadcastReceiver extends BroadcastReceiver {

private static final String TAG = "MyBroadcastReceiver";

@Override
public void onReceive(final Context context, Intent intent) {


    Toast.makeText(context, "EVENT OCCURED", Toast.LENGTH_LONG).show();

   }
}
Run Code Online (Sandbox Code Playgroud)

在AndroidManifest中需要这样指定接收者标签:

    <receiver
        android:name=".MyBroadcastReceiver"  android:exported="true">
        <intent-filter>
            <action android:name="android.intent.action.ACTION_POWER_CONNECTED"/>
            <action android:name="com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>
    </receiver>
Run Code Online (Sandbox Code Playgroud)

如您在上面的清单中所见,我添加了:

<action android:name="android.intent.action.ACTION_POWER_CONNECTED"/>
Run Code Online (Sandbox Code Playgroud)

以确保当我将电缆插入Android设备时会触发BroadcastReceiver。工作正常。

因此,问题在于:

<action android:name="com.google.firebase.MESSAGING_EVENT" />
Run Code Online (Sandbox Code Playgroud)

广播接收器无法识别此意图过滤器动作吗?BroadcastReceiver使用的Firebase消息是否还有另一个意图过滤器动作?

Bob*_*der 6

Android Intent消息传递系统在三个“渠道”中处理Intent:活动,服务和BroadcastReceivers。为这些方法发布一个意图指示信道类型: startActivity()startService()sendBroadcast()。与一起发布的意图startService()仅与服务的意图过滤器匹配。未针对活动和广播接收器进行测试。

由于操作com.google.firebase.MESSAGING_EVENT通常是由派生自的服务接收的FirebaseMessagingService,因此必须在服务渠道中发布操作。您将无法使用BroadcastReceiver接收它。

  • @Jupiter:在某些手机上,有可能以禁止接收消息的方式关闭应用程序。在对该问题的评论中讨论了此问题:/sf/ask/3093560851/ (3认同)