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收不到推送通知?

請確保:

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

溫馨提示:目前V3 api推送可以通過參數apns_production來指定推送環境:false為開發環境,true為生產環境。V3 api不帶此參數則默認為生產環境,V3 api封裝的sdk 默認為開發環境。

為什么啟動的時候出現 Did Fail To Register For Remote Notifications With Error的錯誤

程序運行的時候出現下面的錯誤信息:

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。

或參考:http://blog.csdn.net/stefzeus/article/details/7418552

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

獲取 APNs 推送內容

如何關閉 APN  推送?

關閉推送有以下兩種方式關閉:

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

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

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

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 來統計當前頁面的停留時間。






免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM