Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/120.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 当';状态改变';APNS失败_Ios_Swift_Http_Apple Push Notifications_Polling - Fatal编程技术网

Ios 当';状态改变';APNS失败

Ios 当';状态改变';APNS失败,ios,swift,http,apple-push-notifications,polling,Ios,Swift,Http,Apple Push Notifications,Polling,关于这个话题,我看到了几个问题。但所有这些都只是简单地说,你必须从其他方式中恢复过来。但是没有人能解释其他的方法是什么!我在这件事上找不到答案。这也是问题评论的后续内容 假设我正在开发一款优步应用程序。司机需要知道乘客的位置 乘客为123 XYZStreet设置取货位置 2分钟后,她决定取消整个接送。所以现在我需要 通知司机这是一个重要的状态更改更新。 首先想到的是: 发送包含可用内容的通知:1,这样我可以在通知到达后立即更新应用程序,并在didReceiveNotification中调用GET

关于这个话题,我看到了几个问题。但所有这些都只是简单地说,你必须从其他方式中恢复过来。但是没有人能解释其他的方法是什么!我在这件事上找不到答案。这也是问题评论的后续内容

假设我正在开发一款优步应用程序。司机需要知道乘客的位置

乘客为
123 XYZStreet
设置取货位置

2分钟后,她决定取消整个接送。所以现在我需要 通知司机这是一个重要的状态更改更新。

首先想到的是:

发送包含可用内容的通知:1,这样我可以在通知到达后立即更新应用程序,并在didReceiveNotification中调用
GET(PassengerInfoModel)
,还有include
“警报”:“取货被取消了。不要去那里
,这样司机也会得到视觉上的通知。显然,点击通知并不是管理更新的原因。设置为
1
可用内容将对此进行管理

但是这样做,当通知的到达完全失败时会发生什么?那么最新的
GET(PassengerInfoModel)
就不会出现了。作为一个解决方案,我听说有一个
HEAD
请求:

HEAD方法与GET相同,只是服务器不能 在响应中返回消息正文。包含的元信息 在HTTP中,响应头请求的头应该相同 响应GET请求而发送的信息。这种方法可以 用于获取由 请求而不传输实体体本身。这种方法是可行的 通常用于测试超文本链接的有效性、可访问性、, 和最近的修改

不确定如果使用HEAD请求,我们发现有更新!会发生什么!?然后,我们是否在HEAD的完成处理程序成功的情况下发出GET请求

问题1我们应该如何处理HEAD请求响应?(我猜服务器要能够路由
HEAD
请求,必须进行一些更改,但我们假设这超出了问题的范围)

问题2我们需要多久执行一次此请求?根据评论,一种解决方案可能是在
视图中设置一个重复计时器,例如每2分钟发出
头部请求。这是个好主意吗

问题3现在让我们假设我们执行了HEAD请求,但是
GET(PassengerInfoModel)
也是从其他两个场景/视图控制器请求的。服务器无法区分不同的场景/视图控制器。我猜一个解决方案是让我们的应用程序的所有网络请求都通过一个单例网络处理程序来管理。这是个好主意吗

我理解这个问题很广泛,但我认为这个问题需要作为一个整体来解决

问题1我们应该如何处理HEAD请求响应?(我猜服务器要能够路由HEAD请求,必须进行一些更改,但我们假设这超出了问题的范围)

您可能不需要处理HEAD请求。使用Etags是一种标准机制,允许您发出GET请求,如果没有任何更改,服务器可以返回一个带有304响应的空正文,如果有更改,则返回实际的新内容

问题2:我们需要多久执行一次此请求?基于此意见,一种解决方案是在视图中设置一个重复计时器,例如每2分钟发出一次HEAD请求。这是个好主意吗

我认为这是合理的,特别是当你无法成功地提出请求时,如果你想通知你的用户。您也可以考虑使用Apple的可达性代码来检测何时或不能与服务器进行对话。 问题3现在让我们假设我们执行了HEAD请求,但是GET(PassengerInfoModel)也是从其他两个场景/视图控制器请求的。服务器无法区分不同的场景/视图控制器。我猜一个解决方案是让我们的应用程序的所有网络请求都通过一个单例网络处理程序来管理。这是个好主意吗


是的,我认为使用单例是合理的,尽管我不确定服务器为什么关心视图控制器发出的请求。比如,他们不能请求不同的URL吗?

所以你基本上是说司机朝着错误的方向走了2分钟……对吗?因为没有更好的解决办法了!我的意思是,如果网络断了,你除了告诉他们你无法访问你的服务器外,别无选择。2分钟是15秒,还是使用可达性来更快地得到出错的通知,这取决于您。我不是说网络是否中断。而是在推送通知中出现一个简单的瞬时故障,或者在用户脱机时发送多个通知……APNS不会因为瞬时故障而放弃。您应该假设在收到通知时可能错过了一些通知,因此获取任何通知都是刷新可能已更改的任何状态的好时机。