JPUSH bug彙總

1. 服務端Options 參數中的apns_production 沒有設置對應的生產環境
    致使測試的時候能夠順利推送  可是上線以後推送功能失效

2.咱們在作推送的時候須要關心的一些問題
關鍵績效指標(KPI:Key Performance Indicator)
   新增用戶、活躍用戶、啓動次數
這些指標是KPI的主 要評估標準;關注這些指標的每日趨勢,您能夠了解到應用天天發展是否正常、是否符合預期。
    留存用戶、留存率、流失用戶

1. 通知能夠在app關閉的狀況下收到,而消息只能當應用打開(Android)甚至僅在前臺(iOS)時,纔會收到。

3.定時發送推送
要用到

API Push Schedule (修改了HTTP協議頭)

http://docs.jpush.io/server/rest_api_push_schedule/
  1. AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];  
  2. manager.securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];  
  3. manager.requestSerializer = [AFJSONRequestSerializer serializer];  
  4. manager.responseSerializer = [AFJSONResponseSerializer serializer];  
  5. [manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Accept"];  
  6. [manager.requestSerializer setValue:@"application/json; charset=utf-8" forHTTPHeaderField:@"Content-Type"];   

爲何集成成功後iOS收不到推送通知?

請確保:java

  • 推送的key和應用集成的key是同一個;
  • iOS應用程序的證書和你上傳到JPush Portal上上傳的證書是同一個;
  • 推送時指定的iOS推送環境和應用證書是同一個環境。

舒適提示:目前V3 api推送能夠經過參數apns_production來指定推送環境:false爲開發環境,true爲生產環境。V3 api不帶此參數則默認爲生產環境,V3 api封裝的sdk 默認爲開發環境。ios

爲何啓動的時候出現 Did Fail To Register For Remote Notifications With Error的錯誤

程序運行的時候出現下面的錯誤信息: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

如何在接收到 APN 的時候獲取 APN 消息內容並進行跳轉或作出響應處理?

獲取 APNs 推送內容服務器

如何關閉 APN  推送?

關閉推送有如下兩種方式關閉:網絡

1.在iOS系統設置的通知設置中更改對應app的推送設置(推薦);app

2.在代碼中調用 [[UIApplication sharedApplication] unregisterForRemoteNotifications];tcp

對應以上關閉方式的從新打開推送方法:ide

1.在iOS系統設置的通知設置中修改對應app的推送設置;

2.在代碼中從新調用 [APService registerForRemoteNotificationTypes:];

App badge number(角標)如何更改與清空?

JPush 網站上推送 iOS 通知時,可選設置裏面有選項能夠指定 badge 的參數的值,如:1或"+1"。

api上指定badge的參數請看:Push-API-v3#API-v3-ios,客戶端上報badge到JPush服務器的接口請看:設置badge

Icon Badge number 的清空方法:

  1. APN 推送內容指定 badge number 爲 0;
  2. 在代碼中使用以下代碼清空 badge number:  [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];

注意:badge累加只能經過v3api推送,且只有1.7.4版本以上才能支持。

爲什麼推送一條 APN 後,點擊通知中心的 APN 通知打開 App,但是 APN 通知在通知中心依然存在而未被刪除?

若是推送 APN 時,Badge number 被指定爲0 ,則可能出現 APN 消息在通知中心被點擊後,儘管調用了   [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0]; 但 APN 消息在通知中心不會被刪除的狀況。 這種狀況能夠按以下代碼調用以清除通知中心的 APN 通知。

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

若是仍有其餘消息,則考慮清除 local notification 通知。( [[UIApplication sharedApplication] cancelAllLocalNotifications] )

出現Not get deviceToken yet. Maybe: your certificate not configured APNs?...錯誤日誌時如何排除問題?

若是出現上述日誌,則說明一段時間內都沒法獲取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支持郵箱,咱們將協助你解決此問題。

上傳到appStore的版本爲何收不到推送?

1.請確認xcode選擇的生產證書和上傳的證書的bundleid一致;

2. 若是是在jpush網站上推送,請確認新建通知時推送對象是否選擇了生產環境,如圖:

3.若是使用了V2 api 的apns_production參數,值是否爲:1;若是使用了V3 api 的apns_production參數,值是否爲:true。

iOS 平臺上傳證書一直爲未經過狀態

證書上傳未經過的緣由通常有:

1.當前上傳的p12證書密碼輸入有誤;

2. 證書導出的時候展開了證書,把我的私鑰導了出來,導證書的時候請不要展開證書;

3.當前上傳的證書環境不對,如:在上傳開發證書的地方上傳了生產證書;

4.該證書已在本帳號的其它應用使用;

5.現上傳的證書與當前應用已上傳成功的證書的bundle id不一致。

具體請看上傳後顯示的錯誤輸出內容。

爲何日誌裏面會打印: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.

這個主要是提示開發者若是要支持UIBackgroundModes,須要開啓Remote notifications,具體操做能夠看:iOS 7 Background Remote Notification



4.有一點須要注意若是不經過後臺鏈接極光推送,極光推送的PushConfig文件不須要配置也能夠推送成功;

5.獲取用戶停留在某個頁面的時間

應在全部的須要統計得頁面得 viewWillAppear 和 viewWillDisappear 加入 startLogPageView 和 stopLogPageView 來統計當前頁面的停留時間。



相關文章
相關標籤/搜索