应用程序架构,当'状态改变'APNS失败

我已经看到了有关这个话题的几个问题。 但是,所有的简单的说,你只需要从其他手段恢复。 但是没有人解释其他方法是什么! 我找不到答案。 这也是这个问题的评论的后续。

假设我正在研究Uber应用程序。 司机需要知道乘客的位置。

一名乘客设置了123 XYZStreet一个取货地点。

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

首先想到的是:

发送具有content-available:1的通知content-available:1以便在通知到达后立即更新应用程序;在didReceiveNotification中,我调用GET(PassengerInfoModel)并且还包含"alert" : "Pickup has been canceled. Don't go there'那么驱动程序也会被直观的通知,显然通知并不是pipe理更新的content-availablecontent-available被设置为1来pipe理。

但是这样做,当通知到达失败时仍然会发生什么情况? 那么最新的GET(PassengerInfoModel)将不会发生。 作为一个解决scheme,我听说过一个HEAD请求:

HEAD方法与GET相同,除了服务器不能在响应中返回消息体 。 响应HEAD请求的HTTP头中包含的元信息应该与响应GET请求发送的信息相同。 这个方法可以用来获得有关请求隐含的实体的元信息,而不用传递实体主体本身。 此方法通常用于testing超文本链接的有效性,可访问性和最近的修改

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

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

Question2我们多久需要做这个请求? 根据这个评论,一个解决scheme可能是在viewDidAppear设置一个重复计时器,例如每2分钟发一个HEAD请求。 这是一个好主意吗?

Question3现在让我们说,我们做了HEAD请求,但GET(PassengerInfoModel)也是从其他2场景/ viewControllers请求。 服务器无法区分不同的场景/视图控制器。 我猜测一个解决scheme将是所有的应用程序的networking请求pipe理通过一个单身NetworkHandler。 这是一个好主意吗?

我知道这个问题很广泛,但是认为这个问题需要整体解决

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

你可能不需要处理HEAD请求。 使用Etags是一个标准的机制,它可以让你做出一个GET请求,服务器可以返回一个空的正文,如果什么都没有改变,或者实际的新内容(如果有的话)。

Question2我们多久需要做这个请求? 根据这个评论,一个解决scheme可能是在viewDidAppear中设置一个重复计时器,例如每2分钟发一个HEAD请求。 这是一个好主意吗?

我认为这是合理的,特别是如果你想告诉你的用户,当你无法成功的请求。 您也可以考虑使用Apple的Reachability代码来检测何时可以或不能与您的服务器通话。

Question3现在让我们说,我们做了HEAD请求,但GET(PassengerInfoModel)也是从其他2场景/ viewControllers请求。 服务器无法区分不同的场景/视图控制器。 我猜测一个解决scheme将是所有的应用程序的networking请求pipe理通过一个单身NetworkHandler。 这是一个好主意吗?

是的,我认为有一个单身人士是合理的,但我不知道为什么服务器在意什么视图控制器提出请求。 像他们不能只是要求不同的url?