当前位置: 首页 > 面试题库 >

“状态更改” APNS失败时的应用架构

林雅畅
2023-03-14
问题内容

我已经看到了有关此主题的几个问题。但是所有人都只是说,您只需要从其他方法中恢复过来即可。但是没有人解释其他的意思!我找不到关于SO的答案。这也是该问题评论的后续内容。

假设我正在开发Uber应用。驾驶员需要知道乘客的位置。

一名乘客为设置接送地点123 XYZStreet

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

首先想到的是:

发送一个包含通知的通知,`content-
available:1 以便我可以在通知到达后立即更新该应用程序,并且在didReceiveNotification中我调用了该通知,GET(PassengerInfoModel) 并且还包含include。“alert”
“Pickup has been canceled. Don’t go
there’ 因此,驱动程序也将在视觉上得到通知。显然,点击通知不是管理更新的因素。content-available 被设置为1`将对此进行管理。

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

HEAD方法与GET相同,除了服务器 在响应中 不得 返回消息正文
。响应HEAD请求的HTTP标头中包含的元信息应该与响应GET请求发送的信息相同。此方法可用于获取有关请求所隐含的实体的元信息,而无需转移实体主体本身。此方法通常用于测试超文本链接的有效性,可访问性和
最新修改

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

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

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

Question3 现在,我们执行了HEAD请求,但是GET(PassengerInfoModel)另外2个场景/
viewControllers也请求了HEAD 。服务器无法区分不同的场景/
viewController。我猜测一个解决方案是通过单例NetworkHandler管理我们所有应用程序的网络请求。这是一个好主意吗?

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


问题答案:

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

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

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

我认为这是合理的,尤其是当您想在无法成功发出请求时通知用户时。您可能还考虑使用Apple的可达性代码来检测何时可以与服务器通信。

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

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



 类似资料:
  • 问题内容: 我有一个这样的状态,我正在设置和标记如下: 我有一个列表,其中包含状态为类的项目: 在这里,如何更改特定div的类名? 问题答案: 以下是我相信您正在尝试做的一个功能齐全的示例(带有功能性摘录)。 根据您的问题,您似乎正在为所有元素修改1属性。这就是为什么当您单击一个时,它们全部都被更改了。 尤其要注意,状态跟踪 哪个 元素处于活动状态的索引。当被点击时,它告诉它的索引,更新,随后相应

  • 问题内容: 保持不变,尽管我在函数中调度了一个动作: 输出为NO_AUTH(的初始值) 减速器: 知道为什么吗? 问题答案: 您当前正在直接在未映射到的componentDidMount内部调度: 这应该做的工作: 现在,这将获得authState:

  • 在这种情况下,我更改选择元素并调用数据更新方法。该方法从状态获取值。但是当数据更新时,状态还没有改变。当您再次调用数据更新时,状态已经更新了如何正确进行更新? 反应成分

  • 问题内容: 我正在尝试将状态栏的颜色更改为蓝色或其他某种颜色。 这可能吗,或者Apple不允许吗? 问题答案: 注意:此解决方案在iOS 13及更高版本下失败。 Plist中的第一个设置为 输出屏幕截图如下

  • 我正在使用 webClient 调用调用服务 1,该服务 1 调用服务 2,然后服务 2 从数据库中获取数据并返回它们。问题:我有 onStatus 来捕获错误的响应,因此响应具有 400 或 500 个状态代码。代码示例: 在一些边缘情况下,响应带有200个状态代码,响应体有失败消息和失败原因。那么我如何检索它,然后用该失败消息抛出异常(在其他服务返回的响应对象中)。因为它试图映射并抛出错误。目

  • 我有以下Useffect钩子: 然而,我得到以下警告: React Hook useEffect缺少依赖项:“image.height”、“image.img”、“image.width”、“scaleProperties.scaleInstance”和“scaleProperties.scaleValueMm”。请包含它们或删除依赖项数组 Image和scaleProperties也是组件的状态