2016-08-02 8 views
0

プッシュ通知とローカル通知も使用していますが、フォアグラウンド通知は正常に機能していますが、この状態でアプリケーションを終了すると、通知をタップすると特定の表示をリダイレクトできなくなります。なぜAPNSプッシュ通知とローカル通知を処理できないのですか?

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 

     // Check if launched from notification 
     // 1 
     if let notification = launchOptions?[UIApplicationLaunchOptionsRemoteNotificationKey] as? [String: AnyObject] { 
      // 2 
      let aps = notification["aps"] as! [String: AnyObject] 
      //Redirect to notification view 
      handlePushMessage(aps) 
     }else if let notification = launchOptions?[UIApplicationLaunchOptionsLocalNotificationKey] as? [String: AnyObject] { 
      // 2 
      self.postData = notification["aps"] as! [String: AnyObject] 
      //Redirect to notification view 
      didTapNotification() 
     }else{ 
      //Session 
      //Redirect to Main view 
      checkUserSession() 
     } 
    return true 
} 

私はこのアプリが非アクティブであるときAPNS通知およびローカル通知の両方から、この問題に直面したり、私はあちこちに解決策を見つける手助けterminate.Please直面しています。

+0

アプリをバックグラウンドで実行中の通知をクリックすると、コードがバックグラウンドにあり、通知をクリックしたときではなく、アプリが再び起動される場合にのみ機能します –

+0

次に、アプリをバックグラウンドで管理する方法/非アクティブな状態特定のビューにリダイレクトする方法は? –

+0

私は通知をクリックしているときに、特定のページをリダイレクトしませんバックグラウンド状態で私のアプリを時間。 –

答えて

0

最後に、私は今、APNSプッシュ通知とローカル通知、その作業罰金を管理するためのソリューションを得ました。

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 

UIApplication.sharedApplication().setStatusBarStyle(UIStatusBarStyle.LightContent, animated: true) 

    //Register here For Notification 

    if #available(iOS 9, *) { 

     let notificationTypes: UIUserNotificationType = [UIUserNotificationType.Alert, UIUserNotificationType.Badge, UIUserNotificationType.Sound] 
     let pushNotificationSettings = UIUserNotificationSettings(forTypes: notificationTypes, categories: nil) 
     application.registerUserNotificationSettings(pushNotificationSettings) 
     application.registerForRemoteNotifications() 

    }else{ 

     UIApplication.sharedApplication().registerUserNotificationSettings(
      UIUserNotificationSettings(forTypes: .Alert, categories: nil)) 
     application.registerForRemoteNotifications() 
    } 

dispatch_async(dispatch_get_main_queue()) { 
     // Check if launched from notification 
     // 1 
     if let notification = launchOptions?[UIApplicationLaunchOptionsRemoteNotificationKey] as? [String: AnyObject] { 
      // 2 
      let aps = notification["aps"] as! [String: AnyObject] 
      handlePushMessage(aps) 
     }else if let notification = launchOptions?[UIApplicationLaunchOptionsLocalNotificationKey] as? UILocalNotification { 
      // 2 
      self.postData = notification.userInfo as! [String: AnyObject] 
      didTapNotification() 
     }else{ 
      //Session 
      checkUserSession() 
     } 
     } 

} 
0

didReceiveRemoteNotificationの機能はどうでしょう?

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) { 
    if(application.applicationState == UIApplicationStateBackground){ 



    }else if(application.applicationState == UIApplicationStateInactive){ 



    } 
} 
+0

すでに私の側で働いているのは、アプリを終了して通知をクリックしても機能していないときだけです。 –

+0

if(application.applicationState == UIApplicationStateBackground)を追加すると、{ } – Rurouni

0

このコードを試してみてください、あなたはあなたの要件に応じて変更することができます。この論理を理解するのに問題がある場合は、私に知らせてください。 completionHandlerのdidReceiveRemoteNotificationは、バックグラウンドとフォアグラウンドの両方で機能します。バックグラウンドフェッチとバックグラウンド通知をサポートするplistの適切な変更を行うことを忘れないでください。

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 
    // Override point for customization after application launch. 
    application.setMinimumBackgroundFetchInterval(UIApplicationBackgroundFetchIntervalMinimum) 

    if let notification = launchOptions?[UIApplicationLaunchOptionsRemoteNotificationKey] as? [String: AnyObject] { 
     notificationDataDict = notification; 
    } 


    return true 
} 
func handleRemoteNotificationWithUserInfo(application:UIApplication, userInfo:NSDictionary){ 

} 
func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) { 

    print(userInfo) 

    if application.applicationState != .Inactive{ 

     notificationDataDict = userInfo; 

     if let navigationController = self.window?.rootViewController as? UINavigationController{ 


      if application.applicationState == .Active{ 

       if application.backgroundRefreshStatus == .Available{ 

        completionHandler(.NewData) 

        self.handleRemoteNotificationWithUserInfo(application, userInfo: userInfo) 


       } 
       else 
       { 
        completionHandler(.NoData) 
       } 
      } 
      else{ 
       completionHandler(.NewData) 

       self.handleRemoteNotificationWithUserInfo(application, userInfo: userInfo) 
      } 

     } 


    } 
} 
関連する問題