極光推送集成(七)

版本記錄

版本號 時間
V1.0 2017.05.15

前言

前一篇已經(jīng)對ios的SDK進行了研究烹困,這一篇則對iOS SDK 常見問題進行說明。
1. 極光推送集成(一)

2. 極光推送集成(二)

3. 極光推送集成(三)

4. 極光推送集成(四)

5. 極光推送集成(五)

6. 極光推送集成(六)

下面說一下iOS SDK 的常見問題航厚。

iOS SDK 常見問題

一、iOS 9集成

1.iOS 9變動影響SDK部分:

  • 增加了bitCode編碼格式,當SDK不支持bitCode時井誉,用戶集成時無法開啟bitCode選項.
    • 現(xiàn)象:用戶集成SDK后無法編譯通過抡句,錯誤日志里包含了bitCode的相關(guān)錯誤信息
  • 默認使用https連接,如果請求為http,需要手動配置plist來支持http服務(wù)滩租,當前我們的服務(wù)器請求都走http服務(wù)赋秀。
    • 現(xiàn)象:用戶集成SDK后,所有JPush相關(guān)的http服務(wù)都提示連接錯誤或者連接超時,可能是此問題律想。

2.bitCode解決方式

  • JPush iOS SDK v1.8.7 及以上版本的SDK,已經(jīng)增加對 iOS 9 新特性 bitCode 的支持.JMessage iOS SDK v2.0.0 及以上版本支持bitCode猎莲。

3.Https解決方式

SDK未提供https地址版本時

  • 需要用戶主動在當前項目的Info.plist中添加NSAppTransportSecurity類型Dictionary。
  • 在NSAppTransportSecurity下添加NSAllowsArbitraryLoads類型Boolean,值設(shè)為YES技即。

二著洼、iOS 如何推送自定義聲音

客戶端需要將聲音文件導(dǎo)入工程里,選中工程Target -> Build Phrases -> Copy Bundle Resources而叼。

自定義聲音

服務(wù)端推送時身笤,需要指定iOS 平臺下的sound參數(shù),具體傳入的值是聲音文件名+后綴葵陵。


三液荸、為什么iOS收不到推送消息?

如果你確認 appKey 在 SDK 客戶端與 Portal 上設(shè)置是一致脱篙,其他環(huán)節(jié)也按照文檔正確地操作娇钱。但還是收不到推送消息。那么绊困,有一定的可能性文搂,是你在 Portal 上上傳的證書,不是 APNs (Push) 證書秤朗。推送時指定的iOS推送環(huán)境和應(yīng)用證書是同一個環(huán)境煤蹭。請參考iOS 證書設(shè)置指南再次檢查證書選擇是否正確。

請注意:iOS能接受消息的必要條件是:應(yīng)用程序的證書要和你上傳到j(luò)push portal上的證書對應(yīng),如果你的程序是直接在xcode上運行的疯兼,你的應(yīng)用部署環(huán)境必須是開發(fā)狀態(tài)才能收到APNS消息然遏。

溫馨提示:目前api推送的時候可以通過參數(shù)apns_production可以指定推送環(huán)境,false為開發(fā)環(huán)境吧彪,true為生產(chǎn)環(huán)境待侵。V3 api不帶此參數(shù)則默認為生產(chǎn)環(huán)境,V3 api封裝的sdk 默認為開發(fā)環(huán)境姨裸。如果api有傳apns_production則以此值為準秧倾,否則以應(yīng)用詳情的部署環(huán)境為準。


四傀缩、為什么啟動的時候出現(xiàn) Did Fail To Register For Remote Notifications With Error的錯誤

程序運行的時候出現(xiàn)下面的錯誤信息:

did Fail To Register For Remote Notifications With Error: Error Domain=NSCocoaErrorDomain Code=3000 "未找到應(yīng)用程序的“aps-environment”的權(quán)利字符串" UserInfo=0x1c55e000 {NSLocalizedDescription=未找到應(yīng)用程序的“aps-environment”的權(quán)利字符串}

這個是由于你的Provisioning Profile文件那先,不具備APNS功能導(dǎo)致的。請登陸Apple Developer 網(wǎng)站設(shè)置好證書赡艰,更新Provisioning Profile售淡,重新導(dǎo)入Xcode】犊澹或參考博客


五揖闸、如何在接收到 APN 的時候獲取 APN 消息內(nèi)容并進行跳轉(zhuǎn)或做出響應(yīng)處理?

