Как сохранить один идентификатор игрока в исходное состояние - PullRequest
0 голосов
/ 25 августа 2018

Я новичок, чтобы реагировать на родной, я использую один сигнал для уведомления. Я получил один идентификатор игрока для пользователей сигнала из OneSignal.configure(); этого и следующего кода, который я сделал, но тот идентификатор игрока, который я вижу только на консоли. Я использую setState для сохранения в состоянии, но он показывает ошибку, что setState is not a function. Как я могу получить этот идентификатор игрока, чтобы сохранить его в состоянии.

Код:

componentWillMount() {
          OneSignal.init("d447e6e2-0c8e-4781-8292-6e77d2e86691");

          OneSignal.configure();
          OneSignal.addEventListener('received', this.onReceived);
          OneSignal.addEventListener('opened', this.onOpened);
          OneSignal.addEventListener('ids', this.onIds);
      }

      componentWillUnmount() {
          OneSignal.removeEventListener('received', this.onReceived);
          OneSignal.removeEventListener('opened', this.onOpened);
          OneSignal.removeEventListener('ids', this.onIds);
      }

      onReceived(notification) {
          console.log("Notification received: ", notification);
      }

      onOpened(openResult) {
        console.log('Message: ', openResult.notification.payload.body);
        console.log('Data: ', openResult.notification.payload.additionalData);
        console.log('isActive: ', openResult.notification.isAppInFocus);
        console.log('openResult: ', openResult);
      }

      onIds(device) {
        console.log('Device info: ', device);
      console.log('player id: ', device.userId);
       this.setState({
            pid: device.userId,
          })
       console.log(this.state.pid);
      }

1 Ответ

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

Функции прослушивателей событий не знают ваши this, поэтому вы должны использовать bind, чтобы поместить в них ваши this.

componentWillMount() {
    OneSignal.init('ONESIGNAL-APP-ID');

    OneSignal.addEventListener('received', this.onReceived.bind(this));
    OneSignal.addEventListener('opened', this.onOpened.bind(this));
    OneSignal.addEventListener('ids', this.onIds.bind(this));
    OneSignal.configure();
}

ОБНОВЛЕНИЕ

Вы также можете объявить как функции-стрелки, чтобы избежать .bind (this):

componentWillMount() {
    OneSignal.init('ONESIGNAL-APP-ID');

    OneSignal.addEventListener('received', this.onReceived);
    OneSignal.addEventListener('opened', this.onOpened);
    OneSignal.addEventListener('ids', this.onIds);
    OneSignal.configure();
}

onReceived = () => {}
onOpened = () => {}
onIds = () => {}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...