我正在编写一个即时应用程序,它将连接到本地IP网络上的设备。即时应用程序有一个限制,他们必须通过HTTPS FAQ连接到网络。这显然不适用于设备,因为我们没有获得本地IP地址的SSL证书。 为避免这种情况,是否可以打开到本地设备的直接TCP套接字或IP连接?
我们确实尝试打开直接TCP套接字,但无法在Instant app中连接(相同的代码在已安装的应用中运行正常)。
答案 0 :(得分:0)
即时应用需要在targetSandboxVersion=”2”
标记中设置<manifest>
属性。针对v2沙箱的应用的默认网络安全配置会限制明文网络流量:
<base-config cleartextTrafficPermitted="false">
<trust-anchors>
<certificates src="system" />
</trust-anchors>
</base-config>
然而,NetworkSecurityPolicy javadoc声明:
当不允许使用明文网络流量时,平台即可 组件(例如HTTP和FTP堆栈,DownloadManager,MediaPlayer) 将拒绝此流程使用明文流量的请求。 强烈建议第三方图书馆遵守此设置 好。
这个标志在尽力而为的基础上得到尊重,因为它是不可能的 防止来自Android应用程序的所有明文流量 提供给他们的访问级别。例如,没有期望 Socket API将尊重此标志,因为它无法确定 它的流量是否是明文。但是,大多数网络流量 应用程序由更高级别的网络堆栈/组件处理 这可以尊重政策的这一方面。
从技术角度来看,我在这里看不到问题,但您通过Android Instant Apps policy文件进一步限制,该文件指明:
即时应用内的网络流量必须使用a加密 像HTTPS这样的TLS协议。
可以看出,只要在其上使用TLS,策略就不会禁止使用TCP协议。