代码之家  ›  专栏  ›  技术社区  ›  jaredsinclair

使用LTE在Apple Watch上发出URLSession请求时,“互联网连接似乎处于脱机状态”

  •  11
  • jaredsinclair  · 技术社区  · 7 年前

    缺陷:

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

    复制步骤:

    1. 安装应用程序。
    2. 配置您的设备,使其仅在LTE上。
    3. 使用iMessages验证您与LTE的连接,例如:。
    4. 启动应用程序。
    5. 使用初始化URLSession。默认或。临时会话配置。
    6. 对任何已知良好的https URL发出数据任务请求。

    预期行为:

    请求成功到达目的地。

    观察到的行为:

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

    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()
    
    2 回复  |  直到 7 年前
        1
  •  9
  •   Bill Tür stands with Ukraine Ajay Pawar    3 年前

    否:请参阅以下更新#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并提出相同的请求 没有 有可能 等待连接 等待连接 在某些场景中,是下一轮运行循环的情况。

    更新#1

    我无法通过LTE提出任何请求。什么时候 设置为 真的 等待连接 false

    更新#2

    更为神秘的是,同样的示例代码在另外两个开发人员的硬件上的cellular上运行良好。我知道 我的 硬件很好,因为苹果的应用程序比LTE更有趣(电话在高速公路上滚动,车里只有我的手表)。所以有一些事情真的很可疑。我已经要求苹果数据传输公司对此进行调查,但他们也无法再现这个问题。我会尽快跟进他们。

    更新#3

        2
  •  3
  •   Stephen Rauch ajay singh koranga    6 年前

    我也有同样的问题,但当时正在为iPhone开发一个应用程序。这就是最终解决问题的原因。我设置configuration objects属性:

    config.allowsCellularAccess = true
    

    这是非常令人困惑的,因为苹果的文档说明,默认情况下,该属性设置为true。。。但就我而言,情况并非如此。此外,即使我正在使用“后台任务”,并且它们总是要等待连接,我也会设置 waitsForConnectivity = true