2016-09-30 58 views

回答

15

iOS10UIUserNotificationType已经过时,用UNUserNotificationCenter

不要忘记启用此

enter image description here

为Swift3 样品看this

导入UserNotifications框架,并在AppDelegate中添加UNUserNotificationCenterDelegate

import UserNotifications 

@UIApplicationMain 
class AppDelegate: UIResponder, UIApplicationDelegate,UNUserNotificationCenterDelegate 


func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 
    // Override point for customization after application launch. 

    //create the notificationCenter 
    let center = UNUserNotificationCenter.current() 
    center.delegate = self 
    // set the type as sound or badge 
    center.requestAuthorization(options: [.sound,.alert,.badge]) { (granted, error) in 
     // Enable or disable features based on authorization 

     } 
     application.registerForRemoteNotifications() 
    return true 
} 

func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { 
    let chars = UnsafePointer<CChar>((deviceToken as NSData).bytes) 
    var token = "" 

    for i in 0..<deviceToken.count { 
token += String(format: "%02.2hhx", arguments: [chars[i]]) 
    } 

    print("Registration succeeded!") 
    print("Token: ", token) 
} 

func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: NSError) { 
    print("Registration failed!") 
} 

接收使用该委托

func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (_ options: UNNotificationPresentationOptions) -> Void) { 
    print("Handle push from foreground") 
    // custom code to handle push while app is in the foreground 
    print("\(notification.request.content.userInfo)") 
} 

func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping() -> Void) { 
    print("Handle push from background or closed") 
    // if you set a member variable in didReceiveRemoteNotification, you will know if this is from closed or background 
    print("\(response.notification.request.content.userInfo)") 
} 

更多的信息,你可以在苹果的API看到的通知Reference

+0

它像一个魅力工作。 :) 谢谢 ! – aznelite89

+2

支持前一个框架的任何想法都将被删除? – justColbs