Веб-сокеты на Android и iOS

Я создаю мобильное приложение с возможностью обмена мгновенными сообщениями. Я придумываю бэкэнд, прежде чем найму кого-нибудь для разработки мобильного компонента. Основной способ связи между мобильным устройством (клиентом) и сервером будет через веб-сокет. Я слышал, что как только приложение больше не находится на переднем плане на мобильных устройствах (как Android, так и iOS), веб-сокет закрывается. Я не хочу тратить время на разработку сервера вокруг веб-сокетов, чтобы понять, что я не могу использовать эту технологию для этой цели по линии. Может ли кто-нибудь помочь мне со следующими вопросами:

  1. Если это так (веб-сокет закрывается в фоновом режиме), как такие приложения, как bumble и what's app, продолжают показывать уведомления о ближайшем времени?

  2. Как сокет может продолжать работать в фоновом режиме? Есть ли лучшая новая технология для этого?

ОБНОВИТЬ Вопрос здесь в том, как поддерживать постоянный веб-сокет, когда приложения не находятся на переднем плане. Я хотел бы узнать больше о том, как iOS и Android справляются с ситуацией, когда приложение свернуто. Веб-сокеты продолжают работать? или они закрыты? Нужно ли использовать другие библиотеки, чтобы это продолжалось?

Я не знаю о Bumble, но Whatsapp запускает фоновую службу, чтобы продолжать получать сообщения. Вы также можете использовать push-уведомления для доставки сообщений в фоновом режиме.

Rishabh Jain 24.06.2019 12:50

Привет, Ришаб, спасибо за ответ. Являются ли push-уведомления родными для API этого устройства? т.е. у iOS и Android есть только push-уведомления?

MarMan29 24.06.2019 12:51

Я думаю, вам следует больше узнать о push-уведомлениях для Apple: developer.apple.com/library/archive/documentation/… или Google: developer.android.com/guide/topics/ui/notifiers/notification‌​s, вы можете использовать эту библиотеку для использования веб-сокета github.com/daltoniam/Старскрим.

Maciej Gad 24.06.2019 12:51
1
3
1 703
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

АНДРОИД:

Поскольку Android фокусируется на эффективном использовании батареи, система лишает ресурсы приложения, когда оно находится в фоновом режиме (зависимое). Для обработки фоновых задач лучше использовать диспетчер работ.

Взгляните https://developer.android.com/topic/libraries/architecture/workmanager/basics.html

Образец кода

class GetMessages(context: Context, params: WorkerParameters) : Worker(context, params) {

    override fun doWork(): Result {
        getAndSaveMessages()
        return Result.success()
    }

    private fun getAndSaveMessages() {
         // get messages here
    }
}

Поместите этот код в класс Singleton, чтобы получить к нему доступ из любого места. Например, JobManager.

    object JobManager{
 private fun syncMessages(){
        val loadMessages = PeriodicWorkRequestBuilder<GetMessages>(5, TimeUnit.MINUTES)
        // Add tag to cancel the thread any time
        loadMessages.addTag("MESSAGES") 

        val myConstraints = Constraints.Builder()
                        .setRequiredNetworkType(NetworkType.CONNECTED)
                        // Many other constraints are available, see the
                        // Constraints.Builder reference
                        .build()
        // Add constraints
        loadMessages.setConstraints(myConstraints)

        WorkManager.getInstance().enqueue(loadMessages.buld())
    }

}

Теперь вы можете использовать JobManager.syncMessages() из любого места

Другие вопросы по теме