请查看下面的代码
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: {}) }
请帮助我解决这个问题记住我的应用程序在前台模式下工作正常
解决方法 1.首先你应该在应用程序“功能”中启用后台提取2.然后在app delegate中使用以下代码
在AppDelegate类中添加以下代码:
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 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("",{ + String(format: "%02X",)}) print("Got token data! \(tokenString)") UserDefaults.standard.set(tokenString,forKey: "device_token") UserDefaults.standard.synchronize() }总结
以上是内存溢出为你收集整理的ios – 如何在应用程序处于后台时打开特定视图控制器on didReceiveRemoteNotification全部内容,希望文章能够帮你解决ios – 如何在应用程序处于后台时打开特定视图控制器on didReceiveRemoteNotification所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)