【问题标题】:Connecting to a local IP address with Instant apps使用免安装应用连接到本地 IP 地址
【发布时间】:2017-10-18 00:31:18
【问题描述】:

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

我们确实尝试打开直接 TCP 套接字,但它无法在 Instant 应用中连接(相同的代码在已安装的应用中运行良好)。

【问题讨论】:

  • 您尝试过但没有成功吗?到目前为止,您的问题被否决了两次,很可能是因为人们相信 the question does not show any research effort。您可以通过指定您尝试过的内容以及您的问题来扩展它并改进它吗?谢谢!
  • 你的意思是像developer.android.com/reference/javax/net/ssl/SSLSocket.html这样的东西吗?或者您可以指定您的“避免它”的意图,您是否试图避免 https 连接的要求?
  • @JuliaK 本地网络上的设备无法建立 HTTPS 连接,因为它们没有 IP 地址的 ssl 证书。
  • 感谢@Idolon。我添加了更多细节

标签: android android-instant-apps


【解决方案1】:

免安装应用必须在<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 将尊重此标志,因为它无法确定 其流量是否为明文。但是,大多数网络流量 from applications 由更高级别的网络堆栈/组件处理 这可以尊重政策的这一方面。

从技术角度来看,我认为这里没有问题,但您会通过Android Instant Apps policy 文档进一步限制,该文档指定:

来自免安装应用内部的网络流量必须使用 HTTPS 等 TLS 协议。

可以看出,只要在上面使用了TLS,就不会被政策禁止使用TCP协议。

【讨论】:

  • 感谢@Idolon 提供的详细信息。我们尝试打开一个直接套接字(在 Android 代码中,以及在 WebView/Javascript 中)。两次尝试都无法在 Instant 应用中连接,但相同的代码在已安装的应用中运行良好。
  • @inder 如果您的目标是最后使用 HTTP,那么就没有必要为套接字而烦恼。只需查看此线程,了解如何为专用网络上的主机安装 SSL 证书:community.letsencrypt.org/t/…
  • 我没有这些设备的根访问权限(这些设备是本地网络上的智能电视、Apple TV)。我只是想为他们创建一个遥控器。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-01
  • 1970-01-01
  • 2011-06-06
  • 2018-12-30
  • 2016-12-02
  • 1970-01-01
相关资源
最近更新 更多