集成 jpush-react-native 常見問題彙總 (iOS 篇)

給 iOS 應用添加推送功能是一件比較麻煩的事情,本篇文章收集了集成 jpush-react-native 的常見問題,目的是爲了幫助用戶更好地排查問題node

1. 收不到推送

  • 確保是在真機上測試,而不是在模擬器
  • 本身的應用已經在 Apple developer 給應用配置推送功能,建立推送證書 (而且保證 bundle id 與 Apple developer 上的是一致的)若是以前沒有接觸過推送證書建議看視頻來 官方集成視頻
  • 可以獲取 deviceToken 可是收不到推送, 若是是使用 xcode 8,檢查 (Project -> Target -> Capabilities ) Push Notification 選項是否已經點開,若是沒有須要點開

2. 收到一條通知 JS 層會有多個 ReceiveNotification 事件

  • 升級 jpush-react-native 到最新版本
  • 有沒有在合適的地方 remove ReceiveNotification 事件,若是屢次監聽該事件會致使重複接收

3. 如何消除 應用 icon 的角標(badge)

調用 JPushModule.setBadge 方法 若是設爲 0,則表示狀況角標react

JPushModule.setBadge(5, (badgeNumber) => {
  console.log(badgeNumber)
});

4. 開發環境可以收到推送,生產環境收不到推送

  • 若是是經過控制檯發送的推送,檢查環境選擇是否正確
  • 若是是調用 REST api 發送通知,請檢查推送參數
  • 手機應用是不是仍然是 開發環境, 若是不是請打包 Ad Hoc 來測試

5. 自定義消息事件沒法觸發

  • 若是經過控制檯發送的自定義消息,確保選擇的是自定義消息,而不是通知
  • 檢查是否監聽了 networkDidReceiveMessage 事件

6. 點擊推送喚起應用的時候 OpenNotification 不調用

  • 升級 jpush-react-native 到最新版本(舊版本還沒作緩存處理,新版本已修復)
  • 檢查監聽 OpenNotification 的操做是否異步調用,有用戶應爲在異步回調中才執行監聽操做,致使事件已經上拋到 js 層但 js 層還沒執行監聽操做的問題

7. 通知在前臺展現問題

  • iOS 10 開始容許通知在前臺展現這個地方在 Native 代碼中控制
// iOS 10 Support
- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(NSInteger))completionHandler {
  // Required
  NSDictionary * userInfo = notification.request.content.userInfo;
  if([notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
    [JPUSHService handleRemoteNotification:userInfo];
    [[NSNotificationCenter defaultCenter] postNotificationName:kJPFDidReceiveRemoteNotification object:userInfo];
  }
completionHandler(UNNotificationPresentationOptionAlert);  // 須要執行這個方法,選擇是否提醒用戶,有Badge、Sound、Alert三種類型能夠選擇設置
}
  • iOS 10 以前是系統控制,應用在前臺推送不展現

8. 找不到頭文件 RCTJPushModule.h

  • 在 iOS 工程中若是找不到頭文件可能要在 TARGETS-> BUILD SETTINGS -> Search Paths -> Header Search Paths 添加以下如路徑
$(SRCROOT)/../node_modules/jpush-react-native/ios/RCTJPushModule/RCTJPushModule

RN 在 0.40.0 以後 不會自動加入這個路徑了,要手動加一下ios

9. 在 iphone 5 的模擬器編譯不經過

JPush SDK 在 3.0.0 及之後版本再也不支持 i386 的模擬器了血藥在 iphone 5s 以上版本中測試react-native

10. 找不到 jcore-react-native

  • 在 jpush-react-native 1.4.4 之後版本 須要通知安裝 jcore-react-native 才能正常使用

做者:HuminiOS - 極光
原文:集成 jpush-react-native 常見問題彙總 (iOS 篇)
知乎專欄:極光日報api

相關文章
相關標籤/搜索