Android Nativescript 不会连接到 socket.io,IOS 会
Android Nativescript won't connect to socket.io, IOS does
我 运行 遇到一个非常令人沮丧的错误,试图将 android(本机脚本)应用程序与 socket.io
连接
我已经为 ios 开发了我的应用程序并尝试将其移植到 Android 但 socket.io 无法连接,我将问题缩小到一个简单的 hello world 从只有 socket.io 插件的模板。 它适用于 IOS 但不适用于 Android。我收到无声错误
运行 这段代码:
export class AppComponent
{
socket;
constructor()
{
console.log('constructor!');
this.socket = SocketIO.connect('https://eaglecar.org');
this.socket.on('connect', ()=>
{
console.log('Connect!');
});
this.socket.on('error', (error) =>
{
console.log('Error!');
console.log(error);
});
}
}
有关信息,这将连接到具有 let's encrypt ssl 证书的服务器。
IOS 控制台输出
CONSOLE LOG file:///app/app.component.js:8:20: constructor!
CONSOLE LOG file:///app/tns_modules/@angular/core/./bundles/core.umd.js:3053:20: Angular is running in the development mode. Call enableProdMode() to enable the production mode.
CONSOLE LOG file:///app/tns_modules/nativescript-socket.io/common.js:41:22: nativescript-socket.io on connect []
CONSOLE LOG file:///app/app.component.js:11:24: Connect!
但是 Android
既没有 Connect!
也没有 Error!
它默默地失败了
JS: constructor!
JS: Angular is running in the development mode. Call enableProdMode() to enable the production mode.
起初我在考虑计时错误,所以我尝试将连接附加到 UI 回调,该函数被调用但没有错误。
找不到与 adb logcat 相关的任何内容,但这似乎很正常:
08-04 15:10:24.377 11162 11162 V JS : constructor!
08-04 15:10:24.386 11162 11193 D NetworkSecurityConfig: No Network Security Config specified, using platform default
08-04 15:10:24.389 11162 11195 I System.out: (HTTPLog)-Static: isSBSettingEnabled false
08-04 15:10:24.389 11162 11195 I System.out: (HTTPLog)-Static: isSBSettingEnabled false
刚刚尝试将连接域更改为不存在的内容,但控制台中仍然没有错误...
附加测试:
我做了 2 次测试:
- 我在同一个应用程序中成功地通过 https 加载了一张图片
具有相同证书的服务器
- 我成功连接到一个不安全的 socket.io 服务器
Android.
上的另一个端口 (3000)
服务器端
var fs = require('fs');
var options = {
key: fs.readFileSync('../ssl/keys/[this_is_a_valid_key].key'),
cert: fs.readFileSync('../ssl/certs/[this_is_a_valid_cert].crt')
};
var server = require('https').createServer(options);
server.listen(443,'eaglecar.org');
var io = require('socket.io').listen(server);
io.on('connection', function(socket){
console.log('connected!!');
});
我有疑虑,这似乎是真的,只是用一些知名供应商的付费证书替换了证书,现在一切运行顺利。显然 IOS 识别让我们加密但是 android没有。至少 socket io 插件没有。因为使用 let's encrypt 可以很好地通过 https 加载图像。
我 运行 遇到一个非常令人沮丧的错误,试图将 android(本机脚本)应用程序与 socket.io
连接我已经为 ios 开发了我的应用程序并尝试将其移植到 Android 但 socket.io 无法连接,我将问题缩小到一个简单的 hello world 从只有 socket.io 插件的模板。 它适用于 IOS 但不适用于 Android。我收到无声错误
运行 这段代码:
export class AppComponent
{
socket;
constructor()
{
console.log('constructor!');
this.socket = SocketIO.connect('https://eaglecar.org');
this.socket.on('connect', ()=>
{
console.log('Connect!');
});
this.socket.on('error', (error) =>
{
console.log('Error!');
console.log(error);
});
}
}
有关信息,这将连接到具有 let's encrypt ssl 证书的服务器。
IOS 控制台输出
CONSOLE LOG file:///app/app.component.js:8:20: constructor!
CONSOLE LOG file:///app/tns_modules/@angular/core/./bundles/core.umd.js:3053:20: Angular is running in the development mode. Call enableProdMode() to enable the production mode.
CONSOLE LOG file:///app/tns_modules/nativescript-socket.io/common.js:41:22: nativescript-socket.io on connect []
CONSOLE LOG file:///app/app.component.js:11:24: Connect!
但是 Android
既没有 Connect!
也没有 Error!
JS: constructor!
JS: Angular is running in the development mode. Call enableProdMode() to enable the production mode.
起初我在考虑计时错误,所以我尝试将连接附加到 UI 回调,该函数被调用但没有错误。
找不到与 adb logcat 相关的任何内容,但这似乎很正常:
08-04 15:10:24.377 11162 11162 V JS : constructor!
08-04 15:10:24.386 11162 11193 D NetworkSecurityConfig: No Network Security Config specified, using platform default
08-04 15:10:24.389 11162 11195 I System.out: (HTTPLog)-Static: isSBSettingEnabled false
08-04 15:10:24.389 11162 11195 I System.out: (HTTPLog)-Static: isSBSettingEnabled false
刚刚尝试将连接域更改为不存在的内容,但控制台中仍然没有错误...
附加测试:
我做了 2 次测试:
- 我在同一个应用程序中成功地通过 https 加载了一张图片 具有相同证书的服务器
- 我成功连接到一个不安全的 socket.io 服务器 Android. 上的另一个端口 (3000)
服务器端
var fs = require('fs');
var options = {
key: fs.readFileSync('../ssl/keys/[this_is_a_valid_key].key'),
cert: fs.readFileSync('../ssl/certs/[this_is_a_valid_cert].crt')
};
var server = require('https').createServer(options);
server.listen(443,'eaglecar.org');
var io = require('socket.io').listen(server);
io.on('connection', function(socket){
console.log('connected!!');
});
我有疑虑,这似乎是真的,只是用一些知名供应商的付费证书替换了证书,现在一切运行顺利。显然 IOS 识别让我们加密但是 android没有。至少 socket io 插件没有。因为使用 let's encrypt 可以很好地通过 https 加载图像。