【问题标题】:Check if application was opened by tapping a notification通过点击通知检查应用程序是否已打开
【发布时间】:2014-12-22 01:40:02
【问题描述】:

我的应用中的行为推送通知存在一些问题。

如果应用程序没有运行(甚至不在后台),当我触摸通知时,我可以通过阅读“launchOptions”字典来解析其有效负载并执行自定义操作。

当我的应用程序在后台运行时,我无法通过点击通知来检测用户何时将应用程序置于前台,因为 application:didReceiveRemoteNotification:fetchCompletionHandler: 会在后台立即调用,而当我将应用程序置于前台时我无法通过点击应用图标或通知来检查它是否已完成。

我知道这是可能的,因为 Facebook 的 Messenger 应用程序会这样做 - 如果我点击通知,它会将我带到聊天室,否则它会将我带到我之前的位置。

谢谢。

【问题讨论】:

  • 有点笨拙,但为什么不直接使用NSUserDefaults 并设置一个密钥?
  • 我只希望在用户使用通知打开应用程序时发生操作 - 而不是点击图标。 FB Messenger 是这样做的……所以这是可能的。
  • 是的,我在 -application:didReceiveRemoteNotification:fetchCompletionHandler: 中说,只需设置一个布尔值并在应用返回前台时检查它。
  • 仍然无法满足我的需要。如果用户点击应用程序图标而不是通知本身,我不希望发生推送操作。

标签: ios cocoa-touch ios8 apple-push-notifications


【解决方案1】:

如果用户点击应用图标,application:didReceiveRemoteNotification:fetchCompletionHandler 不会被调用。

如果他们点击通知,application:didReceiveRemoteNotification:fetchCompletionHandler 会被调用,application.applicationState 将是 UIApplicationStateInactive

查看this answer 获取代码 sn-p,您可以使用该代码快速查看此操作以使其更有意义。

此外,为了实现您的目标,请务必在应用程序状态为 UIApplicationStateInactive 而不是 UIApplicationStateBackground 时更新视图。当推送通知进来时,应用程序状态将为UIApplicationStateBackground。仅当用户通过点击通知启动应用程序时,应用程序状态才会为UIApplicationStateInactive

我已经看到很多类似 if 语句的答案

if (application.applicationState != UIApplicationStateActive) { ... }

但这不会让您区分正在传递的推送通知和用户点击通知。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-11
    • 2012-11-22
    • 2014-06-03
    • 2016-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多