如何在应用程序处于后台时打开特定视图控制器on didReceiveRemoteNotification [英] How to Open a Specific View Controller On didReceiveRemoteNotification when application is in back ground
问题描述
我正在实现一个警报,我从服务器获取pushNotification,我正在接收完美的推送通知,它在前台模式下工作正常但是当应用程序在后台输入时它只获得推送通知但没有加载我想要的视图加载
I am implementing a alarm where i am getting pushNotification from server, i am receiving perfect push notification and it is working fine in foreground mode but when application enter in background then it getting only push notification but not loading the view which i want to load
请检查下面的代码
func registerForPushNotifications(application: UIApplication) {
let notificationSettings = UIUserNotificationSettings(
forTypes: [.Badge, .Sound, .Alert], categories: nil)
application.registerUserNotificationSettings(notificationSettings)
}
此方法从调用didFinishLaunchingWithOptions
func application(application: UIApplication, didRegisterUserNotificationSettings notificationSettings: UIUserNotificationSettings) {
if notificationSettings.types != .None {
application.registerForRemoteNotifications()
}
}
func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) {
let tokenChars = UnsafePointer<CChar>(deviceToken.bytes)
var tokenString = ""
for i in 0..<deviceToken.length {
tokenString += String(format: "%02.2hhx", arguments: [tokenChars[i]])
}
NSUserDefaults.standardUserDefaults().setObject(tokenString, forKey: "deviceToken")
}
这是最后的方法
func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) {
print(userInfo)
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let navigationController = storyboard.instantiateViewControllerWithIdentifier("AlarmDetailsController") as! AlarmDetailsController
//let dVC:AlarmDetailsController = navigationController.topViewController as! AlarmDetailsController
navigationController.isPushNotification = true
self.window?.rootViewController?.presentViewController(navigationController, animated: true, completion: {})
}
请帮助我解决这个问题记住我的应用程序在前台模式下正常工作
Please help me for that problem Remember My Application is working fine in foreground mode
推荐答案
1.首先,您应该在应用程序Capabilities中使用后台获取
2.然后在app delegate中使用以下代码
1.Firstly you should on Background Fetch in app "Capabilities" 2. Then use following code in app delegate
在AppDelegate类中添加以下代码:
In AppDelegate class add following code:
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
// print(userInfo)
let vc = mainStoryBoard.instantiateViewController(withIdentifier: "destinationVC") as! destinationVC
self.visibleNavController.pushViewController(vc, animated: true)
}
对于iOS 10,请使用以下代码:
1.Import
For iOS 10 use following code: 1.Import
import UserNotifications
前景提取
@available(iOS 10.0, *)
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (_ options: UNNotificationPresentationOptions) -> Void) {
var userInfo = NSDictionary()
userInfo = notification.request.content.userInfo as NSDictionary
let pay = userInfo as NSDictionary
let driverLocationVC = mainStoryBoard.instantiateViewController(withIdentifier: "destinationVC") as! destinationVC
self.visibleNavController.pushViewController(driverLocationVC, animated: true)
}
背景资料
@available(iOS 10.0, *)
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
print("Userinfo \(response.notification.request.content.userInfo)")
var userInfo = NSDictionary()
userInfo = response.notification.request.content.userInfo as NSDictionary
print(userInfo)
let driverLocationVC = mainStoryBoard.instantiateViewController(withIdentifier: "DriverLocationVC") as! DriverLocationVC
self.visibleNavController.pushViewController(driverLocationVC, animated: true)
}
对于设备令牌提取
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
let tokenString = deviceToken.reduce("", {$0 + String(format: "%02X", $1)})
print("Got token data! \(tokenString)")
UserDefaults.standard.set(tokenString, forKey: "device_token")
UserDefaults.standard.synchronize()
}
这篇关于如何在应用程序处于后台时打开特定视图控制器on didReceiveRemoteNotification的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!