iOS10推送適配常見問題

寫在最前面

各位調試的時候必定要用真機,模擬器是獲取不了 token 的ios

問題一:不能註冊

交代下使用的設備:
xcode:Version 8.0 (8A218a)
手機: iphone6(10.0)
jpush版本:2.1.7git

iOS10 近期咱們 app 要上架,可是在調試的過程當中發現了一個問題,ios 10手機不能註冊通知了(ios 9的手機能夠),咱們使用的是極光的2.1.7版本,運行的時候老是報錯.github

1.did Fail To Register For Remote Notifications With Error: 
Error Domain=NSCocoaErrorDomain Code=3000 "未找到應用程序的「aps-environment」的受權字符串"
UserInfo={NSLocalizedDescription=未找到應用程序的「aps-environment」的受權字符串}

2. | JPUSH | W - [JPUSHClientController] Not get deviceToken yet. 
Maybe: your certificate not configured APNs?
or current network is not so good so APNs registration failed? 
or there is no APNs register code? Please refer to JPush docs.

看了極光的論壇,推薦解決方案是:升級到xcode8以後,手機爲ios10系統,測試時出現警告,打開這個論壇,答案在五樓的一個簡書博客裏面.xcode

步驟以下圖:

選中 tagets點擊 capabilitiesapp

Snip20161011_1.png框架

而後自動生成以下文件iphone

Snip20161011_4.pngpost

對應兩種狀態: development和 production, 而後再運行,便可獲取成功獲取 token 了測試

果真問題解決了,能夠註冊了;字體

問題二:極光2.1.9版本用 xcode7打包, iOS10接收不到通知問題

交代下使用的設備:
xcode:Version 7.1
手機: iphone6(10.0)
jpush版本:2.1.9

這個問題有兩個方案:

  • 1.升級 xcode 7成 xcode8,xcode 8按照問題一設置就能夠(推薦)
  • 2.使用2.1.9之前版本(不推薦,2.1.9之前版本地址)

下面來講下緣由:

因爲極光2.1.9更新了對 iOS10的支持,會自動識別 iOS10的方法,若是使用 iOS10極光使用的新的UserNotifications框架的,這須要作問題一中的配置才能使用.

因此仍是建議升級 Xcode 8;何況 iOS10字體變了, label 可能顯示不全,須要 xcode 8 才能夠看到字體的變化;可能老闆之後想使用 iOS 10 通知新特性;因此說是跑不掉的,升級 Xocde 8吧;

#ifdef NSFoundationVersionNumber_iOS_9_x_Max
    JPUSHRegisterEntity * entity = [[JPUSHRegisterEntity alloc] init];
    entity.types = UNAuthorizationOptionAlert|UNAuthorizationOptionBadge|UNAuthorizationOptionSound;
    entity.categories =[self setUpCategory];


    [JPUSHService registerForRemoteNotificationConfig:entity delegate:self];
#endif

問題三:提交 app store 審覈打包entitlements裏面的APS Environment要不要改

因爲篇幅比較長,先給出答案:不須要改,xcode 會根據你打包環境的不一樣,修改爲對應的 production 或development;即便你隨意改爲了任意字符(例如:123), xcode 也會幫你改回來

交代下使用的設備:
xcode:Version 8.0 (8A218a)
手機: iphone5(9.3)
jpush版本:2.1.7

APS Environment

1. 網上資料:

Paste_Image.png

  • 2.有的說不要改

stackOverFlow鏈接:xcode 8 push notification capabilities and entitlements file setting

Paste_Image.png

可是這個是飯碗的事情,萬一推送不成功,或者蘋果拒絕了;因此我得本身親自試一下.
因而我打了一個 adhoc 的包沒有修改APS Environment,仍是development
裝在手機上,使用生產環境推送;居然成功了.

2. 驗證 ipa 包裏面的mobileprovision中的 aps Environment

這裏就開始尷尬了,就在想可能會有如下兩種可能:
1.使用development也能夠,不須要修改爲production
2.或者打包的時候,xcode 會幫我改爲production

2.1.生產環境

因此我就打開了剛纔的 ipa 包,查找裏面的mobileprovision文件,過程以下

Snip20160929_20.png

Snip20160929_21.png

找到mobileprovision 文件後;xcode打開啥也沒有看到, sublime打開發現一堆亂碼;改爲 txt 格式仍是打不開.

sublime打開

這個時候就蛋疼了,那怎麼辦;就去搜了下怎麼打開 mobileprovision,皇天不負有心人,終於找到一篇文章代碼簽名探析,裏面有打開方案

$ security cms -D -i example.mobileprovision
這個命令會輸出簽名信息中的內容,若是你親自試一下,接下來你會獲得一個 XML 格式的 plist 文件內容輸出。

Snip20160930_29.png

Paste_Image.png

2.2測試環境

注意:您能夠打個普通的開發環境的測試包,終端查看裏面的內容,你會發現裏面是development

Paste_Image.png

3.注意:若是用戶手動去改aps Environment,會怎麼樣呢?

答:用戶無論怎麼改都是沒有用的,由於 mobileprovision裏面又會改回來.

3.1. 測試環境

Snip20160930_6.png

Paste_Image.png

3.2. Ad Hoc環境

Snip20160930_9.png

Snip20160930_8.png

小結

因此能夠得出結論:xcode 會自動幫咱們改aps Environment對應的value,不用手動改

問題四:使用 xcode自定義推送聲音;ios 9 設備能夠,可是 ios 10 設備仍是使用的系統的聲音

  • 是不是xcode鏈接手機覆蓋安裝了app
  • 若是是第一次安裝應用,應該是能夠收到自定義聲音的
  • 可是不卸載的狀況下,xcode鏈接手機覆蓋安裝app,就恢復默認了,這是Xcode的一個bug

iOS自定義聲音沒了
iOS 如何推送自定義聲音

總結

  1. 建議使用 xcode8來打包適配 iOS10,能夠早發現問題早解決
  2. 推送開關記得要打開;capabilities 裏面Background Modes-->remote notification&push notification
  3. 提交 app store時候entitlements裏面的APS Environment不要改,xcode 會幫你修改

寫在最後

  1. 目前咱們 app已經在審覈了,過幾天既能夠知道結果了(更新:app已通過Apple 審覈了
    )
  2. 尚未試下 iOS 10的手機,明天去試下(更新:試了下,是能夠的)
  3. 我會實時更新個人狀況,有問題能夠回覆我哦.

在搜索打開 provison 的時候,搜了很久都沒有答案;總結下關鍵詞少點好;
下面是搜索過程

Snip20160930_25.png

Snip20160930_27.png

Snip20160930_24.png

相關文章
相關標籤/搜索