Android 和 iOS 上的 websocket

Posted

技术标签:

【中文标题】Android 和 iOS 上的 websocket【英文标题】:websockets on Android and iOS 【发布时间】:2019-11-06 03:53:43 【问题描述】:

我正在创建一个具有即时消息功能的移动应用。在雇用某人开发移动组件之前,我将提出后端。移动设备(客户端)和服务器之间通信的主要方式是通过 websocket。我听说一旦应用程序不再在移动设备(androidios)上的前台,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

Android 和 iOS 上的 websocket

iOS 和 Android 上的 GPS 定位

Windows 上的 Meteor JS,支持 iOS 和 Android

Android 和 IOS 上的 Qt 会话管理