0

In iOS 11.3 and above version Mobiles didReceiveNotification function not calling after clicking on notifications. Its working Properly in iOS 9.3 versions.

In my application i wanted to open a different view controller on tap of the application. Based on the notification type.

I am getting the notification its inserting into data base. But after clicking on notification instead of opening required view controller its opening app main screen only.

But in iOS 9 all functionalities are working fine.

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")
        }

    }
Shabbir Ahmad
  • 615
  • 7
  • 17
  • 2
    Possible duplicate of [Silent pushes not delivered to the app on iOS 11](https://stackoverflow.com/questions/44796613/silent-pushes-not-delivered-to-the-app-on-ios-11) – MRizwan33 Apr 30 '18 at 11:57
  • let remoteNotif = launchOptions?[UIApplicationLaunchOptionsKey.remoteNotification] as? NSDictionary. I used this functionality at didFinishLaunching. Its working fine. :) happy coding – Deepashree Ballodi Apr 01 '19 at 06:17

0 Answers0