相关疑难解决方法(0)

设置Firestore文档时如何检测缺少网络连接

我们正在使用 Firestore 构建一个实时聊天应用程序。我们需要处理没有 Internet 连接的情况。基本的消息发送代码如下所示

let newMsgRef = database.document(“/users/\(userId)/messages/\(docId)“)
newMsgRef.setData(payload) { err in
   if let error = err {
       // handle error
   } else {
      // handle OK
   }
}
Run Code Online (Sandbox Code Playgroud)

连接设备后,一切正常。当设备未连接时,不会调用回调,也不会得到错误状态。

当设备重新上线时,记录会出现在数据库中并触发回调,但是这种解决方案对我们来说是不可接受的,因为在此期间应用程序可能已经被终止,然后我们将永远无法获得回调并能够设置状态发送的消息。

我们认为禁用离线持久性(默认情况下处于启用状态)会使其立即触发失败回调,但出乎意料的是 - 事实并非如此。

我们还尝试添加超时,在此之后发送操作将被视为失败,但是当设备重新联机时无法取消消息传递,因为 Firestore 使用其队列,这会导致更多混乱,因为消息是在接收者的方面,而我无法在发件人方面处理。

如果我们可以减少超时 - 这可能是一个很好的解决方案 - 我们将很快获得成功/失败状态,但 Firebase 不提供这样的设置。

内置离线缓存可能是另一种选择,我可以将所有写入视为成功并依赖 Firestore 同步机制,但如果应用程序在离线期间终止,则不会传递消息。

最终,我们需要一个一致的反馈机制来触发回调,或者提供一种方法来监视队列中的消息等 - 这样我们就可以确定消息已发送或尚未发送,以及何时发生。

firebase swift google-cloud-firestore

5
推荐指数
1
解决办法
2888
查看次数

检测后台网络变化 (iOS)

我正在尝试创建一个 VPN 应用程序,当在“设置”应用程序中手动关闭 VPN 时,该应用程序会通知用户。更一般地说,我希望能够在网络设置更改时做出反应。我在 StackOverflow 上看到了很多关于可达性、网络等的评论,但我不知道是否可以在后台检查这些东西。有没有办法通过使用“获取”或“远程通知”来做到这一点。我的手机上有一个应用程序,如果我关闭 VPN,它会向我发出通知,所以我知道有办法做到这一点,但我不知道如何做。

vpn reachability swift uibackgroundmode

5
推荐指数
1
解决办法
1763
查看次数

IPV6 Swift可达性

我是swift和xcode的新手,因为IPV6我的应用被拒绝了:

表现 - 2.1

当我们执行以下操作时,您的应用程序在iPad和运行iOS 9.3.5的iPhone上崩溃连接到IPv6网络:

具体来说,当我们触摸应用程序右下角的"更多"按钮时,它会崩溃.

我花了很多时间在ipv6上阅读并得出结论,它可能是我正在使用的可达性类.

我有几个问题,如何修改代码以包含ipv6:

public class Reachability {

    class func isConnectedToNetwork() -> Bool {

        var zeroAddress = sockaddr_in(sin_len: 0, sin_family: 0, sin_port: 0, sin_addr: in_addr(s_addr: 0), sin_zero: (0, 0, 0, 0, 0, 0, 0, 0))
        zeroAddress.sin_len = UInt8(sizeofValue(zeroAddress))
        zeroAddress.sin_family = sa_family_t(AF_INET)

        let defaultRouteReachability = withUnsafePointer(&zeroAddress) {
            SCNetworkReachabilityCreateWithAddress(kCFAllocatorDefault, UnsafePointer($0))

        }

        var flags: SCNetworkReachabilityFlags = SCNetworkReachabilityFlags(rawValue: 0)
        if SCNetworkReachabilityGetFlags(defaultRouteReachability!, &flags) == false {
            return false
        }

        let isReachable = (flags.rawValue & UInt32(kSCNetworkFlagsReachable)) != 0
        let needsConnection = …
Run Code Online (Sandbox Code Playgroud)

ipv6 ios swift

4
推荐指数
1
解决办法
2614
查看次数

如何检查iOS Swift 2中是否打开或关闭WiFi?

我想检查wifi是否关闭,然后向用户显示警报以检查其连接。

我找到了这样的代码,但是它检查是否有互联网连接,而不是检查wifi是否打开:

func isConnectionAvailble()->Bool{

  var rechability = SCNetworkReachabilityCreateWithName(kCFAllocatorDefault, "www.apple.com").takeRetainedValue()

  var flags : SCNetworkReachabilityFlags = 0

  if SCNetworkReachabilityGetFlags(rechability, &flags) == 0
  {
     return false
  }

  let isReachable = (flags & UInt32(kSCNetworkFlagsReachable)) != 0
  let needsConnection = (flags & UInt32(kSCNetworkFlagsConnectionRequired)) != 0
  return (isReachable && !needsConnection)
}
Run Code Online (Sandbox Code Playgroud)

ios swift

4
推荐指数
1
解决办法
5940
查看次数

检查互联网连接 - iOS逻辑

我是iOS编程的新手,没有面向对象的编程背景.

我有一个应用程序,它本质上是几个Web API的用户界面.

我有一个Reachability类,可以让我检查是否有有效的互联网连接.当用户在登录页面上并且没有其他操作时,这很有效.

但是,假设我有一个带有5个按钮的视图,所有这些都需要互联网连接才能工作.在实际进行API调用之前,我是否只需要每个按钮调用此Reachability.isConnected() - > Bool方法?

我担心这不是正确的逻辑.我是否应该有后台程序来定期检查连接?

由于缺乏OOP经验,我将这个功能分解为离散类,因此我遇到了问题.

有关处理此连接检查的最佳方法的任何建议都会很棒.

ios swift swift2

0
推荐指数
1
解决办法
1653
查看次数