闲言
因为我们后台是 .net,所以要求使用SignalR来实现推送。因为网上资料也不多,也走了很多弯路。现在记录一下,希望可以帮到更多的人。
首先要确认后台用的是 asp.net 还是 asp.net core ,这两个的SignalR还是有区别的,我们Android用的库也不一样,我认为是不兼容的。
如果使用的是 asp.net,这里有个库可以使用。java-client 但是不再维护了。也可以试试这个,但是也不维护了。
如果后台使用的是 asp.net core ,那就接着看吧。
实践
这里我们说的后台是 asp.net core,我们该怎么办。首先看一下官网的一些信息。 另外,还有github上的地址
官网上给出了使用的步骤:
- 添加依赖
1 | implementation 'com.microsoft.signalr:signalr:1.0.0' |
- 代码
1 | HubConnection hubConnection; |
按照上面的步骤,你看下日志,如果连接成功了,那ok了。不用接着看了。
但是我还是失败了(可以连接到该库的测试地址上,但是连不上我们服务器的地址上)。
1 | 04-18 14:09:14.827 3655-3724/cn.gxh.view E/OkHttpWebSocketWrapper: WebSocket closed from an error: Expected 'Connection' header value 'Upgrade' but was 'null'. |
按照该库维护人员的建议:upgrade to the 3.0.0-preview3-19153-02 version.
1 | implementation 'com.microsoft.signalr:signalr:3.0.0-preview3-19153-02' |
因为这个版本 can set the transport to LongPolling
1 | hubConnection = HubConnectionBuilder.create(url) |
其它无变化,至此,连接成功。
1 | 04-19 11:15:53.986 7924-7954/cn.gxh.view I/c*.m*.s*.HubConnection: HubConnection started. |
最后,还有一点要说的,按照官网上写的:
1 | The Java client is available in ASP.NET Core 2.2 and later. |
这个库是在 asp.net core 2.2以及以后才可以用的,但是吧,该库的维护人员说2.1应该也可以用。所以,尽管试试吧。