Как сохранить мое приложение Android подключенным к внутреннему каналу для получения обновлений и запуска событий на устройстве? - PullRequest
0 голосов
/ 09 апреля 2020

Я работаю над проектом Android, где мое приложение подключено к user_channel в фоновом режиме и показывает уведомление, когда в канале происходит новое событие.

Код Viewmodel

@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()
        }
    }

Теперь, когда приложение на переднем плане, и мое приложение подключено к каналу, я могу проверить событие, и оно работает нормально. Но когда приложение убито, приложение покидает канал. Как я могу оставаться на связи с каналом, чтобы получать уведомления? Я также узнал, что пост Android фоновая работа Oreo ограничена, несмотря на то, что Facebook и приложения, похожие на WhatsApp, остаются активными в фоновом режиме и показывают уведомления, как они это делают - Как я могу приступить к достижению своей цели, то есть получать уведомления, оставаясь на связи на канал в фоновом режиме при вызове метода Viewomdel, любые предложения очень приветствуются, заранее спасибо!

1 Ответ

0 голосов
/ 09 апреля 2020

Facebook и приложения, похожие на WhatsApp, остаются активными в фоновом режиме и показывают уведомления, как они это делают

Самый подходящий способ показать уведомление, даже если приложение убито или находится в фон для реализации уведомлений pu sh. Обычно приложения для обмена сообщениями оповещают о новых сообщениях.

При этом уведомления pu sh должны поддерживаться с обеих сторон (ваше приложение и серверная часть, которую вы слушаете). Чтобы поддержать его на Android, взгляните на это https://firebase.google.com/docs/cloud-messaging

В противном случае, если вы действительно хотите сохранить свое приложение в фоновом режиме и продолжать подписку и запуск кода (не подходит для использование батареи и данных) вам нужно будет сделать это в сервисе переднего плана с постоянным уведомлением для пользователя (не подходит для UX). Я бы посоветовал избегать этого решения в максимально возможной степени. https://developer.android.com/guide/components/services

...