獲取 APNs 推送內(nèi)容


六料身、如何關(guān)閉 APN 推送汤纸?

可通過調(diào)用代碼

// iOS 8 以上可用此方法
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]] ;

進入您的應(yīng)用的設(shè)置頁面,點擊“通知設(shè)置”芹血,用戶手可以動變更“允許通知”的狀態(tài)贮泞。


七、App badge number(角標)如何更改與清空幔烛?

JPush 網(wǎng)站上推送 iOS 通知時啃擦,可在[可選設(shè)置]里面指定 badge 參數(shù)的值,如:1或"+1"饿悬。

api上指定badge的參數(shù)請看:Push API
客戶端上報badge到JPush服務(wù)器的接口請看:設(shè)置badge
關(guān)于badge +1的介紹议惰,請看APNs Notification badge


八、Icon Badge number 的清空方法:

  • APN 推送內(nèi)容指定 badge number 為 0乡恕;
  • 在代碼中使用如下代碼清空 badge number: [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];

注意:
badge累加只能通過v3 api推送言询,且只有1.7.4版本以上才能支持。


九傲宜、為何推送一條 APN 后运杭,點擊通知中心的 APN 通知打開 App,可是 APN 通知在通知中心依然存在而未被刪除函卒?

如果推送 APN 時辆憔,Badge number 被指定為0 ,則可能出現(xiàn) APN 消息在通知中心被點擊后,盡管調(diào)用了 [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0]; 但 APN 消息在通知中心不會被刪除的情況虱咧。 這種情況可以按如下代碼調(diào)用以清除通知中心的 APN 通知熊榛。

[[UIApplication sharedApplication] setApplicationIconBadgeNumber:1];
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];

如果仍有其他消息,則考慮清除 local notification 通知腕巡。
( [[UIApplication sharedApplication] cancelAllLocalNotifications] )


十玄坦、出現(xiàn)Not get deviceToken yet. Maybe: your certificate not configured APNs?...錯誤日志時如何排除問題?

如果出現(xiàn)上述日志,則說明一段時間內(nèi)都無法獲取device token绘沉,那么:

  • 確認你的app配置了apns權(quán)限煎楣,如果未配置apns權(quán)限,則應(yīng)該會出現(xiàn)此錯誤提示车伞。
  • 確認你的app運行在ios真機而非模擬器上择懂,且通知中心中對應(yīng)app的通知權(quán)限沒有完全關(guān)閉(alert/sound/badge至少有一個權(quán)限是打開的)。
  • 確認你的網(wǎng)絡(luò)狀況另玖,與apple的服務(wù)器的連接是通過tcp的 5223端口連接困曙,確認你網(wǎng)絡(luò)的對應(yīng)端口是否可用,可通過下列命令來確認這點:
telnet 1-courier.push.apple.com 5223

在代碼中可在以下兩個函數(shù)中斷點以確認device token的獲取狀態(tài)谦去。

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken;

- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error;

如果app運行進入 didFailToRegisterForRemoteNotificationsWithError 則說明app的APNS權(quán)限問題或者app運行在模擬器慷丽,參考 證書設(shè)置文檔。
如果app運行進入didRegisterForRemoteNotificationsWithDeviceToken 則說明運行正常哪轿,請確認你在此函數(shù)中的代碼中有將token傳遞給jpush的調(diào)用:

[JPUSHService registerDeviceToken:deviceToken];

  • 如果以上兩個registerRemoteNotification的函數(shù)都未進入, 請確認你的代碼中有注冊申請apns的函數(shù)調(diào)用:
[JPUSHService registerForRemoteNotificationTypes:];

  • 如果上述情況都已確認且未進入第4步的任意回調(diào)函數(shù)翔怎,則可以判斷無法獲取token的原因在于設(shè)備與apple的網(wǎng)絡(luò)連通性問題(注:一個設(shè)備只有在未申請過token的情況下才會需要與apple的網(wǎng)絡(luò)交互來獲取token窃诉,已經(jīng)獲取過某一環(huán)境token的設(shè)備在無網(wǎng)絡(luò)的情況下也能獲取到對應(yīng)環(huán)境的token(環(huán)境分為 開發(fā)/生產(chǎn))),這種情況下切換網(wǎng)絡(luò)能夠在大部分情況下解決此問題赤套。
  • 如果仍然有問題飘痛,請將上述步驟的結(jié)果以郵件附件的形式發(fā)送到JPush支持郵箱,我們將協(xié)助你解決此問題容握。

