iOS推送通知:当应用程序处于后台时,如何检测用户是否点击了通知?

2024-06-19

关于这个主题有很多 stackoverflow 线程,但我仍然没有找到好的解决方案。

如果应用程序不在后台,我可以检查launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey] in application:didFinishLaunchingWithOptions:调用以查看它是否从通知中打开。

如果应用程序在后台,所有帖子都建议使用application:didReceiveRemoteNotification:并检查应用程序状态。但正如我试验的那样(也正如该 API 的名称所暗示的那样),当收到通知时会调用此方法,而不是点击通知。

所以问题是,如果应用程序启动然后进入后台,并且您知道从application:didReceiveNotification (application:didFinishLaunchWithOptions:此时不会触发),您如何知道用户是否通过点击通知或仅点击应用程序图标来恢复应用程序?因为如果用户点击通知,则期望打开该通知中提到的页面。否则不应该。

我可以用handleActionWithIdentifier对于自定义操作通知,但这仅在点击自定义操作按钮时触发,而不是在用户点击通知主体时触发。

Thanks.

EDIT:

阅读下面的一个答案后,我想这样我可以澄清我的问题:

我们如何区分这两种情况:

(A) 1.app进入后台; 2.收到通知; 3. 用户点击通知; 4.应用程序进入前台

(B) 1.app进入后台; 2.收到通知; 3. 用户忽略通知并稍后点击应用程序图标; 4.应用程序进入前台

Since application:didReceiveRemoteNotification:这两种情况都会在步骤 2 中触发。

或者,应该application:didReceiveRemoteNotification:仅在 (A) 的步骤 3 中触发,但我以某种方式错误地配置了我的应用程序,所以我在步骤 2 中看到它?


好吧我终于想通了。

在目标设置➝功能选项卡➝后台模式中,如果选中“远程通知”,application:didReceiveRemoteNotification:一旦通知到达(只要应用程序在后台)就会被触发,在这种情况下,无法判断用户是否会点击通知。

如果取消选中该框,application:didReceiveRemoteNotification:仅当您点击通知时才会触发。

有点奇怪的是,选中此框将更改应用程序委托方法之一的行为方式。如果选中该框会更好,Apple 使用两种不同的委托方法来接收通知和点击通知。我认为大多数开发人员总是想知道通知是否被点击。

