Корректная настройка с помощью response-native-fcm - PullRequest
0 голосов
/ 11 декабря 2018

Я чувствую, что документы на Reaction-native-FCM немного беспорядочные, и мне трудно это понять.

У меня есть производственное приложение имои пользователи Android говорят мне, что они не получают уведомления о событиях, где они должны быть.Так что это сильно напрягает меня прямо сейчас.На iOS все выглядит нормально.

В примере приложенияact-native-fcm вы можете увидеть следующее:

//FCM.createNotificationChannel is mandatory for Android targeting >=8. Otherwise you won't see any notification

componentDidMount() {
  FCM.createNotificationChannel({
    id: 'default',
    name: 'Default',
    description: 'used for example',
    priority: 'high'
  })
}

Нужно ли звонить FCM.createNotificationChannel()??Я в основном использую удаленные уведомления, так что это как-то уместно?

Вот МОЯ настройка:

import FCM, {
  FCMEvent,
  NotificationType,
  RemoteNotificationResult,
  WillPresentNotificationResult,
} from 'react-native-fcm';

FCM.on(FCMEvent.Notification, async (notif) => {

  // there are two parts of notif. notif.notification contains the notification payload, notif.data contains data payload
  FCM.presentLocalNotification({
    id: "new_message",                               // (optional for instant notification)
    title: notif.fcm.title,                          // as FCM payload
    body: notif.fcm.body,                               // as FCM payload (required)
    sound: "default",                                   // as FCM payload
    priority: "high",                                   // as FCM payload
    click_action: "com.myapp.MyCategory",               // as FCM payload - this is used as category identifier on iOS.
    badge: 10,                                          // as FCM payload IOS only, set 0 to clear badges
    number: 10,                                         // Android only
    ticker: "My Notification Ticker",                   // Android only
    auto_cancel: true,                                  // Android only (default true)
    large_icon: "ic_launcher",                           // Android only
    icon: "ic_launcher",                                // as FCM payload, you can relace this with custom icon you put in mipmap
    color: "blue",                                      // Android only
    vibrate: 300,                                       // Android only default: 300, no vibration if you pass 0
    wake_screen: true,                                  // Android only, wake up screen when notification arrives
    group: "group",                                     // Android only
    picture: "https://google.png",                      // Android only bigPicture style
    ongoing: false,                                      // Android only
    my_custom_data:'my_custom_field_value',             // extra data you want to throw
    lights: true,                                       // Android only, LED blinking (default false)
  });

  if(Platform.OS ==='ios'){
    //optional
    //iOS requires developers to call completionHandler to end notification process. If you do not call it your background remote notifications could be throttled, to read more about it see https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1623013-application.
    //This library handles it for you automatically with default behavior (for remote notification, finish with NoData; for WillPresent, finish depend on "show_in_foreground"). However if you want to return different result, follow the following code to override
    //notif._notificationType is available for iOS platfrom
    switch(notif._notificationType){
      case NotificationType.Remote:
        notif.finish(RemoteNotificationResult.NewData) //other types available: RemoteNotificationResult.NewData, RemoteNotificationResult.ResultFailed
        break;
      case NotificationType.NotificationResponse:
        notif.finish();
        break;
      case NotificationType.WillPresent:
        notif.finish(WillPresentNotificationResult.All) //other types available: WillPresentNotificationResult.None
        break;
    }
  }
});

FCM.on(FCMEvent.RefreshToken, (token) => {
    try {
      const { currentUser } = firebase.auth();

      let updates = {};
      updates[`/allUsers/serviceUsers/${currentUser.uid}/userInfo/fcmToken`] = token;

      return firebase.database().ref().update(updates).catch(err => console.log('fcm refresh error', err))
    } catch (e) {
      console.log('couldnt update fcm refresh token', e)
    }
});

const store = createStore(reducers, {}, applyMiddleware(ReduxThunk));

class App extends Component {
  componentWillMount() {

    let config = {configgg}

    !firebase.apps.length ? firebase.initializeApp(config) : firebase.app();

    FCM.requestPermissions();
  }

  render() {
    return (
      <Provider store={store}>
        <Router/>
      </Provider>
    );
  }
}

export default App;

В основном я использую удаленные уведомления, и для моего приложения это важно.Есть ли что-то, чего мне не хватает в моей настройке?

Любые подсказки или предложения мне очень помогут!Спасибо!

РЕДАКТИРОВАТЬ:

Обнаружено в adb logcat при получении уведомления (которое не отображается)

NotificationService: No Channel found for pkg=com.lisdoworker, channelId=null, id=0, tag=GCM-Notification:9015992, opPkg=com.lisdoworker, callingUid=10487, userId=0, incomingUserId=0, notificationUid=10487, notification=Notification(channel=null pri=0 contentView=null vibrate=null sound=null defaults=0x0 flags=0x10 color=0x00000000 vis=PRIVATE)

Имеет ли этоделать с FCM.createNotificationChannel() ??

1 Ответ

0 голосов
/ 12 декабря 2018

Да, по-видимому, createNotificationChannel был добавлен в версии 16 для поддержки Android 8, и он едва документирован.

...