Я создаю мобильное приложение с возможностью обмена мгновенными сообщениями. Я придумываю бэкэнд, прежде чем найму кого-нибудь для разработки мобильного компонента. Основной способ связи между мобильным устройством (клиентом) и сервером будет через веб-сокет. Я слышал, что как только приложение больше не находится на переднем плане на мобильных устройствах (как Android, так и iOS), веб-сокет закрывается. Я не хочу тратить время на разработку сервера вокруг веб-сокетов, чтобы понять, что я не могу использовать эту технологию для этой цели по линии. Может ли кто-нибудь помочь мне со следующими вопросами:
Если это так (веб-сокет закрывается в фоновом режиме), как такие приложения, как bumble и what's app, продолжают показывать уведомления о ближайшем времени?
Как сокет может продолжать работать в фоновом режиме? Есть ли лучшая новая технология для этого?
ОБНОВИТЬ Вопрос здесь в том, как поддерживать постоянный веб-сокет, когда приложения не находятся на переднем плане. Я хотел бы узнать больше о том, как iOS и Android справляются с ситуацией, когда приложение свернуто. Веб-сокеты продолжают работать? или они закрыты? Нужно ли использовать другие библиотеки, чтобы это продолжалось?
Привет, Ришаб, спасибо за ответ. Являются ли push-уведомления родными для API этого устройства? т.е. у iOS и Android есть только push-уведомления?
Я думаю, вам следует больше узнать о push-уведомлениях для Apple: developer.apple.com/library/archive/documentation/… или Google: developer.android.com/guide/topics/ui/notifiers/notifications, вы можете использовать эту библиотеку для использования веб-сокета github.com/daltoniam/Старскрим.
АНДРОИД:
Поскольку 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()
из любого места
Я не знаю о Bumble, но Whatsapp запускает фоновую службу, чтобы продолжать получать сообщения. Вы также можете использовать push-уведомления для доставки сообщений в фоновом режиме.