- Podfile文件中添加JPush:
# 极光推送
pod 'JPush', '~> 3.0.7'
- 封装JPush工具类(JPushTool.swift):
/*
JPush的工具类
*/
import UIKit
class JPushTool: NSObject {
//Jpush配置
class func config(launchOptions: [UIApplicationLaunchOptionsKey: Any]?,delegate: JPUSHRegisterDelegate) {
let jpush = JPUSHRegisterEntity()
jpush.types = Int(JPAuthorizationOptions.alert.rawValue|JPAuthorizationOptions.badge.rawValue|JPAuthorizationOptions.sound.rawValue)
JPUSHService.register(forRemoteNotificationConfig: jpush, delegate: delegate)
JPUSHService.setup(withOption: launchOptions, appKey: "6e6d8c084d8ad80ecf23aead", channel: "App Store", apsForProduction: true)
JPUSHService.registrationIDCompletionHandler { (resCode, registrationID) in
if resCode == 0{
printLog("registrationID获取成功")
}else {
printLog("registrationID获取失败")
}
}
}
//设置tags&alias
class func setTagsWithAlias (tags:Array<String>?,alias:String?){
if alias != nil {
JPUSHService.setAlias(alias!, completion: { (iResCode, iAlias, seq) in
if iResCode == 0 {
printLog("alias 设置成功!")
}else {
printLog("alias 设置失败!")
}
}, seq: 1)
}
if tags != nil {
var tagsSet = Set<String>()
for elementString in tags! {
tagsSet.insert(elementString)
}
JPUSHService.setTags(tagsSet, completion: { (iResCode, iTags, seq) in
if iResCode == 0 {
printLog("tags 设置成功!")
}else {
printLog("tags 设置失败!")
}
}, seq: 2)
}
}
//删除tags&alias
class func deleteTagsWithAlias (){
JPUSHService.deleteAlias({ (iResCode, iAlias, seq) in
if iResCode == 0 {
printLog("alias 删除成功!")
}else {
printLog("alias 删除失败!")
}
}, seq: 1)
JPUSHService.cleanTags({ (iResCode, iTags, seq) in
if iResCode == 0 {
printLog("tags 删除成功!")
}else {
printLog("tags 删除失败!")
}
}, seq: 2)
}
/// 跳转详情页
///
/// - Parameter userInfo: 传递的dict
class func jumpToDetailViewController(userInfo:Dictionary<String, Any>?) {
guard userInfo != nil else {
return
}
// let model = HomeEntranceModel.deserialize(from: userInfo!)
// JumpDetailVCTool.share.jumpDetailVCWithModel(model: model)
}
}
- AppDelegate.swift文件中插入代码:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
JPushTool.config(launchOptions: launchOptions, delegate: self)
application.applicationIconBadgeNumber = 0//清空桌面icon的未读消息数
return true
}
func applicationWillEnterForeground(_ application: UIApplication) {
// Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background.
application.applicationIconBadgeNumber = 0//清空桌面icon的未读消息数
}
- JPush相关的AppDelegate扩展:
//MARK: - 极光推送
extension AppDelegate: JPUSHRegisterDelegate {
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
//注册 DeviceToken
JPUSHService.registerDeviceToken(deviceToken)
}
//iOS7 - iOS10
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
JPUSHService.handleRemoteNotification(userInfo)
completionHandler(UIBackgroundFetchResult.newData)
JPushTool.jumpToDetailViewController(userInfo: userInfo as? Dictionary<String, Any>)
}
//iOS6 及以下的系统版本
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any]) {
JPUSHService.handleRemoteNotification(userInfo)
JPushTool.jumpToDetailViewController(userInfo: userInfo as? Dictionary<String, Any>)
}
@available(iOS 10.0, *)
func jpushNotificationCenter(_ center: UNUserNotificationCenter!, didReceive response: UNNotificationResponse!, withCompletionHandler completionHandler: (() -> Void)!) {
let userInfo = response.notification.request.content.userInfo
if response.notification.request.trigger is UNPushNotificationTrigger {
JPUSHService.handleRemoteNotification(userInfo)
}
//系统要求执行这个方法
completionHandler()
JPushTool.jumpToDetailViewController(userInfo: userInfo as? Dictionary<String, Any>)
}
@available(iOS 10.0, *)
func jpushNotificationCenter(_ center: UNUserNotificationCenter!, willPresent notification: UNNotification!, withCompletionHandler completionHandler: ((Int) -> Void)!) {
let userInfo = notification.request.content.userInfo
if notification.request.trigger is UNPushNotificationTrigger {
JPUSHService.handleRemoteNotification(userInfo)
}
// 需要执行这个方法,选择是否提醒用户,有Badge、Sound、Alert三种类型可以选择设置
completionHandler(Int(UNNotificationPresentationOptions.alert.rawValue))
}
}
网友评论