Android 和 iOS 上的 websocket
Posted
技术标签:
【中文标题】Android 和 iOS 上的 websocket【英文标题】:websockets on Android and iOS 【发布时间】:2019-11-06 03:53:43 【问题描述】:我正在创建一个具有即时消息功能的移动应用。在雇用某人开发移动组件之前,我将提出后端。移动设备(客户端)和服务器之间通信的主要方式是通过 websocket。我听说一旦应用程序不再在移动设备(android 和 ios)上的前台,websocket 就会关闭。我不想花时间围绕 websockets 开发服务器来实现我不能使用这项技术为此目的。有人可以帮助我解决以下问题:
如果是这种情况(Web 套接字在后台关闭),诸如 bumble 之类的应用程序如何继续显示近时间通知?
套接字如何在后台继续运行?有没有更好的新技术可以做到这一点?
更新 这里的问题是当应用程序不在前台时如何维护一个持久的 websocket。我想更多地了解 iOS 和 android 在最小化应用程序时如何处理这种情况。 websockets 是否继续运行?还是他们关门了?是否必须使用其他库才能使其继续运行?
【问题讨论】:
我不了解 Bumble,但 Whatsapp 运行后台服务以不断接收消息。您还可以使用推送通知在后台传递消息。 嗨,Rishabh 感谢您的回复。推送通知是该设备的 API 原生的吗? IE。 iOS 和 Android 有唯一的推送通知吗? 我认为你应该阅读更多关于 Apple 推送通知的信息:developer.apple.com/library/archive/documentation/… 或 Google:developer.android.com/guide/topics/ui/notifiers/notifications 你可以使用这个库来使用 websocket github.com/daltoniam/Starscream 【参考方案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()
【讨论】:
以上是关于Android 和 iOS 上的 websocket的主要内容,如果未能解决你的问题,请参考以下文章
本人对于netty框架的一些理解,怎么与网站上的websock建立连接
Android 和 iOS 上的 Facebook 用户 ID