应用程序状态和推送通知

时间:2015-09-26 17:53:17

标签: swift notifications push-notification swift2

我有一台成功生成推送通知并将其发送到设备的服务器。在应用程序方面,如果用户已经在应用程序中,或者如果用户从通知中输入应用程序,我可以轻松地找到'通知并运行必要的代码来处理通知(app委托被调用,通知存储在NSUserDefaults中,然后我可以在整个应用程序中访问)。

但是,如果用户在后台运行应用程序(例如,用户在应用程序中,但随后切换到另一个应用程序),则用户从应用程序图标重新打开应用程序 ,应用程序只返回到它所处的最后一个状态,并且实际上没有调用任何代码(这是你期望的那种)。

我想弄清楚的是如何再次调用AppDelegate以便我可以在之前提取通知我返回当前状态或者如何调用某些代码以便我可以拦截通知。

思想?

2 个答案:

答案 0 :(得分:0)

如果我正确理解了您的问题,您希望在退出背景状态时收到通知。 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.
}

答案 1 :(得分:0)

这是我的解决方案。

  1. On' App Resume',在AppDelegate中,如果徽章值大于0,我会检查徽章并存储推送:

    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

  2. 在子类中,在viewDidLoad上我注册了两个方法(你可能只需要其中一个):

    NSNotificationCenter.defaultCenter()。addObserver(self,selector:" appplicationIsActive:",name:UIApplicationDidBecomeActiveNotification,object:nil)         NSNotificationCenter.defaultCenter()。addObserver(self,selector:" applicationEnteredForeground:",name:UIApplicationWillEnterForegroundNotification,object:nil)

  3. 将通话添加到服务器''两种方法之一。就我而言:

    func appplicationIsActive (notification: NSNotification){
        refresh()    
    }
    
  4. 你已经完成了!