GVKun编程网logo

Android和iOS上的websockets(安卓websocket)

10

想了解Android和iOS上的websockets的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于安卓websocket的相关问题,此外,我们还将为您介绍关于AndroidWebsocke

想了解Android和iOS上的websockets的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于安卓websocket的相关问题,此外,我们还将为您介绍关于Android Websocket、android websocket 调用问题、Android webSocket(okhttp-4.9.0)、Android WebSocket中的SSL连接错误的新知识。

本文目录一览:

Android和iOS上的websockets(安卓websocket)

Android和iOS上的websockets(安卓websocket)

我正在创建一个具有即时消息传递功能的移动应用程序.在聘请某人开发移动组件之前,我想出了一个后端.移动设备(客户端)和服务器之间进行通信的主要方式是通过网络套接字.我听说一旦应用程序不再在移动设备(包括android和iOS)上出现在前台,Websocket就会关闭,我不想花时间在Websockets上开发服务器以意识到我无法使用这项技术为此目的.有人可以协助我解决以下问题:

>如果是这种情况(Web套接字在后台关闭),bumble之类的应用程序又如何继续显示近期通知?
>套接字如何继续在后台运行?有没有更好的更新技术来做到这一点?

UPDATE
这里的问题是,当应用程序不在前台时,如何维护一个持久的websocket.我想了解更多有关在最小化应用程序时iOS和android如何处理情况的信息. websocket是否继续运行?还是关闭?是否必须使用其他库才能使其继续运行?

解决方法:

ANDROID:

由于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 Websocket

Android Websocket

服务器端想向客户端Push Notification时,可以使用C2DM,但好像不够稳定,总被Block,我一个朋友写了一个很好应用,叫 “Android Push Notification Service(APNS)"

http://push-notification.org/index.php

可以很好解决 push notification 的问题,在这里支持一下子,牛掰。

但由于我的是HTML5建立的本地应用,所以想到用的是websoket,

又由于我用的是Phonegap调用底层Device,所以可以写一个Android Plugin:

Google就是好,一搜果然有:https://github.com/anismiles/websocket-android-phonegap

希望对大家有用。

android websocket 调用问题

android websocket 调用问题

@linuxjd 你好,想跟你请教个问题:

D/de.tavendo.autobahn.WebSocketReader﹕ run() : WebSocketException (de.tavendo.autobahn.WebSocketException: message payload too large)

D/de.tavendo.autobahn.WebSocketReader﹕ ended

D/de.tavendo.autobahn.WebSocketConnection﹕ fail connection [code = 4, reason = WebSockets protocol violation

D/de.tavendo.autobahn.WebSocketReader﹕ quit

 D/de.tavendo.autobahn.WebSocketWriter﹕ ended

Android webSocket(okhttp-4.9.0)

Android webSocket(okhttp-4.9.0)

开发过程,部分需要webSocket,这里使用 okhttp 自带socket。

一、依赖:com.squareup.okhttp3:okhttp:4.9.0

二、创建webSocket

1、创建okhttpClient和Request

public void init(){
		//初始化okhttpClient
        mBuilder = new OkHttpClient.Builder();
        //设置读取超时时间
        mBuilder.readTimeout(120, TimeUnit.SECONDS);
        //设置写的超时时间
        mBuilder.writeTimeout(120, TimeUnit.SECONDS);
        //设置连接超时时间
        mBuilder.connectTimeout(120, TimeUnit.SECONDS);
        //心跳时间
        mBuilder.pingInterval(10,TimeUnit.SECONDS);
        mOkHttpClient = mBuilder.build();
		
		//初始化request 
		mRequest = new Request.Builder().url(socketUrl).build();
}
	

2、创建webSocket并获取socket对象

public void connect(){
		mWebSocket = mOkHttpClient.newWebSocket(mRequest, new WebSocketListener() {
                @Override
                public void onopen(final WebSocket webSocket, final Response response) {
                    super.onopen(webSocket, response);
                    //socket 连接成功(需要自己切换到主线程)
                }

                @Override
                public void onMessage(WebSocket webSocket, final String text) {
                    super.onMessage(webSocket, text);
                   //socket 获取String 类型数据(需要自己切换到主线程)
                }

                @Override
                public void onMessage(WebSocket webSocket, ByteString bytes) {
                    super.onMessage(webSocket, bytes);
					//socket 获取ByteString 类型数据(需要自己切换到主线程)
                }

                @Override
                public void onClosing(final WebSocket webSocket, final int code, final String reason) {
                    super.onClosing(webSocket, code, reason);
					
                   
                }

                @Override
                public void onClosed(final WebSocket webSocket, final int code, final String reason) {
                    super.onClosed(webSocket, code, reason);
					//释放连接
                    
                }

                @Override
                public void onFailure(final WebSocket webSocket, final Throwable t, final Response response) {
                    super.onFailure(webSocket, t, response);
                    //其他异常,都会执行这个方法
                }
            });
        }
	}