希望这对遇到此问题的其他人有所帮助。苹果也没有明确记录here https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIApplicationDelegate_Protocol/index.html#//apple_ref/occ/intfm/UIApplicationDelegate/application:didReceiveRemoteNotification:所以我花了一段时间才弄清楚。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iOS推送通知:当应用程序处于后台时,如何检测用户是否点击了通知? 的相关文章

  • Firebase数据库在批准后保存数据

    我在 iOS 应用程序上使用 firebase 数据库 我正在快速写作 我正在使用 发送 按钮在我的 firebaseDatabase 上写入数据 例如文本字段和标签值 有什么方法可以接受或拒绝我的数据库中的数据吗 我的意思是 如果用户向文
  • 从 Firebase Swift 检索信息的好方法

    我和我的朋友正在 swift 上开发一个 IOS 项目 并集成了 新的 Firebase 我们能够写入 Firebase 数据库 但是我们在检索数据时遇到了问题 我们有一个 tableView 控制器 我们希望从 Firebase 数据库填
  • 使用 Swift 创建随机 CGPoint

    所以 我正在尝试开发一个用 Swift 编写的简单游戏 但我在做一件非常简单的事情时遇到了困难 我无法创建随机 CGPoint 使用 arc4random 时 会出现编译器错误 告诉我无法在 CGPoint 中使用 Int32 那么 有什么
  • 如何在 Swift 中使用具有相同协议变量的多个协议?

    我很快就实现了两个协议 GADCustomEventInterstitial and GADCustomEventBanner 这两个协议都需要一个名为delegate delegate每个协议中的类型不同 因此会产生冲突 class Ch
  • iOS 64 位 @try {... } @catch {...} 不起作用

    我有一个非常特殊的问题 最近 我向我的 iOS 项目 arm64 添加了 64 位支持 从那时起 我开始收到内部代码段未捕获的异常 try catch 我使用 Crashlytics 进行崩溃报告 我设法在应用程序中的任何位置使用以下代码行
  • 解决听写/自定义文本视图错误

    我有一个实现的视图UIKeyInput并覆盖shouldBecomeFirstResponder回来YES 点击此视图时 键盘会弹出 如果用户点击听写按钮 按下 完成 然后尝试关闭键盘 应用程序将崩溃并显示 Fatal Exception
  • ios - navigationItem.titleView 更新时闪烁

    我有一个UIView 拿着一个UIButton 设置为我的navigationItem titleView 当我更新此按钮的文本时 它会短暂闪烁 消失并随新文本重新出现 无论如何 当它改变时 是否可以保持它可见 那么 如果我更改 2015
  • 添加应用程序组后 Xcode 显示警告(将“应用程序组”权利添加到您的应用程序 ID)[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 在 Xcode 中添加应用程序组后 它显示警告 将 应用程序组 权限添加到您的应用程序 ID将 应用程序组容器 权限添加到您的应用程序 I
  • 在堆栈视图内的 Uilabel 之间创建垂直线 [重复]

    这个问题在这里已经有答案了 我想在代码中创建一个带有自定义标头的 UICollectionView 因此 我创建了 UICollectionViewCell 的子类来描述我的自定义标头 我想在标题中以水平线显示五个标签 因此 我创建了五个标
  • 如何在 iOS 上删除配对的蓝牙设备?

    我希望我的应用程序可以删除配对的蓝牙设备 因为如果设备与 iPhone 配对 则该设备无法用于其他设备 我尝试了 CBCentralManager cancelPeripheralConnection 但它不起作用 他们仍然配对 或者还有其
  • 获取 iOS 5 中最后一个重定向的 url?

    有人可以发布最简单的工作代码 当我 GET 请求一个 url 时 它可以获取最后一个重定向的 url nth 吗 我知道我需要使用异步请求 但我无法制定出解决问题的完整工作代码 我正在使用 ios5 因此我可以使用 ios5 中最新添加的异
  • 如何使用 Swift 关闭打开的文件?

    我正在下载约 1300 张图像 这些是小图像 总大小约为 500KB 但是 下载并将它们放入 userDefault 后 我 收到如下错误 libsystem network dylib nw route get ifindex 套接字 P
  • UIWebView didFinishLoading 多次触发

    我有一些代码需要在 a 之后运行UIWebView完成加载文档 为此我设置了UIWebView的委托给我的控制器 并实现了webViewDidFinishLoading method 这会被多次调用 具体取决于要加载的页面类型 我不确定是否
  • iOS:如何使用 CGLayer 支持 Retina 显示屏?

    我正在 CALayer 的委托方法中绘制图表drawLayer inContext 现在我想支持 Retina Display 因为图形在最新设备上看起来很模糊 对于直接在 CALayer 传递的图形上下文上绘制的部分 我可以通过如下设置
  • 具有硬件集成的 iOS 应用程序

    我想开发一个使用外部硬件插件的 iOS 应用程序 有点像 Squarehttps squareup com https squareup com 但是我在苹果的文档中找不到任何参考资料 有人能指出我正确的方向吗 如果您想使用 iPod 连接
  • 如何以编程方式设置 iOS 6/7 Delta

    当我离开 iOS6 时 我正在使用 Xcode 4 6 开发 UISplitView 应用程序 我有设计 现在我迁移到新的 Xcode5 现在我有这样的设计 UINavigationBar 完全重叠我的 UISearchBar Leo Na
  • Xcode 6 iOS 8 UIImage imageNamed 来自捆绑包问题

    我使用 iOS 7 1 构建我的项目 并尝试使用存储在 images cars car 1 png 中的图像加载 UIImage 视图 所有图像都位于项目树中的图像文件夹中 如下图所示 所以它非常适合 iOS 7 1 和 Xcode 5 但
  • ipatool 失败并出现异常:#

    将 Xcode 升级到 9 0 1 版本后 在我的项目之一中导出为 iPA 时 我遇到错误 ipatool 失败 出现异常 NoMethodError undefined method toolsPath for nil NilClass
  • GKLocalPlayer 身份验证不起作用,但 isAuthenticated 返回 YES(游戏中心沙盒)

    我正在努力将回合制比赛集成到我的游戏中 几天前 我开始从 GameKit API 收到奇怪的错误 指出本地玩家未经过身份验证 尽管他已通过身份验证 当我启动应用程序时 authenticateHandler被调用 显示视图控制器 输入密码后
  • 记录使用 OpenAL 播放的样本

    我在 iOS 上使用 OpenAL 同时播放 9 个循环 为了使循环 100 同步 它们开始在不同的线程上运行 有关使用 OpenAL 记录正在播放的内容的任何指示 教程 如果我使用不同的线程 我会遇到录制问题吗 iOS 上的 OpenAL

随机推荐