swift 極光推送

1热康、項目配置

1.1 導入SDK

1.1.1 CocoaPods導入

# platform :ios, '9.0'
target 'JGPush' do
  use_frameworks!
  pod 'JPush'
end

1.1.2 手動導入

在極光官網下載最新SDK亮靴,將SDK包解壓宴树,在Xcode中選擇“Add files to 'Your project name'...”藐握,將解壓后的lib子文件夾(包含JPUSHService.h护糖、jpush-ios-x.x.x.a褥芒、jcore-ios-x.x.x.a)添加到你的工程目錄中。

添加Framework嫡良、CFNetwork.framework锰扶、CoreFoundation.framework、CoreTelephony.framework寝受、SystemConfiguration.framework坷牛、CoreGraphics.framework、Foundation.framework很澄、UIKit.framework京闰、Security.framework颜及、libz.tbd (Xcode7以下版本是libz.dylib)、AdSupport.framework (獲取IDFA需要蹂楣;如果不使用IDFA俏站,請不要添加)、UserNotifications.framework (Xcode8及以上)痊土、libresolv.tbd (JPush 2.2.0及以上版本需要, Xcode7以下版本是libresolv.dylib)(注意:

如果集成JPush 3.0.1及以上版本肄扎, 且同時集成極光其他SDK(如:JMessage 3.0.0及以上版本) 1. Cocoapods導入,建議都更新為線上最新版本赁酝,來避免Jcore版本不一致導致的沖突反浓。 2. 手動導入,在工程中只需保留一個最新版本的jcore-ios-x.x.x.a靜態(tài)庫文件赞哗。)

1.2導入SDK所需要依賴的庫雷则,添加Framework

CFNetwork.framework
CoreFoundation.framework
CoreTelephony.framework
SystemConfiguration.framework
CoreGraphics.framework
Foundation.framework
UIKit.framework
Security.framework
Xcode 7需要的是libs.tbd; Xcode 7以下版本是libs.dylib
Adsupport.framework (獲取IDFA需要;如果不使用IDFA肪笋,請不要添加)
UserNotifications.framework (Xcode8及以上)
libresolv.tbd (JPush 2.2.0及以上版本需要)


framework配置.png

1.3 其他配置

Build Settings:

如果你的工程需要支持小于7.0的iOS系統(tǒng)月劈,請到Build Settings 關閉 bitCode 選項,否則將無法正常編譯通過藤乙。設置 Search Paths 下的 User Header Search Paths 和 Library Search Paths猜揪,比如SDK文件夾(默認為lib)與工程文件在同一級目錄下,則都設置為"$(SRCROOT)/{靜態(tài)庫所在文件夾名稱}"即可坛梁。####Capabilities:
如使用Xcode8及以上環(huán)境開發(fā)而姐,請開啟Application Target的Capabilities->Push Notifications選項,如圖:


開啟推送服務.png

info.plist配置:

在項目的info.plist中添加一個Key:NSAppTransportSecurity划咐,類型為字典類型拴念。然后給它添加一個NSExceptionDomains,類型為字典類型褐缠;把需要的支持的域添加給NSExceptionDomains政鼠。其中jpush.cn作為Key,類型為字典類型队魏。每個域下面需要設置2個屬性:NSIncludesSubdomains公般、NSExceptionAllowsInsecureHTTPLoads。 兩個屬性均為Boolean類型胡桨,值分別為YES官帘、YES。


info.png

2昧谊、工程代碼部分

目前極光沒有swift版本刽虹,因此需要建立一個橋接文件,在里面添加如下代碼

#import "JPUSHService.h"
// iOS10注冊APNs所需頭文件
#ifdef NSFoundationVersionNumber_iOS_9_x_Max
#import <UserNotifications/UserNotifications.h>
#endif
// 如果需要使用 idfa 功能所需要引入的頭文件(可選)
//#import <AdSupport/AdSupport.h>
Bridging.png

下面是真正的代碼了
appdelegate 里的 didFinishLaunchingWithOptions 方法里(不要試圖用我的appKey了揽浙,我這么謹慎的人當然放的假的了状婶,自己去極光官網上自己的項目里拿appKey 了)

//推送代碼
let entity = JPUSHRegisterEntity()
entity.types = 1 << 0 | 1 << 1 | 1 << 2
JPUSHService.register(forRemoteNotificationConfig: entity, delegate: self)
 //需要IDFA 功能意敛,定向投放廣告功能
 //let advertisingId = ASIdentifierManager.shared().advertisingIdentifier.uuidString
JPUSHService.setup(withOption: launchOptions, appKey: "7a84363c8be53oba2c8d1a72", channel: "App Store", apsForProduction: false, advertisingIdentifier: nil)

