Swift 应用程序状态和推送通知
我有一个服务器,可以成功生成推送通知并将其发送到设备。在应用程序端,如果用户已经在应用程序中,或者如果用户从通知进入应用程序,我可以轻松地“找到”通知并运行必要的代码来操作通知(调用应用程序委托,并将通知存储在NSUserDefaults中,然后我可以在整个应用程序中访问该通知) 但是,如果用户在后台运行应用程序(例如,用户在应用程序中,但随后切换到另一个应用程序),当用户从应用程序图标重新打开应用程序时,应用程序只会返回到它所处的上一个状态,并且不会实际调用任何代码(这是您所期望的) 我试图弄清楚的是,如何再次调用AppDelegate以便在返回当前状态之前提取通知,或者如何调用某些代码以便截获通知Swift 应用程序状态和推送通知,swift,notifications,push-notification,swift2,Swift,Notifications,Push Notification,Swift2,我有一个服务器,可以成功生成推送通知并将其发送到设备。在应用程序端,如果用户已经在应用程序中,或者如果用户从通知进入应用程序,我可以轻松地“找到”通知并运行必要的代码来操作通知(调用应用程序委托,并将通知存储在NSUserDefaults中,然后我可以在整个应用程序中访问该通知) 但是,如果用户在后台运行应用程序(例如,用户在应用程序中,但随后切换到另一个应用程序),当用户从应用程序图标重新打开应用程序时,应用程序只会返回到它所处的上一个状态,并且不会实际调用任何代码(这是您所期望的) 我试图弄
想法?如果我正确理解了您的问题,您希望在退出后台状态时得到通知。如何使用appdelegate方法
func applicationDidBecomeActive(application: UIApplication) {
// Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
}
这是我的解决办法
func applicationDidBecomeActive(application: UIApplication) {
let installation = PFInstallation.currentInstallation()
if installation.badge != 0 {
NSUserDefaults.standardUserDefaults().setObject(true, forKey: "push")
NSNotificationCenter.defaultCenter().postNotificationName("indicatePush", object: nil)
installation.badge = 0
installation.saveEventually()
}}
对NSNotificationCenter的调用调用基类中的一个已注册方法,我在基类中将push变量设置为true
viewDidLoad
上,我注册了两个方法(您可能只需要其中一个):
NSNotificationCenter.defaultCenter().addObserver(self,选择器:“AppApplicationsActive:”,名称:UIApplicationIDBecMeactiveNotification,对象:nil)
NSNotificationCenter.defaultCenter().addObserver(self,选择器:“ApplicationEntedForeGround:”,名称:UIApplicationWillEnterForegroundNotification,对象:nil)func appplicationIsActive (notification: NSNotification){
refresh()
}
你完了 有点。情况如下:用户在收到通知后启动了应用程序。由于应用程序已有效恢复,因此不会调用AppDelegate。由于未被调用,因此不会调用DidReceiveEmoteNotification,因此会忽略通知。那么,如果用户只是简单地恢复应用程序,我将如何拦截通知呢?让我重新表述一下:应用程序委托是通过ApplicationIDBecomeActive调用的。我可以并且确实检查“徽章号码”。如果它不是零,我在NSUserDefaults中设置通知指示器。但是,在此之后,当应用程序实际恢复时,视图已处于活动状态(viewDidLoad不运行)。因此,检查“通知”的代码不会被调用。在ViewWillApearMean中调用它如何,而不是说viewWillAppear(每次加载视图时都应该调用它)。实际上没有调用视图方法…应用程序只打开视图。毕竟,它是/正在后台运行,所以它“已经出现”你说“当用户从应用图标重新打开应用程序时,应用程序只会返回到它所处的最后一个状态,实际上没有调用任何代码”,并且当你从后台改为活动状态时,会调用yes ViewWillAppeal