ios - 如何处理在密码锁定的 iOS 设备上点击推送通知横幅?

标签 ios swift push-notification

我在处理推送通知

application(_:didReceiveRemoteNotification:fetchCompletionHandler:)

AppDelegate.swift 模块中的方法

当应用程序处于事件状态时,我会在应用程序窗口中显示我自己的横幅:

if application.applicationState == .active {
    // create banner
    banner.show()
}

当应用程序在后台 iOS 显示系统横幅时,当 application.applicationState 具有 .background 值时,我的应用程序接收信息。如果用户点击横幅应用程序再次接收数据,但 application.applicationState.inactive - 在这种情况下,我打开通知中收到信息的实体项。

但是当设备被密码锁定时(即需要代码或指纹):

  • 应用程序仅在用户点击横幅时才会收到通知数据,而不是像仅在后台模式下那样立即收到通知数据(当设备未使用密码锁定时)
  • 解锁后应用状态仍然是.background

如何区分密码解锁后的后台状态和未锁定的后台状态?

我确实尝试通过处理设置标志

applicationDidBecomeActive(_ application: UIApplication)

applicationWillEnterForeground(_ application: UIApplication)

事件但是

application(_:didReceiveRemoteNotification:fetchCompletionHandler:)

提前打电话

最佳答案

您可以使用 isProtectedDataAvailable 确定设备当前是否被锁定UIApplication

的属性
let isUnlocked = UIApplication.shared.isProtectedDataAvailable

然后您可以结合使用 isUn​​lockedapplicationState 来确定您处于后台但设备已锁定并进行相应处理。

请注意,如果设备上未启用数据保护(例如,未设置密码),isProtectedDataAvailable 将始终返回 true

关于ios - 如何处理在密码锁定的 iOS 设备上点击推送通知横幅?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48002584/

相关文章:

ios - 更新 PFObject 时出错

欧洲日期的正则表达式/正则表达式 ("j. F Y")

regex - swiftlin 开括号规则

android - 如何为 JSON 对象中的 Firebase 云消息传递发送 "event_time"?

iphone - didReceiveRemoteNotification - 在当前 View Controller 中调用函数

ios - 在 Xcode 中调试时,我可以看到我的应用程序中的 View 层次结构吗?

ios - 根据横幅 View 的外观调整布局

iphone - Xcode 4.3 如何保存我的应用程序屏幕区域?

ios - 在 View Controller 之间传递数据

javascript - 向多个设备发送推送 FCM (Web) 无法生成通知 key