在AppDelegate里添加JPUSHRegisterDelegate代理馅巷,并且實現(xiàn)如下代理方法

@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)
        }
        // 需要執(zhí)行這個方法膛虫,選擇是否提醒用戶,有Badge钓猬、Sound稍刀、Alert三種類型可以選擇設置
        completionHandler(Int(UNNotificationPresentationOptions.alert.rawValue))
    }
    
    @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)
        }
        // 系統(tǒng)要求執(zhí)行這個方法
        completionHandler()
    }
    
    //點推送進來執(zhí)行這個方法
    func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
        JPUSHService.handleRemoteNotification(userInfo)
        completionHandler(UIBackgroundFetchResult.newData)
        
    }
    //系統(tǒng)獲取Token
    func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
        JPUSHService.registerDeviceToken(deviceToken)
    }
    //獲取token 失敗
    func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) { //可選
        print("did Fail To Register For Remote Notifications With Error: \(error)")
    }
    func jpushNotificationCenter(_ center: UNUserNotificationCenter!, openSettingsFor notification: UNNotification?) {
        print("hello")
    }

推送小紅角標,程序從后臺進入前臺的時候我們要消除它

//后臺進前臺
func applicationDidEnterBackground(_ application: UIApplication) {
    //銷毀通知紅點
    UIApplication.shared.applicationIconBadgeNumber = 0
    JPUSHService.setBadge(0)
    UIApplication.shared.cancelAllLocalNotifications()
}
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末敞曹,一起剝皮案震驚了整個濱河市账月,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌澳迫,老刑警劉巖局齿,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異橄登,居然都是意外死亡抓歼,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進店門拢锹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來谣妻,“玉大人,你說我怎么就攤上這事卒稳√0耄” “怎么了?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵充坑,是天一觀的道長减江。 經常有香客問我,道長捻爷,這世上最難降的妖魔是什么您市? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮役衡,結果婚禮上茵休,老公的妹妹穿的比我還像新娘。我一直安慰自己手蝎,他們只是感情好榕莺,可當我...
    茶點故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著棵介,像睡著了一般钉鸯。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上邮辽,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天唠雕,我揣著相機與錄音贸营,去河邊找鬼。 笑死岩睁,一個胖子當著我的面吹牛钞脂,可吹牛的內容都是我干的。 我是一名探鬼主播捕儒,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼冰啃,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了刘莹?” 一聲冷哼從身側響起阎毅,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎点弯,沒想到半個月后扇调,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡抢肛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年狼钮,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片雌团。...
    茶點故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡燃领,死狀恐怖,靈堂內的尸體忽然破棺而出锦援,到底是詐尸還是另有隱情猛蔽,我是刑警寧澤,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布灵寺,位于F島的核電站曼库,受9級特大地震影響,放射性物質發(fā)生泄漏略板。R本人自食惡果不足惜毁枯,卻給世界環(huán)境...
    茶點故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望叮称。 院中可真熱鬧种玛,春花似錦、人聲如沸瓤檐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽挠蛉。三九已至祭示,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間谴古,已是汗流浹背质涛。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工稠歉, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人汇陆。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓怒炸,卻偏偏與公主長得像,于是被迫代替她去往敵國和親瞬测。 傳聞我的和親對象是個殘疾皇子横媚,可洞房花燭夜當晚...
    茶點故事閱讀 45,060評論 2 355

推薦閱讀更多精彩內容

  • iOS SDK 集成指南SDK說明適用版本本文匹配的 SDK版本:r2.1.5 以后纠炮。查看最近更新了解最新的SDK...
    sillen閱讀 868評論 0 0
  • iOS 平臺上推送通知月趟,只有 APNs 這個官方的通道,是可以隨時送達的恢口。一般開發(fā)者都是自己部署應用服務器向 AP...
    YHWXQ簡簡單單的生活閱讀 1,550評論 0 3
  • 版本記錄 前言 前一篇已經對極光推送產品架構和服務進行了介紹孝宗,這一篇則只對ios客戶端的集成和使用等狀況進行了說明...
    刀客傳奇閱讀 1,194評論 0 0
  • 第一步 先在開發(fā)者賬號創(chuàng)建app id,即創(chuàng)建應用程序ID 詳細步驟: 1耕肩、登陸蘋果開發(fā)者網站進入開發(fā)者賬戶因妇。 從...
    小緈福閱讀 3,112評論 0 5
  • 昨天剛看完電視劇《最好的我們》,不得不說拍的很好猿诸,無論是演員婚被,劇情等各方面吧,我都覺得很好梳虽。要先說明一下址芯,...
    十塊錢5閱讀 203評論 0 3