十一宣脉、上傳到appStore的版本為什么收不到推送?

  • 請確認xcode選擇的生產(chǎn)證書和上傳的證書的bundleid一致剔氏;
  • 如果是在jpush網(wǎng)站上推送塑猖,請確認新建通知時推送對象是否選擇了生產(chǎn)環(huán)境;
  • 如果是v3 api推送谈跛,請確認是否使用了apns_production參數(shù)羊苟,值是否為:true;如果沒有使用apns_production參數(shù)請確認jpush網(wǎng)站上該應(yīng)用的部署環(huán)境是否已經(jīng)切換到生產(chǎn)環(huán)境感憾。

十二蜡励、iOS 平臺上傳證書一直為未通過狀態(tài)

證書上傳未通過的原因一般有:

  • 密碼錯誤;
  • 上傳的apns證書環(huán)境不一致;
  • 上傳到控制臺必須是apns證書凉倚,非apns證書會帶來錯誤兼都,還有其他的原因可能是開發(fā)者證書也可能是apns證書那里導(dǎo)出來的私鑰。

具體請看上傳后顯示的錯誤輸出內(nèi)容


十三稽寒、為什么日志里面會打影绫獭:You've implemented -[ <UIApplicationDelegate> application:didReceiveRemoteNotification:fetchCompletionHandler:], but you still need to add "remote-notification" to the list of your supported UIBackgroundModes in your Info.plist.

這個主要是提示開發(fā)者如果要支持UIBackgroundModes,需要開啟Remote notifications瓦胎,具體操作可以看:iOS 7 Background Remote Notification

后記

??極光推送理論和常見問題就這些了芬萍,以后我會加一下我寫的工程上的代碼。有什么不對的地方搔啊,歡迎發(fā)郵件或者私信我柬祠,謝謝大家。

她很美负芋!
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末漫蛔,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子旧蛾,更是在濱河造成了極大的恐慌莽龟,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,376評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件锨天,死亡現(xiàn)場離奇詭異毯盈,居然都是意外死亡,警方通過查閱死者的電腦和手機病袄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評論 2 385
  • 文/潘曉璐 我一進店門搂赋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人益缠,你說我怎么就攤上這事脑奠。” “怎么了幅慌?”我有些...
    開封第一講書人閱讀 156,966評論 0 347
  • 文/不壞的土叔 我叫張陵宋欺,是天一觀的道長。 經(jīng)常有香客問我胰伍,道長齿诞,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,432評論 1 283
  • 正文 為了忘掉前任骂租,我火速辦了婚禮掌挚,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘菩咨。我一直安慰自己吠式,他們只是感情好陡厘,可當我...
    茶點故事閱讀 65,519評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著特占,像睡著了一般糙置。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上是目,一...
    開封第一講書人閱讀 49,792評論 1 290
  • 那天谤饭,我揣著相機與錄音,去河邊找鬼懊纳。 笑死揉抵,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的嗤疯。 我是一名探鬼主播冤今,決...
    沈念sama閱讀 38,933評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼茂缚!你這毒婦竟也來了戏罢?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,701評論 0 266
  • 序言:老撾萬榮一對情侶失蹤脚囊,失蹤者是張志新(化名)和其女友劉穎龟糕,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體悔耘,經(jīng)...
    沈念sama閱讀 44,143評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡讲岁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,488評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了衬以。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片缓艳。...
    茶點故事閱讀 38,626評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖泄鹏,靈堂內(nèi)的尸體忽然破棺而出郎任,到底是詐尸還是另有隱情秧耗,我是刑警寧澤备籽,帶...
    沈念sama閱讀 34,292評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站分井,受9級特大地震影響车猬,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜尺锚,卻給世界環(huán)境...
    茶點故事閱讀 39,896評論 3 313
  • 文/蒙蒙 一珠闰、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧瘫辩,春花似錦伏嗜、人聲如沸坛悉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽裸影。三九已至,卻和暖如春军熏,著一層夾襖步出監(jiān)牢的瞬間轩猩,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工荡澎, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留均践,地道東北人。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓摩幔,卻偏偏與公主長得像彤委,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子热鞍,可洞房花燭夜當晚...
    茶點故事閱讀 43,494評論 2 348

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