三、数据交互 mWebSocket.send(msg);

四、关闭webSocket

如果只是关闭连接可采用:

1、mWebSocket.close(code,reason),则WebSocketListener.onClosed()会被调用。这里需要注意是code码,不可以随便传递。可以参考文档 https://tools.ietf.org/html/rfc6455#section-7.4。

2、mWebSocket.cancel(),则WebSocketListener.onFailure()会被调用

 

Android WebSocket中的SSL连接错误

Android WebSocket中的SSL连接错误

我开发了一个演示android应用程序,该应用程序通过安全的websocket协议连接到在线服务器.
并且在开始连接时收到“找不到证书路径的信任锚”错误.我搜索了此错误,仅找到了相关的HTTPS,我不知道如何在websocket(wss)中进行开发.

我将Autobahn-SW库用于websocket.

代码在这里(在“我的活动”课程中):

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    final WebSocketConnection mConnection = new WebSocketConnection();

    final String wsuri = "wss://myserver_url";
    try {
        mConnection.connect(URI.create(wsuri), new WebSocketConnectionObserver() {

            @Override
            public void onopen() {
                System.out.println("onopend----> sending msg...");
                mConnection.sendTextMessage("hello");
            }

            @Override
            public void onClose(WebSocketCloseNotification code, String reason) {
                System.out.println("onClosed---> " + reason);
            }

            @Override
            public void onTextMessage(String payload) {
                System.out.println("onTextmessage---> " + payload);
            }

            @Override
            public void onRawTextMessage(byte[] payload) {
            }

            @Override
            public void onBinaryMessage(byte[] payload) {
            }

        });
    } catch (Exception e) {
        e.printstacktrace();
    }
}

而且我得到如下错误:

07-21 13:16:46.159: D/de.tavendo.autobahn.secure.WebSocketConnection(4023): WebSocket connection created.
07-21 13:16:46.329: 
D/de.tavendo.autobahn.secure.WebSocketReader(4023): WebSocket reader created.
07-21 13:16:46.349: 
D/de.tavendo.autobahn.secure.WebSocketConnection(4023): WebSocket reader created and started.
07-21 13:16:46.349: 
D/de.tavendo.autobahn.secure.WebSocketWriter(4023): WebSocket writer created.
07-21 13:16:46.449: 
E/de.tavendo.autobahn.secure.WebSocketReader(4023): java.security.cert.CertPathValidatorException: Trust anchor for certification path not 
found.
07-21 13:16:46.479: E/de.tavendo.autobahn.secure.WebSocketWriter(4023): Socket is closed
07-21 13:16:46.479: 
D/de.tavendo.autobahn.secure.WebSocketWriter(4023): WebSocker writer running.
07-21 13:16:46.479: 
D/de.tavendo.autobahn.secure.WebSocketConnection(4023): WebSocket writer created and started.
07-21 13:16:46.499: 
D/de.tavendo.autobahn.secure.WebSocketConnection(4023): fail connection [code = INTERNAL_ERROR, reason = WebSockets internal error 
(java.lang.NullPointerException)
07-21 13:16:46.499: D/de.tavendo.autobahn.secure.WebSocketReader(4023): quit
07-21 13:16:46.499: 
D/de.tavendo.autobahn.secure.WebSocketWriter(4023): WebSocket writer ended.
07-21 13:16:46.499: 
D/de.tavendo.autobahn.secure.WebSocketConnection(4023): SocketThread exited.

如何连接Secure Websocket(wss)?代码示例将很有帮助.

解决方法:

感谢@Jack,我解决了以下解决方案:就我而言,我的服务器生成了自我认证证书.但是在服务器获得相关的经过验证的SSL证书后,将不需要(下面)代码.

我也从HTTPS GET (SSL) with Android and self-signed server certificate得到了解决方案.

/*************************************************************************************************/
            /* Below code is only purposed for Testing, Not to use in real environment */
            /**
             * Setting custom Trust managers which are intended to allow SSL connection to server.
             * This custom trust managers are allowing for all connection types, so this may cause network connection security leak.
             * So those are used only for testing purposes.
             *              
             * Doc - http://developer.android.com/training/articles/security-ssl.html#SelfSigned
             * */
            WebSocketClient.setTrustManagers(new TrustManager[] {
              new x509trustmanager() {
                    public void checkClientTrusted(X509Certificate[] chain, String authType) {}
                    public void checkServerTrusted(X509Certificate[] chain, String authType) {}
                    public X509Certificate[] getAcceptedissuers() { return new X509Certificate[]{}; }
                  }
            });
            /*************************************************************************************************/

            wsClient = new WebSocketClient(uri, this , extraHeaders);       
            wsClient.connect();

关于Android和iOS上的websockets安卓websocket的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于Android Websocket、android websocket 调用问题、Android webSocket(okhttp-4.9.0)、Android WebSocket中的SSL连接错误的相关信息,请在本站寻找。

本文标签: