我处理推送通知
application(_:didReceiveRemoteNotification:fetchCompletionHandler:)
AppDelegate.swift
模块中的方法
当应用程序处于活动状态时,我会在应用程
if application.applicationState == .active {
// create banner
banner.show()
}
当应用程序在后台iOS show system banner时,我的应用程序在 application.applicationState
具有 .background
值时收到信息 . 如果用户点击 Banner 应用程序再次接收数据但 application.applicationState
是 .inactive
- 在这种情况下,我打开通知中收到信息的实体项目 .
但是当设备被密码锁定时(即需要代码或指纹):
-
应用程序仅在用户点击 Banner 时才接收通知数据,而不是仅在后台模式下(当设备未锁定密码时)
-
解锁后应用程序状态仍为
.background
密码解锁后的背景状态和没有锁定的背景怎么样?
我确实通过处理尝试设置标志
applicationDidBecomeActive(_ application: UIApplication)
和
applicationWillEnterForeground(_ application: UIApplication)
事件但是
application(_:didReceiveRemoteNotification:fetchCompletionHandler:)
早点打电话
2 回答
您可以使用
UIApplication
的isProtectedDataAvailable属性来识别设备当前是否已被锁定然后,您可以使用
isUnlocked
和applicationState
的组合来确定您处于后台,但设备已锁定并进行相应处理 .请注意,如果未在设备上启用数据保护,
isProtectedDataAvailable
将始终返回true
(例如,未设置密码) .我认为下面的线程将解决您的问题:How to differentiate between screen lock and home button press on iOS5?
我没有尝试过,但人们说它的工作非常好,甚至没有应用审批流程的问题 .