【问题标题】:"The Internet connection appears to be offline" when making URLSession requests on Apple Watch using LTE使用 LTE 在 Apple Watch 上发出 URLSession 请求时,“互联网连接似乎处于脱机状态”
【发布时间】:2017-09-27 03:41:06
【问题描述】:

错误:

我一直收到错误代码 -1009“Internet 连接似乎处于脱机状态。”仅通过 LTE 连接到互联网时,在 Apple Watch Series 3 上的 Apple Watch 扩展中发出 URLSession 请求时出错。

复制步骤:

  1. 安装应用程序。
  2. 配置您的设备,使其仅支持 LTE。
  3. 使用 iMessage 验证您与 LTE 的连接,例如
  4. 启动应用程序。
  5. 使用 .default 或 .ephemeral 会话配置初始化 URLSession。
  6. 为任何已知良好的 https URL 发出数据任务请求。

预期行为:

请求成功到达目的地。

观察到的行为:

请求立即失败,错误代码为 -1009“Internet 连接似乎处于脱机状态。”

代码示例:

let config = URLSessionConfiguration.ephemeral
let sesh = URLSession(configuration: config)
let url = URL(string: "https://google.com")!
sesh.dataTask(with: request) { (_, _, error) in
    print(error)
}.resume()

【问题讨论】:

  • 我目前在使用我们的应用时遇到了同样的问题。某些运营商的某些用户会发生这种情况。如果尝试建立 LTE 连接或将网络类型 LTE 切换到 WIFI 或 WIFI 到 LTE,似乎请求会立即失败。最糟糕的是,无论我如何尝试,我都无法在我的设备上进行复制。

标签: watchkit nsurlsession cellular-network lte watchos-4


【解决方案1】:

不:请参阅下面的更新 #3: 缺少的关键元素:您必须将会话配置中的 waitsForConnectivity 标志设置为 true

let config = URLSessionConfiguration.ephemeral
config.waitsForConnectivity = true
let sesh = URLSession(configuration: config)
let url = URL(string: "https://google.com")!
sesh.dataTask(with: request) { (_, _, error) in
    print(error)
}.resume()

如果您不设置该标志,请求会立即失败,因为 LTE 访问无法立即使用,而只有在最短的延迟之后才可用。将此标志设置为 true 会使请求工作。在我的测试中,在 LTE 上启用 waitsForConnectivity启用 waitsForConnectivity 但通过 WiFi 进行的相同请求之间似乎没有明显的时间差异,几乎就像由waitsForConnectivity 在某些情况下是一种下一轮运行循环的情况。

更新 #1

我无法通过 LTE 提出任何请求。当waitsForConnectivity 设置为true 时,请求只是根据会话配置的超时属性超时。当waitsForConnectivityfalse 时,请求立即失败。当我有更多信息时,我会更新我的问题和答案。我正在等待 Apple TSI 请求的回复,这通常需要几天时间。

更新 #2

更令人费解的是,相同的示例代码可以在其他两个开发人员的硬件上通过蜂窝网络正常运行。我知道 我的 硬件很好,因为 Apple 的应用程序在 LTE 上运行良好(电话在高速公路上滚动,除了我的手表在车上)。所以有些事情真的很可疑。我已经要求 Apple DTS 对此进行调查,他们也无法重现该问题。我会尽快跟进他们。

更新 #3

在我上次更新这篇文章后的几周内,手机请求开始在我的应用中运行。我没有改变我的手表,没有软件更新,没有重置,什么都没有。我什至没有重新编译代码;与以前相同的版本仍在我的手表上。它刚刚开始按预期工作,就像在其他开发人员的设备上一样。

我注意到的唯一奇怪的事情是,我收到了来自 AT&T 的三条背靠背相同的 SMS 消息,通知我我的 Apple Watch 现在已链接到我的 iPhone 号码。这很奇怪,因为这种联系据说发生在我拆箱手机的那天晚上,而不是两个月后。我不知道这是否与我的问题有关。我所知道的是,蜂窝请求现在正在起作用。

【讨论】:

  • 我有一个非常相似的问题。我假设 my app 没有在 cell 上运行,但事实证明没有 3rd 方应用在 cell 上运行。我认为我的运营商设置有些时髦(正如你提到的),但我检查了,他们向我保证没问题。然后我问苹果。他们要我取消配对并修复,所以我正在尝试...
【解决方案2】:

我遇到了同样的问题,但正在为 iPhone 开发应用程序。这就是最终解决问题的方法。我设置了配置对象属性:

config.allowsCellularAccess = true

这很令人困惑,因为 Apple 文档声明此属性默认设置为 true ......但在我的情况下它不是。另外,即使我使用的是“后台任务”并且它们总是要等待连接,我也设置了waitsForConnectivity = true,以防万一。

【讨论】:

  • 我遇到了同样的问题,但发现我记得我在移动蜂窝设置中关闭了我正在开发的应用程序......所以它必须切换回开启模式。所以我从来不需要任何代码来实现,而只是来自设置应用程序的应用程序设置。我想分享我的经验作为参考。谢谢
猜你喜欢
  • 2017-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多