【问题标题】:iOS 10 Today View Widget: How to tell if it's *actually* on screen / visible?iOS 10 Today View Widget:如何判断它是否*实际上*在屏幕上/可见?
【发布时间】:2016-10-22 13:38:52
【问题描述】:

我有一个小部件,它全天定期从服务器检索更新,但如果用户实际查看它,我希望它立即再次更新。这在 iOS 8/9 中始终运行良好... viewWillAppear 专门在视图即将出现时触发。

但在 iOS 10 中,它似乎也发生在其他时间。不知道什么时候。但是突然之间,我在更新服务(这是一项付费服务​​)上获得了大约 5 倍的点击量,所以这是一个真正的问题。

有没有办法在 Today 小部件上保证该小部件实际上是可见的?或者,至少,今日视图实际上是可见的?

【问题讨论】:

  • 我刚刚自己创建了一个 Today Widget,并在 iPhone 5s(10.1) 上进行了检查。每当我打开小部件部分以查看我的小部件时,都会调用 viewDidLoad() 和 viewDidAppear() ,但只调用一次。除了这种情况,你说其他时候。其他场景是什么?你能告诉我,以便我调查一下吗
  • 我似乎无法弄清楚何时或为什么 - 如果我经常打开小部件,尽管我没有打开它,但它最近明显更新了。
  • 我相信您在viewDidLoad()viewDidAppear() 中使用了断点来观察信息。如果没有,你可以通过设置断点来检查它。您也许可以通过调试找出特定的场景。不然能不能把相关代码贴出来让别人观察?
  • 今晚回家后会试一试...也许我只需要把它连接到调试器一段时间,而我在手机上做其他事情,看看会发生什么...
  • 您好,您昨天调试成功了吗?

标签: ios objective-c ios10 today-extension ios10-today-widget


【解决方案1】:

我敢打赌,5 倍的点击量是因为用户现在如何在 iOS 10 上解锁他们的设备。从锁定屏幕滑动会显示用户小部件,而不是解锁他们的设备。如果您在viewWillAppear 中请求,那么每次用户的肌肉记忆尝试通过滑动以旧方式解锁设备时,您的小部件都会发送服务器请求。您可能想为请求设置一个计时器,或添加一个刷新按钮。

【讨论】:

  • 现在这是一个有趣的想法......顺便说一下,这种变化让我非常疯狂。会试一试的。
  • 是否可以检查它当前是否可见/在屏幕上?如果是这样,计时器的想法将起作用。 (抱歉回复慢——周末出去了)
  • @DanM 我没有测试过,但我想viewWillAppearviewWillDisappear 会是你所追求的。我知道小部件的生命周期有时有点不可预测。我会在本周的某个时候尝试对其进行测试,并根据我的发现更新我的答案。
  • 这似乎做得比较好;在 viewWillAppear 中设置一个计时器四分之一秒,然后在 viewWillDisappear 中取消它。谢谢!
【解决方案2】:

我认为您确实需要重新考虑这一点,并且我强烈反对您迄今为止获得的建议。让我解释一下:

  • 我以前从不使用小部件,但从 iOS 10 开始,我现在一直都在使用它们。我不认为我是唯一的一个——他们更靠前和靠中,更容易到达。我想说的是,5x 中有很大一部分是现在真正使用您的小部件的人。

  • 尽管人们仍然以旧方式解锁他们的设备,但这只是人们很快就会养成的习惯,如果他们还没有的话。我不认为修改您的小部件以响应短期习惯是一个好主意。

  • 大多数其他小部件会自动刷新,因此添加刷新按钮与良好的用户界面、人们的期望以及 Apple 想要小部件的工作方式背道而驰。试图对抗系统不是一个好主意。添加刷新按钮与小部件是查看更新的超级快捷方式的想法背道而驰。

作为一种解决方案,我认为您需要查看不同的服务器选项(AWS 非常便宜)。查看您发送的数据 - 看看您是否可以减小大小,或者只发送已更改的数据。添加最短刷新时间,即不要在 10 分钟内多次刷新。如果您还没有这样做,请考虑通过添加一些小型但真正有用的高级功能来抵消服务器成本,从而通过您的应用获利。

【讨论】:

  • 好点。我更专注于回答问题,而不是思考更好的解决方案。 +1
  • 嗨 - 很抱歉响应缓慢...问题是它使用付费天气服务(Dark Sky API),每次使用的费用超过一定程度的免费使用。如果我以高容量(有更多人使用小部件)结束,在我自己的服务器上缓存是理想的解决方案,但对于我目前的用户数来说这还不够。会看到的。
  • 一切都好,了解您的困境。不幸的是,我仍然坚持我所说的——我认为更多的人真正在使用你的小部件。如果像@DanielStorm 的回答提到的那样延迟 1/4 秒并没有产生足够大的影响,那么您需要跳出框框思考。不同的天气 API,按照您的建议缓存在您自己的服务上,速率限制。此外,查看 DarkSky 网站……每个天气预报只需 0.0001 美元。我认为这不会花费你太多,如果你的小部件被使用到足以成为一个问题,那么这可能是一个很好的问题:)
猜你喜欢
  • 2012-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多