我知道有很多讨论这个问题的话题。我已经在该线程上尝试了几乎所有的解决方案,但是不幸的是,在我的情况下,该方法不起作用。
基本上,我想做的是,我想在调用onMessageReceived后立即启动 Activity ,而不发出通知。
这是我的代码:

override fun onMessageReceived(p0: RemoteMessage) {
    super.onMessageReceived(p0)
    "new notif".ea()
    val data = p0.data
    val title = data["title"]
    val body = data["body"]
    val type = data["type"]

    if (type == NEW_ORDER) {
        val order = data["data"]!!.fromJsonObject(OrderModel::class.java)
        NewOrderActivity.open(this, order)
    }
...
class NewOrderActivity : BaseActivity() {

    companion object {
        fun open(c: Context, order: OrderModel) = c.startActivity(Intent(c, NewOrderActivity::class.java).apply {
            addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
            putExtra("order", order.toJsonObject())
        })
    }
...
问题是,如果应用程序在前台,则打开NewOrderActivity。但是,如果应用程序在后台运行,则不会打开NewOrderActivity。我曾尝试使用BroadcastReceiver,但这也不起作用。当前compileSdkVersiontargetSdkVersion设置为29。我已将其更改为28但也无法正常工作

最佳答案


示例代码:-您需要像这样在通知有效负载中指定click_action

$noti = array
    (
    'icon' => 'new',
    'title' => 'title',
    'body' => 'new msg',
    'click_action' => 'open_NewOrderActivity'
);
现在在manifest文件中,在NewOrderActivity Activity 代码中执行此操作
<activity
           android:name=".NewOrderActivity">
            <intent-filter>
                <action android:name="open_NewOrderActivity" /> // should be same as in click action
               <category android:name="android.intent.category.DEFAULT"/>
           </intent-filter>
    </activity>

07-25 20:36