請確保:java
舒適提示:目前V3 api推送能夠經過參數apns_production來指定推送環境:false爲開發環境,true爲生產環境。V3 api不帶此參數則默認爲生產環境,V3 api封裝的sdk 默認爲開發環境。ios
程序運行的時候出現下面的錯誤信息:json
did Fail To Register For Remote Notifications With Error: Error Domain=NSCocoaErrorDomain Code=
3000
"未找到應用程序的「aps-environment」的權利字符串"
UserInfo=
0x1c55e000
{NSLocalizedDescription=未找到應用程序的「aps-environment」的權利字符串}
|
這個是因爲你的Provisioning Profile文件,不具有APNS功能致使的。請登錄Apple Developer 網站設置好證書,更新Provisioning Profile,從新導入Xcode。api
或參考:http://blog.csdn.net/stefzeus/article/details/7418552xcode
獲取 APNs 推送內容服務器
關閉推送有如下兩種方式關閉:網絡
1.在iOS系統設置的通知設置中更改對應app的推送設置(推薦);app
2.在代碼中調用 [[UIApplication sharedApplication] unregisterForRemoteNotifications];tcp
對應以上關閉方式的從新打開推送方法:ide
1.在iOS系統設置的通知設置中修改對應app的推送設置;
2.在代碼中從新調用 [APService registerForRemoteNotificationTypes:];
JPush 網站上推送 iOS 通知時,可選設置裏面有選項能夠指定 badge 的參數的值,如:1或"+1"。
api上指定badge的參數請看:Push-API-v3#API-v3-ios,客戶端上報badge到JPush服務器的接口請看:設置badge。
Icon Badge number 的清空方法:
注意:badge累加只能經過v3api推送,且只有1.7.4版本以上才能支持。
若是推送 APN 時,Badge number 被指定爲0 ,則可能出現 APN 消息在通知中心被點擊後,儘管調用了 [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0]; 但 APN 消息在通知中心不會被刪除的狀況。 這種狀況能夠按以下代碼調用以清除通知中心的 APN 通知。
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:
1
];
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:
0
];
|
若是仍有其餘消息,則考慮清除 local notification 通知。( [[UIApplication sharedApplication] cancelAllLocalNotifications] )
若是出現上述日誌,則說明一段時間內都沒法獲取device token,那麼:
1.確認你的app配置了apns權限,若是未配置apns權限,則應該會出現此錯誤提示。
2.確認你的app運行在ios真機而非模擬器上,且通知中心中對應app的通知權限沒有徹底關閉(alert/sound/badge至少有一個權限是打開的)。
3.確認info.plist上的BundleID是否和上傳到JPush官網的p12證書的BundleID一致,BuildSetting裏面的Provision Profile是否屬於JPush官網上顯示的BundleID,CodeSigning選擇的證書是否from你所選擇的Provision Profile的證書。
4.確認你的網絡情況,與apple的服務器的鏈接是經過tcp的 5223端口鏈接,確認你網絡的對應端口是否可用,可經過下列命令來確認這點:
telnet
1
-courier.push.apple.com
5223
|
5.在代碼中可在如下兩個函數中斷點以確認device token的獲取狀態。
- (
void
)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken;
- (
void
)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error;
|
若是app運行進入didFailToRegisterForRemoteNotificationsWithError 則說明app的APNS權限問題或者app運行在模擬器,參考 證書設置文檔。
若是app運行進入didRegisterForRemoteNotificationsWithDeviceToken 則說明運行正常,請確認你在此函數中的代碼中有將token傳遞給jpush的調用:
[APService registerDeviceToken:deviceToken];
|
6.若是以上兩個registerRemoteNotification的函數都未進入, 請確認你的代碼中有註冊申請apns的函數調用:
[APService registerForRemoteNotificationTypes:];
|
6.若是上述狀況都已確認且未進入第4步的任意回調函數,則能夠判斷沒法獲取token的緣由在於設備與apple的網絡連通性問題(注:一個設備只有在未申請過token的狀況下才會須要與apple的網絡交互來獲取token,已經獲取過某一環境token的設備在無網絡的狀況下也能獲取到對應環境的token(環境分爲 開發/生產)),這種狀況下切換網絡可以在大部分狀況下解決此問題。
7.若是仍然有問題,請將上述步驟的結果以郵件附件的形式發送到JPush支持郵箱,咱們將協助你解決此問題。
1.請確認xcode選擇的生產證書和上傳的證書的bundleid一致;
2. 若是是在jpush網站上推送,請確認新建通知時推送對象是否選擇了生產環境,如圖:
3.若是使用了V2 api 的apns_production參數,值是否爲:1;若是使用了V3 api 的apns_production參數,值是否爲:true。
證書上傳未經過的緣由通常有:
1.當前上傳的p12證書密碼輸入有誤;
2. 證書導出的時候展開了證書,把我的私鑰導了出來,導證書的時候請不要展開證書;
3.當前上傳的證書環境不對,如:在上傳開發證書的地方上傳了生產證書;
4.該證書已在本帳號的其它應用使用;
5.現上傳的證書與當前應用已上傳成功的證書的bundle id不一致。
具體請看上傳後顯示的錯誤輸出內容。
這個主要是提示開發者若是要支持UIBackgroundModes,須要開啓Remote notifications,具體操做能夠看:iOS 7 Background Remote Notification
應在全部的須要統計得頁面得 viewWillAppear 和 viewWillDisappear 加入 startLogPageView 和 stopLogPageView 來統計當前頁面的停留時間。