【问题标题】:startActivity not working inside onMessageReceived in fcmstartActivity 在 fcm 中的 onMessageReceived 内不起作用
【发布时间】:2020-11-11 13:37:48
【问题描述】:

我知道有很多线程在讨论这个问题。我已经在该线程上尝试了几乎所有解决方案,但不幸的是,这在我的情况下不起作用。

基本上,我想做的是,我想在调用onMessageReceived 之后立即开始一个活动而不发出通知。

这是我的代码:

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,但也不起作用

【问题讨论】:

标签: android firebase kotlin push-notification firebase-cloud-messaging


【解决方案1】:

这是因为用户没有授予SYSTEM_ALERT_WINDOW 权限。如果有人需要知道如何授予SYSTEM_ALERT_WINDOW 权限,这里是链接 SYSTEM_ALERT_WINDOW - How to get this permission automatically on Android 6.0 and targetSdkVersion 23

【讨论】:

  • 这对我有用!谢谢你。 Android 的错误信息反馈很差,在这种情况下,它不会给你一个错误,而是默默地失败。
【解决方案2】:

消息有数据消息和通知两种类型 消息。数据消息在这里处理在 onMessageReceived 是否 该应用程序位于前台或后台。数据消息是类型 传统上与 GCM 一起使用。只接收通知消息 当应用程序在前台时,在 onMessageReceived 中。当。。。的时候 应用程序在后台自动生成的通知是 显示。当用户点击他们返回的通知时 应用程序。包含通知和数据有效负载的消息是 视为通知消息。 Firebase 控制台始终发送 通知消息。

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

$noti = array
    (
    'icon' => 'new',
    'title' => 'title',
    'body' => 'new msg',
    'click_action' => 'open_NewOrderActivity'
);

现在在manifest 文件中的NewOrderActivity 活动标签中执行此操作

<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>

【讨论】:

  • “字段”:{“registration_ids”:[“xxx”],“通知”:{“数据”:“”,“类型”:“新订单”,“正文”:“ xxx", "click_action": "OPEN_NEW_ORDER_ACTIVITY", "title": "xxx" } }
  • 并在清单中
  • 你能从活动标签中删除这些参数吗 android:launchMode="singleInstance" android:showOnLockScreen="true"
  • 去掉这些参数并检查
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-12
相关资源
最近更新 更多