1

我正在开发一个 Android 项目,我的应用程序user_channel在后台连接到并在频道中发生新事件时显示通知。

视图模型代码

@RequiresApi(Build.VERSION_CODES.O)
fun getNotifications(callback: (Payload) -> Unit) {
    Coroutines.main {
        repository.receiveText { msg ->
            Log.d("NOTIFICATION", msg.toString())

            callback(msg)
        }
    }
}

存储库代码

suspend fun receiveText(callback: (Payload) -> Unit) {
    coroutineScope {
        async {
            sosChannel.on("notification") { message ->
                callback(message.payload)
            }
        }
    }
}

活动代码

    viewModel.getNotifications() {
        runOnUiThread {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                AlertNotification.alert(this, it["message"].toString() + "at " + it["latitude"] + " " + it["longitude"])
                v.vibrate(VibrationEffect.createOneShot(1500, VibrationEffect.DEFAULT_AMPLITUDE));
            } else {
                //deprecated in API 26
                v.vibrate(1500);
            }
            Toast.makeText(
                this,
                it["message"].toString() + "at " + it["latitude"] + " " + it["longitude"],
                Toast.LENGTH_LONG
            ).show()
        }
    }

现在,当应用程序处于前台,并且我的应用程序连接到通道时,我可以检查事件并且它工作正常但是当应用程序被杀死时,应用程序离开通道,我如何保持连接到通道以接收通知? 我还了解到,尽管 Facebook 和 whatsapp 之类的应用程序在后台保持活跃并显示通知,但发布 Android Oreo 后台工作是有限的,它们是如何做到的 - 我如何才能继续实现我的目标,即通过保持连接来接收通知非常感谢后台通道调用 Viewomdel 方法的任何建议,在此先感谢!

4

1 回答 1

0

Facebook 和 whatsapp 之类的应用程序在后台保持活跃并显示通知,它们是如何做到的

即使应用程序被终止或在后台显示通知的最合适方式是实现推送通知。这通常是消息传递应用程序提醒新消息的方式。

话虽如此,双方都需要支持推送通知(您的应用程序和您正在收听的后端)。要在 Android 上支持它,请查看https://firebase.google.com/docs/cloud-messaging

否则,如果您真的想让您的应用程序在后台保持活动状态并继续订阅和运行代码(不利于电池和数据使用),您将需要在前台服务中执行此操作,并为用户提供持久通知(不利于 UX )。我建议尽可能避免这种解决方案。 https://developer.android.com/guide/components/services

于 2020-04-09T08:55:12.137 回答