程序启动之后在下边的方法中
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
setupNotification(with: Preferences.notificationConfig, launchOptions: launchOptions)
}
func setupNotification(with config: Preferences.NotificationConfig, launchOptions: [UIApplicationLaunchOptionsKey: Any]?) {
UMessage.start(withAppkey: config.appKey, launchOptions: launchOptions)
UIApplication.shared.registerForRemoteNotifications()
registerRemoteNotification()
UMessage.setLogEnabled(true)
}
func registerRemoteNotification() {
if #available(iOS 10.0, *) {
let center = UNUserNotificationCenter.current()
center.delegate = self
center.requestAuthorization(options: [.alert, .sound, .badge], completionHandler: { granted, error in
if granted && error != nil {
log.debug("注册成功")
}
})
center.getNotificationSettings(completionHandler: { setting in
log.debugExec {
log.debug(setting
)
}
})
} else {
UIApplication.shared.registerUserNotificationSettings(UIUserNotificationSettings(types: [.badge, .alert, .sound], categories: nil))
}
}
@available(iOS 10.0, *)
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
log.debug(notification.request.content.userInfo)
if notification.request.trigger is UNPushNotificationTrigger {
UMessage.setAutoAlert(false)
UMessage.didReceiveRemoteNotification(notification.request.content.userInfo)
if let userInfo: [String:Any] = notification.request.content.userInfo as? [String : Any] {
var businessData: String = userInfo["business_data"] as? String ?? ""
var type: String = userInfo["type"] as? String ?? ""
var d: String = userInfo["d"] as? String ?? ""
var p: String = userInfo["p"] as? String ?? ""
var messageClass: String = userInfo["message_class"] as? String ?? ""
//页面跳转
let messageController = WKWebViewController("\(webURL)/#/assNotice?messageclass=\(messageClass)")
Authorization.authorized {
WKTabBarControllerConfig.homeNavigationController.pushViewController(messageController, animated: true)
}
}
} else {
//应用处于前台时的本地推送接收
}
completionHandler([.badge, .sound, .alert])
}
@available(iOS 10.0, *)
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
let userInfo = response.notification.request.content.userInfo
log.debug(userInfo)
if response.notification.request.trigger is UNPushNotificationTrigger {
//应用处于后台时的远程推送接受
UMessage.didReceiveRemoteNotification(response.notification.request.content.userInfo)
} else {
//应用处于后台时的本地推送接受
}
completionHandler()
}
application 代理的实现
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
log.debugExec {
let data = NSData(data: deviceToken)
var token = data.description.trimmingCharacters(in: CharacterSet(charactersIn: "<>"))
token = token.replacingOccurrences(of: " ", with: "")
log.info("get remote notification device token:\(token)")
}
UMessage.registerDeviceToken(deviceToken)
if Account.shareAccount.phone.count > 0 {
UMessage.setAlias(Authorization.Account.username, type: "account", response: { (responseObject, _) in
log.debug(responseObject)
})
}
}
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
UMessage.didReceiveRemoteNotification(userInfo)
completionHandler(UIBackgroundFetchResult.newData)
}
func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {
log.error("register remote notification error: \(error.localizedDescription)")
}
网友评论