2017-10-07 175 views
0

我在写一个即时应用程序,它将连接到本地IP网络上的设备。即时应用程序有一个限制,他们必须通过HTTPS连接到网络,每FAQ。这对于设备来说显然是不可能的,因为我们将不具有用于本地IP地址的SSL证书。 为了避免它,是否有可能打开直接的TCP套接字或IP连接到本地设备?使用即时应用程序连接到本地IP地址

我们尝试打开一个直接的TCP套接字,但无法连接即时应用程序(相同的代码在安装的应用程序中工作正常)。

+0

你试过了,它没有用吗?到目前为止,你的问题被降低了两次,很可能是因为人们认为“这个问题没有显示任何研究工作”。你可以通过指定你已经尝试过的东西来扩展它一下,并提出你的问题,以及你的问题是什么?谢谢! – Idolon

+0

你的意思是像https://developer.android.com/reference/javax/net/ssl/SSLSocket.html?或者你可以指定“避免它”的意图,你是否试图避免https连接的需求? –

+0

@JuliaK本地网络上的设备不能有HTTPS连接,因为它们没有用于IP地址的ssl证书。 – inder

回答

0

即时应用要求在<manifest>标记中设置targetSandboxVersion=”2”属性。默认的网络安全配置的应用定位的V2沙盒限制明文网络流量:

<base-config cleartextTrafficPermitted="false"> 
    <trust-anchors> 
     <certificates src="system" /> 
    </trust-anchors> 
</base-config> 

然而,NetworkSecurityPolicy的Javadoc指出:

当不允许明文网络流量,平台的 组件(例如HTTP和FTP堆栈,DownloadManager,MediaPlayer) 将拒绝该进程使用明文流量的请求。 强烈建议您将第三方库设置为 。

此标志因尽力而为,因为 不可能在Android应用程序中阻止所有明文流量,因为提供给他们的访问级别为 。例如,不存在期望 ,因为Socket API将无法确定 其流量是否明文,因此API将遵守此标记。然而,来自应用程序的大多数网络流量 由更高级网络堆栈/组件 处理,其可以遵守该策略的这个方面。

从技术上来看我这里看不到的问题,但你通过Android Instant Apps policy文件,其中规定,进一步限制:

从即时应用内

网络流量必须使用HTTPS等 TLS协议进行加密。

可以看出,只要在其上使用TLS,策略就不会禁止使用TCP协议。

+0

感谢您的详细信息,@Idolon。我们尝试打开直接套接字(在Android代码中,以及在WebView/Javascript中)。这两种尝试都无法在即时应用中进行连接,尽管相同的代码在安装的应用中运行良好。 – inder

+0

@inder如果你的目标是在最后使用HTTP,那么就没有必要打扰套接字。只需检查此主题以了解如何在专用网络上为主机安装SSL证书:https://community.letsencrypt.org/t/certificates-for-hosts-on-private-networks/174/35 – Idolon

+0

我没有root访问这些设备(这些设备是智能电视,本地网络上的Apple TV)。我只是想为他们创建一个遥控器。 – inder