iOS 集成極光推送,繞過一些坑

前言

最近公司要求把維護(hù)期的項(xiàng)目都集成極光推送薪者,集成期間遇到一些小坑竿裂,特此在這總結(jié)玉吁!

極光推送能干嘛?

1.為 JPush Server 上報(bào) Device Token铛绰,免除開發(fā)者管理 Device Token 的麻煩
2.支持iOS APNs推送
3.前臺(tái)運(yùn)行時(shí)诈茧,可接收由JPush下發(fā)的(透?jìng)鞯模┳远x消息
4.靈活管理接收用戶:Tag(標(biāo)簽分組)、Alias(用戶別名)捂掰、RegistrationID(設(shè)備注冊(cè)ID)

知道能干嘛了那就開始動(dòng)手集成??

配push證書:

此步驟直接看極光的 文檔即可,寫得很詳細(xì)??

導(dǎo)入必要的框架

CFNetwork.framework
CoreFoundation.framework
CoreTelephony.framework
SystemConfiguration.framework
CoreGraphics.framework
Foundation.framework
UIKit.framework
Security.framework
Xcode7需要的是libz.tbd敢会;Xcode7以下版本是libz.dylib

創(chuàng)建并配置PushConfig.plist文件

在你的工程中創(chuàng)建一個(gè)新的Property List文件,并將其命名為PushConfig.plist这嚣,文件所含字段如下:
CHANNEL
指明應(yīng)用程序包的下載渠道鸥昏,為方便分渠道統(tǒng)計(jì),具體值由你自行定義姐帚,如:App Store吏垮。
APP_KEY
填寫管理Portal上創(chuàng)建應(yīng)用后自動(dòng)生成的AppKey值。請(qǐng)確保應(yīng)用內(nèi)配置的 AppKey 與第1步在 Portal 上創(chuàng)建應(yīng)用后生成的 AppKey 一致。
APS_FOR_PRODUCTION
1.3.1版本新增膳汪,用于標(biāo)識(shí)當(dāng)前應(yīng)用所使用的APNs證書環(huán)境唯蝶。
0 (默認(rèn)值)表示采用的是開發(fā)證書,1 表示采用生產(chǎn)證書發(fā)布應(yīng)用遗嗽。
注:此字段的值要與Build Settings的Code Signing配置的證書環(huán)境一致粘我。
在1.2.2或之前版本的配置文件中,有 TEST_MODE 這個(gè)鍵痹换,新版的SDK不再使用征字,可以將它刪除。

PushConfig.png

核心代碼

