首页 > 解决方案 > 在 iOS 11.3 中,didReceiveNotification 函数没有在点击时调用

问题描述

iOS 11.3 及以上版本手机的didReceiveNotification 功能在点击通知后没有调用。它在 iOS 9.3 版本中正常工作。

在我的应用程序中,我想在点击应用程序时打开一个不同的视图控制器。基于通知类型。

我收到将其插入数据库的通知。但是在单击通知而不是打开所需的视图控制器后,它只打开应用程序主屏幕。

但在 iOS 9 中,所有功能都运行良好。

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {

        let aps = userInfo[AnyHashable("gcm.notification.m")]

        if application.applicationState != .inactive{

        if(aps != nil){
            print(aps)
            self.insertNotification(data: "\(aps)")
         }
        }

        if application.applicationState == .active {

        }

        else if application.applicationState == .background{

        }

        else if application.applicationState == .inactive{

            let array: [Any] = ["\(aps)"]
            self.ns.set(array, forKey: "notify")

            var notification:String = "\(aps)"

            if let range = notification.range(of: "Optional") {
                notification.removeSubrange(range)
            }

            notification = String(notification.dropLast())
            notification = String(notification.dropFirst())

            let json:String = "\(notification)"
            let encodedString : NSData = (json as NSString).data(using: String.Encoding.utf8.rawValue)! as NSData

            do {
                var finalJSON = try JSON(data: encodedString as Data)

                var activityName:String!
                var url:String!
                var serviceUrl = LMUrl()

                if(finalJSON["Notify_Click"].dictionary != nil){
                    activityName = finalJSON["Notify_Click"]["activity_name"].string!
                    url = finalJSON["Notify_Click"]["url"].string!

                    if(activityName == "BuyLeads"){

                        let calWebURL: [String] = ["Buy Leads",serviceUrl.buyLeads+"\(url)&"]
                        ns.set(calWebURL, forKey: "web2")

                        let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
                        let initialViewController:webViewController = mainStoryboard.instantiateViewController(withIdentifier: "WebView") as! webViewController
                        let navi =  UINavigationController.init(rootViewController: initialViewController)
                        self.window?.rootViewController = navi
                        self.window?.makeKeyAndVisible()


                    }

                    else if(activityName == "RC"){
                        let calWebURL: [String] = ["Report Conversion",serviceUrl.reportConversion+"\(url)&"]
                        print(calWebURL)
                        ns.set(calWebURL, forKey: "web")

                        let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
                        let initialViewController:webViewController = mainStoryboard.instantiateViewController(withIdentifier: "WebView") as! webViewController
                        self.window?.rootViewController = initialViewController
                        self.window?.makeKeyAndVisible()
                    }
                    else{
                        print("no Action")
                    }
                }else{
                    let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
                    let initialViewController:notificationsViewController = mainStoryboard.instantiateViewController(withIdentifier: "notificationViewController") as! notificationsViewController
                    self.window?.rootViewController = initialViewController
                    self.window?.makeKeyAndVisible()

                }

            }catch{

            }


        }

        else{
            print("Notification")
        }


        completionHandler(.newData)
    }





    func insertNotification(data:String!){
        let FMDBInfo:Tbl_Info3 = Tbl_Info3()

        let dateFormatter : DateFormatter = DateFormatter()
        dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
        let date = Date()
        let timestamp = dateFormatter.string(from: date)

        let time = DateFormatter.localizedString(from: NSDate() as Date, dateStyle: .medium, timeStyle: .short)
        //print(timestamp)

        FMDBInfo.notification = data as! String
        FMDBInfo.time = timestamp
        FMDBInfo.time2 = time

        print(FMDBInfo)

        let isInserted = FMDBDatabaseModel.getInstance().NotificationInsertData(FMDBInfo)
        if isInserted{
            print("Inserted")
        }else{
            print("Error while inserting data")
        }

    }

标签: iosswift4

解决方案


推荐阅读