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