首先在AppDelegate.m 導(dǎo)入#import "JPUSHService.h"
~didFinishLaunchingWithOptions方法貼上核心代碼:

  //極光推送
    if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) {
        //可以添加自定義categories
        [JPUSHService registerForRemoteNotificationTypes:(UIUserNotificationTypeBadge |
                                                          UIUserNotificationTypeSound |
                                                          UIUserNotificationTypeAlert)
                                              categories:nil];
    } else {
        //categories 必須為nil
        [JPUSHService registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge |
                                                          UIRemoteNotificationTypeSound |
                                                          UIRemoteNotificationTypeAlert)
                                              categories:nil];
    }
    //JAppKey : 是你在極光推送申請(qǐng)下來的appKey Jchannel : 可以直接設(shè)置默認(rèn)值即可 Publish channel
    [JPUSHService setupWithOption:launchOptions appKey:JAppKey
                          channel:Jchannel apsForProduction:NO]; //如果是生產(chǎn)環(huán)境應(yīng)該設(shè)置為YES
    ```
之后還需要加入以下方法:
  • (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
    // Required
    [JPUSHService registerDeviceToken:deviceToken];
    }

-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo{

NSString *alert = [[userInfo objectForKey:@"aps"] objectForKey:@"alert"];

if (application.applicationState == UIApplicationStateActive) {

    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"推送消息"
                                                        message:alert
                                                       delegate:self
                                              cancelButtonTitle:@"OK"
                                              otherButtonTitles:nil];
    [alertView show];
}
[application setApplicationIconBadgeNumber:0];

[JPUSHService handleRemoteNotification:userInfo];

}

我們還能監(jiān)聽極光推送生命周期通知:

API里面提供了下面 5 種類型的通知:

extern NSString * const kJPFNetworkDidSetupNotification; // 建立連接

extern NSString * const kJPFNetworkDidCloseNotification; // 關(guān)閉連接

extern NSString * const kJPFNetworkDidRegisterNotification; // 注冊(cè)成功

extern NSString * const kJPFNetworkDidLoginNotification; // 登錄成功

溫馨提示:
Registration id 需要在執(zhí)行到kJPFNetworkDidLoginNotification的方法里獲取

extern NSString * const kJPFNetworkDidReceiveMessageNotification; // 收到自定義消息(非APNS)

其中娇豫,kJPFNetworkDidReceiveMessageNotification傳遞的數(shù)據(jù)可以通過NSNotification中的userInfo方法獲取匙姜,包括標(biāo)題、內(nèi)容冯痢、extras信息等

  
#### 使用方法
###### Tag(標(biāo)簽分組)& Alias(用戶別名)

//用于綁定Tag的 根據(jù)自己想要的Tag加入氮昧,值得注意的是這里Tag需要用到NSSet
[JPUSHService setTags:[NSSet set]callbackSelector:nil object:self];
//用于綁定Alias的 使用NSString 即可
[JPUSHService setAlias:@"" callbackSelector:nil object:self];

如果想要即要綁定Alias也要綁定Tag,必須使用以下方法,已被坑

//用于同時(shí)綁定Tag與Alias的
[JPUSHService setTags:[NSSet set] alias:@"" callbackSelector:nil target:self];

###### 一般在項(xiàng)目哪里綁定呢系羞?
我主要是在項(xiàng)目的登錄成功或者自動(dòng)登錄后郭计,使用用戶的唯一標(biāo)示進(jìn)行綁定,或者根據(jù)需求添加一些前綴

###### 去除綁定
用戶進(jìn)行退出登錄的方法里添加去除綁定即可椒振,值得注意的是用到即時(shí)通訊的話,被擠下線也要去除綁定梧乘,已被坑澎迎,貼代碼:

//沒有值就代表去除
[JPUSHService setTags:[NSSet set]callbackSelector:nil object:self];
[JPUSHService setAlias:@"" callbackSelector:nil object:self];
[JPUSHService setTags:[NSSet set] alias:@"" callbackSelector:nil target:self];


#### 測(cè)試是否集成成功
到極光[平臺(tái)](https://www.jpush.cn/push/apps/c8d9798cc63b93bf2c1ed834/push/notification/)測(cè)試推送:

![測(cè)試推送.jpg](http://upload-images.jianshu.io/upload_images/313852-ffaf1b475c5debb7.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
只要推送成功,剩下的由后臺(tái)根據(jù)Alias或者Tag來推送就可以了??


#### 補(bǔ)充
關(guān)于推送來的小紅點(diǎn)角標(biāo)选调,簡(jiǎn)稱badge夹供。默認(rèn)是極光推送過來一次角標(biāo)+1,這個(gè)值badge是由后臺(tái)推送過來的消息傳的值仁堪,但是當(dāng)用戶看了哮洽,角標(biāo)會(huì)默認(rèn)被清除,如果你沒有去告訴后臺(tái)的話弦聂,后臺(tái)下次推送過來鸟辅,你的badge顯示的值還是你上一次的值加一,那如何解決這個(gè)問題呢莺葫?
細(xì)心的開發(fā)者會(huì)去查看極光推送的API文檔匪凉,但是我覺得看文檔就有點(diǎn)麻煩了,所以我直接去看``JPUSHService.h``文件捺檬,所以我發(fā)現(xiàn)極光為這個(gè)問題提供了解決的方法

/*!

  • @abstract 設(shè)置角標(biāo)(到服務(wù)器)
  • @param value 新的值. 會(huì)覆蓋服務(wù)器上保存的值(這個(gè)用戶)
  • @discussion 本接口不會(huì)改變應(yīng)用本地的角標(biāo)值.
  • 本地仍須調(diào)用 UIApplication:setApplicationIconBadgeNumber 函數(shù)來設(shè)置腳標(biāo).
  • 本接口用于配合 JPush 提供的服務(wù)器端角標(biāo)功能.
  • 該功能解決的問題是, 服務(wù)器端推送 APNs 時(shí), 并不知道客戶端原來已經(jīng)存在的角標(biāo)是多少, 指定一個(gè)固定的數(shù)字不太合理.
  • JPush 服務(wù)器端腳標(biāo)功能提供:
    • 通過本 API 把當(dāng)前客戶端(當(dāng)前這個(gè)用戶的) 的實(shí)際 badge 設(shè)置到服務(wù)器端保存起來;
    • 調(diào)用服務(wù)器端 API 發(fā) APNs 時(shí)(通常這個(gè)調(diào)用是批量針對(duì)大量用戶),
  • 使用 "+1" 的語(yǔ)義, 來表達(dá)需要基于目標(biāo)用戶實(shí)際的 badge 值(保存的) +1 來下發(fā)通知時(shí)帶上新的 badge 值;
    */
  • (BOOL)setBadge:(NSInteger)value;
而且我還發(fā)現(xiàn)極光推送也能收集Crash日志,之前只知道友盟與聽云

/*!

  • @abstract 開啟Crash日志收集
  • @discussion 默認(rèn)是關(guān)閉狀態(tài).
    */
  • (void)crashLogON;

如何改變推送過來的提示音呢再层?
只需要讓服務(wù)端設(shè)置sound字段就可以了。
>iOS 通知聲音 (sound)
APNs通知,通過這個(gè)字段指定聲音聂受。默認(rèn)為default蒿秦,即系統(tǒng)默認(rèn)聲音。 
如果設(shè)置為空值蛋济,則為靜音渤早。
如果設(shè)置為特殊的名稱,則需要你的App里配置了該聲音才可以正常瘫俊。

#### [JPushSDK資源下載](http://docs.jpush.io/resources/)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末鹊杖,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子扛芽,更是在濱河造成了極大的恐慌骂蓖,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件川尖,死亡現(xiàn)場(chǎng)離奇詭異登下,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)叮喳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門被芳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人馍悟,你說我怎么就攤上這事畔濒。” “怎么了锣咒?”我有些...
    開封第一講書人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵侵状,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我毅整,道長(zhǎng)趣兄,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任悼嫉,我火速辦了婚禮艇潭,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘戏蔑。我一直安慰自己蹋凝,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開白布辛臊。 她就那樣靜靜地躺著仙粱,像睡著了一般。 火紅的嫁衣襯著肌膚如雪彻舰。 梳的紋絲不亂的頭發(fā)上伐割,一...
    開封第一講書人閱讀 51,165評(píng)論 1 299
  • 那天候味,我揣著相機(jī)與錄音,去河邊找鬼隔心。 笑死白群,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的硬霍。 我是一名探鬼主播帜慢,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼唯卖!你這毒婦竟也來了粱玲?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤拜轨,失蹤者是張志新(化名)和其女友劉穎抽减,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體橄碾,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡卵沉,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了法牲。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片史汗。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖拒垃,靈堂內(nèi)的尸體忽然破棺而出停撞,到底是詐尸還是另有隱情,我是刑警寧澤恶复,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布怜森,位于F島的核電站,受9級(jí)特大地震影響谤牡,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜姥宝,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一翅萤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧腊满,春花似錦套么、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至肃弟,卻和暖如春玷室,著一層夾襖步出監(jiān)牢的瞬間零蓉,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工穷缤, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留敌蜂,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓津肛,卻偏偏與公主長(zhǎng)得像章喉,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子身坐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容