当状态发生变化时的应用程序架构' APNS失败

时间:2017-07-10 17:28:22

标签: ios swift http apple-push-notifications polling

我在这个主题上看到了几个问题。但所有人都只是说你必须从其他方式中恢复过来。但没有人解释其他方法是什么!我无法在SO上找到答案。这也是this问题评论的后续内容。

让我们说我正在使用优步应用。司机需要知道乘客的位置。

  

乘客设置123 XYZStreet的取件地点。

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

首先想到的是:

发送包含content-available:1的通知,以便我可以在通知到达后立即更新应用,并在didReceiveNotification中调用GET(PassengerInfoModel)并且还包含"alert" : "Pickup has been canceled. Don't go there'因此驱动程序会也是视觉上的通知。显然,点击通知并不是管理更新的内容。设置为content-available的{​​{1}}将对此进行管理。

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

  

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

不确定如果使用HEAD请求会发生什么,我们发现有更新!?那么我们是否在HEAD完成处理程序的成功案例中提出GET请求?

问题1 我们应该如何处理HEAD请求响应? (我猜测服务器能够路由HEAD个请求,必须进行一些更改,但我们只是假设它不在问题范围内)。

问题2 我们多久要做一次这样的请求?基于this评论,一种解决方案可以是在HEAD中设置重复计时器,例如每2分钟发出一次viewDidAppear请求。这是一个好主意吗?

问题3 现在让我们说我们做了那个HEAD请求,但是还要求来自其他2个场景/ viewControllers的HEAD。服务器无法区分不同的场景/ viewControllers。我猜测解决方案是通过单一的NetworkHandler管理所有应用程序的网络请求。这是一个好主意吗?

我知道这个问题很广泛,但相信这个问题需要作为一个整体来解决

1 个答案:

答案 0 :(得分:1)

  

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

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

  

问题2我们多久需要做一次这样的请求?基于此评论,一种解决方案可以是在viewDidAppear中设置重复计时器,例如每2分钟发一次HEAD请求。这是个好主意吗?

我认为这是合理的,特别是如果您想在无法成功提出请求时通知您的用户。您也可以考虑使用Apple的可访问性代码来检测何时可以或不能与您的服务器通信。

  

问题3现在让我们说我们做了那个HEAD请求,但是也从其他2个场景/ viewControllers请求了GET(PassengerInfoModel)。服务器无法区分不同的场景/ viewControllers。我猜测解决方案是让所有应用程序的网络请求通过单一的NetworkHandler进行管理。这是个好主意吗?

是的,我认为拥有一个单身是合理的,虽然我不确定为什么服务器关心视图控制器正在发出请求。他们不能只是请求不同的网址吗?