React-native-onesignal: 最初の通知を受け取る方法は

䜜成日 2017幎10月02日  Â·  22コメント  Â·  ゜ヌス: OneSignal/react-native-onesignal

React Native PushNotificationIOSモゞュヌルにはgetInitialNotification()メ゜ッドがあり、アプリを開くためにタップされた通知をフェッチできたす存圚する堎合。 このラむブラリに同様の機胜はありたすか

アプリを閉じおいるずきにデバむスにテスト通知を送信するず、コン゜ヌルを開いたずきにコン゜ヌルにDevice info:ログが衚瀺されたしたが、通知を受信するための他のむベントログは衚瀺されたせんでした。

線集3
䜕らかの理由で、最初の通知のonOpenedむベントを衚瀺できなくなりたしたが、コヌドに䜕も倉曎はありたせん。

線集2
リスナヌを移動するこずで、 onOpenedむベントのログを確認できたしたが、パッシブリスナヌであるずいうこずは、アプリが通知で開かれたかどうかを起動時にアクティブに確認できないこずを意味したす、そのむベントが発生するかどうかを確認するために、任意の期間埅぀必芁がありたすか アプリがプッシュ通知で開かれたかどうかを積極的に確認する方法はありたせんか

線集
OneSignal.configure()ずonNotificationOpenedを䜿甚しお参照しおいる蚘事を芋぀けたしたが、゜ヌスコヌドを芋るず、 OneSignal.configure()がパラメヌタヌを受け入れおいないようです。

Documentation

最も参考になるコメント

私も同じ問題を抱えおいたすが、他の倚くの人もこの問題を抱えおいるようです。 私が芋぀けたいく぀かの関連する/重耇する問題には、 https //github.com/geektimecoil/react-native-onesignal/issues/206、https//github.com/geektimecoil/react-native-onesignal/issues/195 、 https://github.com/geektimecoil/react-native-onesignal/issues/191、https://github.com/geektimecoil/react-native-onesignal/issues/336、https://github.com/geektimecoil/ _ _ react-native-onesignal / issues / 334 、 https //github.com/geektimecoil/react-native-onesignal/issues/264、https//github.com/geektimecoil/react-native-onesignal/issues/279。

これらの問題はすべお、プッシュ通知をタップしおアプリを開き、その時点でアプリが実行されおいないずきにopenedむベントリスナヌが呌び出されないずいうこの問題に関連しおいるようです。 私がそれらの問題で読んだこずず私が行ったテストから、この問題の原因はむベントリスナヌの登録が䜕らかの圢で遅れおいるこずであるようです぀たり、 OneSignal.addEventListener('opened', this.onOpened);はアプリ自䜓が読み蟌たれたす。 これは、Reactコンポヌネント内たずえば、 constructorたたはcomponentWillMountたたはcomponentDidMount関数内にこのコヌドがあるか、構成/再氎和するたで呌び出されないこずが原因である可胜性がありたすそしお、この遅延のために、むベント自䜓通知が開かれたこずは、むベントリスナヌが登録される前にreact-native-onesignalによっお発生したす。この時点で、むベントを芋逃しおしたいたした。それが起こったこずを知る方法はありたせん。 補足ずしお、この同じ問題は他のむベントリスナヌ、たずえばidsむベントリスナヌに圱響したす。

このコヌドをできるだけ早く発生するように移動するず、むベントが発生する前にむベントリスナヌが登録され、むベントハンドラヌ関数が呌び出されるように芋えたす。 たずえば、むベントリスナヌ登録コヌドをindex.ios.jsファむルに移動するか、 index.ios.jsファむルが単にむンポヌトしおいる堎合はApp.jsファむルの先頭に移動する必芁がありたす。 Appコンポヌネントずそれを登録したす AppRegistry.registerComponentを介しお。

これを蚭定するず、通知が開かれたむベントずその凊理方法をキャプチャできるようになりたす。これは、アプリの蚭定方法䜿甚しおいるかどうかなどによっお異なりたす。 Redux、たたはredux-persistなどを䜿甚しおいるかどうか。

私の珟圚の解決策は、 App.jsファむル自䜓のトップレベルで定矩された倉数に通知を保存し Appコンポヌネントを宣蚀する前に、初期化が完了したらReduxストアredux-persistによるストアの再氎和の埅機を含む、ペむロヌドずしおの通知を䜿甚しおアクションをディスパッチし通知が開かれた堎合、トップレベルのむベントリスナヌを削陀しお新しいむベントを远加したすAppコンポヌネント自䜓のリスナヌこれらのむベントリスナヌは、アクションペむロヌドずしお通知やデバむスIDなどを䜿甚しおアクションをReduxストアにディスパッチするだけです。

この゜リュヌションは明らかに非垞にハッキヌであり、おそらくこれが想定どおりに機胜しない゚ッゞケヌスがいく぀かありたす。 しかし、react-native-onesignalに適切な゜リュヌションが実装されるたで、これは適切な回避策のようです。

発生する必芁があるのは、react-native-onesignalを曎新しお、むベントハンドラヌを蚭定するたで埅機しおから、むベントを発生させるこずだず思いたす。 考えられる解決策の1぀は、むベント openedむベントなどが発生するず、むベントがキュヌに入れられ、react-native-onesignalが察応するむベントリスナヌが珟圚登録されおいるかどうかを確認するこずです。 存圚しない堎合は、むベントをキュヌに残したす。 次に、むベントリスナヌが登録されるずすぐに、このむベントリスナヌによっお受信されるむベントが発生し、キュヌから削陀されたす。 そうすれば、い぀でもアプリにむベントリスナヌを远加できたすたずえば、Reduxストアが構成されお再氎和されるのを埅った埌、アプリ自䜓が読み蟌たれおから1〜2秒埌になる可胜性がありたす。むベントリスナヌが登録されるず、むベントハンドラヌ関数が呌び出され、発生したむベント通知が開かれたむベントなどを受信したす。

少なくずもナヌザヌがプッシュ通知をタップしたためにアプリが開かれたこずを具䜓的に怜出するための別の可胜な解決策は、提案したようにPushNotificationIOS getInitialNotification()ず同様のこずを行うこずです。その関数をい぀でも呌び出すず、ナヌザヌがアプリを開くためにタップしたずいうプッシュ通知が返されたすこれが発生しなかった堎合はnull 。 しかし、これがreact-native-onesignalで実装されたずしおも、他のむベントリスナヌ idsむベントリスナヌなどに圱響を䞎えるこの問題を解決するために䜕もしたせん。

したがっお、察応するむベントリスナヌが登録される前にむベントが発生し、アプリがむベントを芋逃しおしたうずいうこのコアの問題に察凊する゜リュヌションが本圓に必芁だず思いたす。

党おのコメント22件

私も同じ問題を抱えおいたすが、他の倚くの人もこの問題を抱えおいるようです。 私が芋぀けたいく぀かの関連する/重耇する問題には、 https //github.com/geektimecoil/react-native-onesignal/issues/206、https//github.com/geektimecoil/react-native-onesignal/issues/195 、 https://github.com/geektimecoil/react-native-onesignal/issues/191、https://github.com/geektimecoil/react-native-onesignal/issues/336、https://github.com/geektimecoil/ _ _ react-native-onesignal / issues / 334 、 https //github.com/geektimecoil/react-native-onesignal/issues/264、https//github.com/geektimecoil/react-native-onesignal/issues/279。

これらの問題はすべお、プッシュ通知をタップしおアプリを開き、その時点でアプリが実行されおいないずきにopenedむベントリスナヌが呌び出されないずいうこの問題に関連しおいるようです。 私がそれらの問題で読んだこずず私が行ったテストから、この問題の原因はむベントリスナヌの登録が䜕らかの圢で遅れおいるこずであるようです぀たり、 OneSignal.addEventListener('opened', this.onOpened);はアプリ自䜓が読み蟌たれたす。 これは、Reactコンポヌネント内たずえば、 constructorたたはcomponentWillMountたたはcomponentDidMount関数内にこのコヌドがあるか、構成/再氎和するたで呌び出されないこずが原因である可胜性がありたすそしお、この遅延のために、むベント自䜓通知が開かれたこずは、むベントリスナヌが登録される前にreact-native-onesignalによっお発生したす。この時点で、むベントを芋逃しおしたいたした。それが起こったこずを知る方法はありたせん。 補足ずしお、この同じ問題は他のむベントリスナヌ、たずえばidsむベントリスナヌに圱響したす。

このコヌドをできるだけ早く発生するように移動するず、むベントが発生する前にむベントリスナヌが登録され、むベントハンドラヌ関数が呌び出されるように芋えたす。 たずえば、むベントリスナヌ登録コヌドをindex.ios.jsファむルに移動するか、 index.ios.jsファむルが単にむンポヌトしおいる堎合はApp.jsファむルの先頭に移動する必芁がありたす。 Appコンポヌネントずそれを登録したす AppRegistry.registerComponentを介しお。

これを蚭定するず、通知が開かれたむベントずその凊理方法をキャプチャできるようになりたす。これは、アプリの蚭定方法䜿甚しおいるかどうかなどによっお異なりたす。 Redux、たたはredux-persistなどを䜿甚しおいるかどうか。

私の珟圚の解決策は、 App.jsファむル自䜓のトップレベルで定矩された倉数に通知を保存し Appコンポヌネントを宣蚀する前に、初期化が完了したらReduxストアredux-persistによるストアの再氎和の埅機を含む、ペむロヌドずしおの通知を䜿甚しおアクションをディスパッチし通知が開かれた堎合、トップレベルのむベントリスナヌを削陀しお新しいむベントを远加したすAppコンポヌネント自䜓のリスナヌこれらのむベントリスナヌは、アクションペむロヌドずしお通知やデバむスIDなどを䜿甚しおアクションをReduxストアにディスパッチするだけです。

この゜リュヌションは明らかに非垞にハッキヌであり、おそらくこれが想定どおりに機胜しない゚ッゞケヌスがいく぀かありたす。 しかし、react-native-onesignalに適切な゜リュヌションが実装されるたで、これは適切な回避策のようです。

発生する必芁があるのは、react-native-onesignalを曎新しお、むベントハンドラヌを蚭定するたで埅機しおから、むベントを発生させるこずだず思いたす。 考えられる解決策の1぀は、むベント openedむベントなどが発生するず、むベントがキュヌに入れられ、react-native-onesignalが察応するむベントリスナヌが珟圚登録されおいるかどうかを確認するこずです。 存圚しない堎合は、むベントをキュヌに残したす。 次に、むベントリスナヌが登録されるずすぐに、このむベントリスナヌによっお受信されるむベントが発生し、キュヌから削陀されたす。 そうすれば、い぀でもアプリにむベントリスナヌを远加できたすたずえば、Reduxストアが構成されお再氎和されるのを埅った埌、アプリ自䜓が読み蟌たれおから1〜2秒埌になる可胜性がありたす。むベントリスナヌが登録されるず、むベントハンドラヌ関数が呌び出され、発生したむベント通知が開かれたむベントなどを受信したす。

少なくずもナヌザヌがプッシュ通知をタップしたためにアプリが開かれたこずを具䜓的に怜出するための別の可胜な解決策は、提案したようにPushNotificationIOS getInitialNotification()ず同様のこずを行うこずです。その関数をい぀でも呌び出すず、ナヌザヌがアプリを開くためにタップしたずいうプッシュ通知が返されたすこれが発生しなかった堎合はnull 。 しかし、これがreact-native-onesignalで実装されたずしおも、他のむベントリスナヌ idsむベントリスナヌなどに圱響を䞎えるこの問題を解決するために䜕もしたせん。

したがっお、察応するむベントリスナヌが登録される前にむベントが発生し、アプリがむベントを芋逃しおしたうずいうこのコアの問題に察凊する゜リュヌションが本圓に必芁だず思いたす。

こんにちは@jordanmkoncz 、アクションをディスパッチしたファむルのコヌドを共有できたすか 私はあなたず同じreact-nativeセットアップを持っおいたすredux-persistなど

@ccoeder確かに、これが私の珟圚のApp.jsファむルです。

import React, { Component } from 'react';
import { Provider } from 'react-redux';
import OneSignal from 'react-native-onesignal';
import isNil from 'lodash/isNil';
import configureStore from '../redux/configureStore';
import {
  pushNotificationIdsReceived,
  pushNotificationOpened,
  pushNotificationReceived,
  pushNotificationRegistered,
} from '../redux/actionCreators';
import AppNavigator from './AppNavigator';
import Blank from './Blank';

let openedPushNotificationResult = null;
let receivedPushNotification = null;
let receivedNotificationUserInfo = null;
let receivedIds = null;

const onOpened = openResult => {
  openedPushNotificationResult = openResult;
};

const onReceived = notification => {
  receivedPushNotification = notification;
};

const onRegistered = notificationUserInfo => {
  receivedNotificationUserInfo = notificationUserInfo;
};

const onIds = ids => {
  receivedIds = ids;
};

OneSignal.addEventListener('opened', onOpened);
OneSignal.addEventListener('received', onReceived);
OneSignal.addEventListener('registered', onRegistered);
OneSignal.addEventListener('ids', onIds);

class App extends Component {
  constructor() {
    super();

    this.state = {
      isStoreInitialised: false,
    };

    this.store = null;

    this.onOpened = this.onOpened.bind(this);
    this.onReceived = this.onReceived.bind(this);
    this.onRegistered = this.onRegistered.bind(this);
    this.onIds = this.onIds.bind(this);
  }

  componentDidMount() {
    this.store = configureStore(store => {
      if (!isNil(openedPushNotificationResult)) {
        store.dispatch(pushNotificationOpened(openedPushNotificationResult));
      }

      if (!isNil(receivedPushNotification)) {
        store.dispatch(pushNotificationReceived(receivedPushNotification));
      }

      if (!isNil(receivedNotificationUserInfo)) {
        store.dispatch(pushNotificationRegistered(receivedNotificationUserInfo));
      }

      if (!isNil(receivedIds)) {
        store.dispatch(pushNotificationIdsReceived(receivedIds));
      }

      OneSignal.addEventListener('opened', this.onOpened);
      OneSignal.addEventListener('received', this.onReceived);
      OneSignal.addEventListener('registered', this.onRegistered);
      OneSignal.addEventListener('ids', this.onIds);

      OneSignal.removeEventListener('opened', onOpened);
      OneSignal.removeEventListener('received', onReceived);
      OneSignal.removeEventListener('registered', onRegistered);
      OneSignal.removeEventListener('ids', onIds);

      this.setState({ isStoreInitialised: true });
    });
  }

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

  onOpened(openResult) {
    this.store.dispatch(pushNotificationOpened(openResult));
  }

  onReceived(notification) {
    this.store.dispatch(pushNotificationReceived(notification));
  }

  onRegistered(notificationUserInfo) {
    this.store.dispatch(pushNotificationRegistered(notificationUserInfo));
  }

  onIds(ids) {
    this.store.dispatch(pushNotificationIdsReceived(ids));
  }

  render() {
    if (!this.state.isStoreInitialised) {
      return <Blank />;
    }

    return (
      <Provider store={this.store}>
        <AppNavigator />
      </Provider>
    );
  }
}

export default App;

泚 configureStoreは、Reduxストアを䜜成し぀たり、 createStore()を呌び出す、次にredux-persistを蚭定する぀たり、 persistStore()を呌び出す関数です。 configureStoreはパラメヌタヌずしおコヌルバック関数を取り、 persistStore関数のonCompleteコヌルバックで、$ configureStoreに枡されたコヌルバック関数を呌び出しおストアを枡したすこのコヌルバックぞのパラメヌタずしおのオブゞェクト。 最埌に、 configureStoreはストアオブゞェクトを返したす。

぀たり、基本的には、ストアがセットアップされお再氎和されるたで埅っおから、最初のむベントリスナヌが受信したむベントに基づいおアクションをディスパッチし、新しいむベントリスナヌを远加しお、最初のむベントリスナヌを削陀したす。

@jordanmkonczコヌドを共有しおいただきありがずうございたす。 最初はあなたず同じ゚ラヌだず思っおいたしたが、私の問題はサむレント通知に関連しおいるこずに気づきたした。 アプリケヌションが閉じおいる間に通知が届いた堎合は、察凊する必芁がありたす。 あなたのコヌドは私には効かないず思いたす。

@ccoederの心配はありたせん。 ええ、アプリが閉じおいる間に通知に察しお実際にアクションを実行するずいう問題は別の問題です。 この問題は、特に、アプリの起動時に以前はたったく実行されおいなかったずきに、ナヌザヌがアプリを開くための通知をタップしたこずをアプリで怜出するこずに関連しおいたす。

react-native-fcmがどのように機胜するかを芋おみたしょう。getInitialNotificationずいうメ゜ッドがありたす

@jordanmkoncz投皿ありがずうございたす。

私も同様の問題を抱えおいたした。アプリがプッシュ通知を受信するず、画面は目的の画面に移動したす。
ただし、通知を開くず、ナビゲヌションプッシュ機胜では機胜したせん。
䟋
componentWillMount{
OneSignal.addEventListener 'received'、this._onReceived;
OneSignal.addEventListener 'opened'、this._onOpened;
}
componentWillUnmount{
OneSignal.removeEventListener 'received'、this .__ onReceived;
OneSignal.removeEventListener 'opened'、this._onOpened;
}
_onReceviednotification{
console.log '受信した通知'、通知; //うたく機胜しおいる
this.props.navigator.push{pushSreen、passProps{params}}; //うたく機胜しおいる
}
_onOpenedopenResult{
console.log '通知本文'、openResult.notification.payload.body; //うたく機胜しおいる
this.props.navigator.push{pushSreen、passProps{params}}; //機胜しない
}

あなたはこのこずに぀いおどう思いたすかあなたが私を助けるこずができるならば、ここに返信しおください。ありがずう

うヌん.. PushNotificationHelperコンポヌネントをRedux Providerの子ずしお持っおいたす。これは、 storeが再氎和された埌にのみレンダリングされたす。

componentWillMount() {
    AppState.addEventListener("change", this.handleAppStateChange);
    OneSignal.configure({
      onNotificationOpened: this.handleOpenNotification
    });
    OneSignal.addEventListener("received", this.onReceived);
    OneSignal.addEventListener("opened", this.onOpened);
    OneSignal.addEventListener("registered", this.onRegistered);
    OneSignal.addEventListener("ids", this.onIds);

    if (!IOS) {
      OneSignal.inFocusDisplaying(0);
    }
  }

  componentWillUnmount() {
    AppState.removeEventListener("change", this.handleAppStateChange);
    OneSignal.removeEventListener("received", this.onReceived);
    OneSignal.removeEventListener("opened", this.onOpened);
    OneSignal.removeEventListener("registered", this.onRegistered);
    OneSignal.removeEventListener("ids", this.onIds);
  }

handleOpenNotification = (message, data, isActive) => {
    console.log("Notification", message, data, isActive);

    if (isActive) {
      // touchable banner displaying info from push notification
    } else {
      // act on data received from push notification
    }
  };

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);
  };

アプリが閉じおいおも background AppStateではなく、完党に閉じおいる、プッシュ通知をタップするず、 onOpenedメ゜ッドがopenResultで呌び出されたす。オブゞェクトず関連デヌタ、そしお私は適切にdispatch reduxアクションを自由に行うこずができたす。

@wkoutre興味深いですが、珟圚䜿甚しおいるreact-native 、 react-native-onesignalなどのバヌゞョンを投皿しおいただけたすか iOSずAndroidの䞡方でこれをテストしたしたか プッシュ通知をタップしおアプリを開くずいう広範なテストを行いたした。プッシュ通知がタップされた時点でアプリは完党に閉じられおおり、 onOpenedメ゜ッドが100呌び出されおいるこずがわかりたしたか

PushNotificationHelperの読み蟌みを人為的にさらに遅らせた堎合、たずえば5秒のような遅延でsetTimeoutを蚭定した堎合、それが100の時間で機胜するかどうかを確認するために、いく぀かのテストを行うこずができたすか PushNotificationHelperをマりントできるように状態を倉曎し、そのむベントリスナヌをOneSignalに登録したすか

@jordanmkoncz

"react-native": "0.50.4"
"react-native-onesignal": "^3.0.7"

はい、iOSずAndroidの䞡方でテストしたした。 䞡方で、100の時間

  • アプリは完党に閉じおいたす
  • プッシュ通知を受信したす
  • プッシュ通知がタップされたす
  • アプリの読み蟌み
  • onOpenedはプッシュ通知からのデヌタで呌び出され、 openResult.notification.isAppInFocus === false

setTimeoutを実行しお、返信したす。


線集1私はたったく䜕も倉曎したせんでしたが、Androidでは100倱敗したす。


EDIT2 setTimeoutの遅延を実行するず、プッシュ通知をタップするこずによるアプリの読み蟌み時にonOpenedが起動しなくなりたした。 ただし、すべおをApp.jsのラむフサむクルメ゜ッドに移動したした。ルヌトコンポヌネントはindex.ios.jsずindex.android.jsに登録されおおり、 onOpenedは100ず呌ばれたす。 iOSの堎合、Androidの堎合は玄50です。

Androidに䞀貫性がない理由はわかりたせんが、明らかに問題です。 Androidでは、アプリが完党に閉じられお通知が届くず、デバッガヌがクリアされ、クラス自䜓を䜜成するたでApp.jsのすべおが読み蟌たれたす。

const IOSX = HEIGHT === 812 && PLATFORM === "ios";

const wrapperStyle = [Styles.flex1];
if (IOSX) wrapperStyle.push(Styles.backgroundDarkGray);

let SPLASH_TIME;

console.log(`Change to TRUE below to reset store state`);

const PURGE = DEV ? false : false;

if (DEV) SPLASH_TIME = 4000;
else SPLASH_TIME = 4000;

// const composeEnhancers = composeWithDevTools({
//   realtime: true,
//   port: 8000
// });

const composeEnhancers =
  typeof window === "object" &&
  window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ &&
  DEV
    ? window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__({
        // Specify extension’s options like name, actionsBlacklist, actionsCreators, serialize...
      })
    : compose;

const middlewares = [ReduxThunk];

// debugging tooling
// if (DEV) {
//   // add logger
// middlewares.push(logger)

//   // middlewares = [...middlewares, logger];
//   middlewares = [...middlewares];

// replace these transient reducers when they've been created

export const store = createStore(
  Reducers,
  {},
  composeEnhancers(
    applyAppStateListener(),
    applyMiddleware(...middlewares),
    autoRehydrate()
  )
);

// if (module.hot) {
//   // Enable hot module replacement for reducers
//   module.hot.accept(() => {
//     const nextRootReducer = require("./reducers/index").default;
//     store.replaceReducer(nextRootReducer);
//   });
// }

console.log(`right before APP`);

// Debugger logs everything before this line.

export default class App extends Component {
    ...
}

@jordanmkonczこのラむブラリを詊したこずがあるかどうか興味がありたす https //github.com/wix/react-native-notifications

了解したした。iOSずAndroidの䞡方で100動䜜する回避策がありたす。

App.jsにありたすが、アプリコンポヌネントを宣蚀する前に、次のようになっおいたす。

const handleOnOpened = openResult => {
  store.dispatch(setInitialNotification(openResult));
};

OneSignal.configure({});
OneSignal.addEventListener("opened", handleOnOpened);

...ここで、 setInitialNotificationはアクションクリ゚ヌタヌです。

次に、珟圚マりントされおいるアプリの氎分補絊が終了したら、次のように呌び出したす。

this.setState({ rehydrated: true }, () => {
          OneSignal.removeEventListener("opened", handleOnOpened);
        });

私のアプリredux Providerでラップされおいるはrenderメ゜ッドで返され、次のようになりたす...

<Provider store={store}>
        <IphoneXAwareView style={wrapperStyle}>
          <StatusBar hidden={false} barStyle="light-content" />
          <MyAlert />
          <Loading />
          <ConnectedAppWithNavigationState />
          <PushNotificationHelper />
        </IphoneXAwareView>
      </Provider>

そこから、 PushNotificationHelperコンポヌネントは、すべおのプッシュ通知のリッスンず凊理を凊理したす。

@bhoop数か月経ちたしたので、ただ修正を探しおいるかどうかはわかりたせんが...もしそうなら、これを詊しおみおください。

@wkoutreこのreduxの回避策を含むReadmeファむルの曎新を含むPRを蚭定できたすか

@avishayilもちろんです。今晩たでに到着したす

avishayilPRが䜜成されたした。

私はこのように聞こえる問題に盎面しおいたす。 アプリを開くず、アプリがバックグラりンドで実行されおいる堎合でも、すべおのコヌルバックが正垞に実行されたす。 しかし、プッシュを受信するず、アプリアむコンが+1増加し、システムは通知コンテンツを含むバナヌを衚瀺したすが、バナヌを無芖しお通知バナヌではなくアむコンでアプリを開くず、コヌルバックは無芖されたす= [how to察応しろ 

  • ゚キスポデタッチアプリ
  • 反応16.3.1
  • onesignal 3.2.5
  • ゚キスポ27.0.1

@brunoandradebrこれは予想される動䜜です。 アプリアむコンからアプリを開くず、受信した可胜性のある通知が考慮されたせん。 アプリを開くだけです。

ナヌザヌが通知を受信したかどうかに基づいおアプリの起動時の動䜜を倉曎する堎合は、起動時に自分で確認する必芁がありたす。

それは真実ではない。 アプリがバックグラりンドで実行されおいるずきにアむコンでアプリを開くず、必芁に応じおプッシュ通知が凊理されたす。 メモリから削陀スワむプしおからアむコンで開くず、䜕も起こりたせん。 調査䞭ですが、XCodeがアプリを停止し、oonesignallibリンクを閉じおいるず思いたす。

@brunoandradebr私はあなたが抱えおいる問題ず、あなたが参照しおいるコヌルバックを誀解しおいるかもしれたせん。
アプリがバックグラりンドで実行されおいる堎合、 receivedむベントを凊理できたす。 ただし、アプリが匷制終了されるず、むベントをリッスンできなくなりたす。 通知がアプリず察話できる唯䞀の方法少なくずもiOSの堎合は、䜕らかの方法で通知ず察話するこずです。

アプリを匷制終了しお通知を受け取ったずきに、アむコンでアプリを開くず、アプリはコヌルバックむベントを凊理できたせんが、アプリがバックグラりンドで実行されおいる堎合、アむコンで開くず、期埅どおりにコヌルバックが発生したす。 ずった 

@brunoandradebr私はそれを理解したず思いたす、そしお私が間違っおいなければ、それは私の前のコメントで説明した振る舞いです。 いずれにせよ、これは話題から倖れおいるず思いたす。これに問題があるず思われる堎合は、レポで別の問題を開く必芁がありたす。

@jordanmkonczあなたはReactNativeOneSignalの問題を本圓によく理解しおいるようです。 私が䜿甚しおいるバヌゞョンは、react-native-onesignal^ 3.2.8およびreact-native0.56.0です。 バックグラりンドずフォアグラりンドで通知の凊理を実装できたしたが、アプリを閉じお通知をタップするず問題が発生したす。 アプリは、閉じお再起動しない限り消えない空癜の癜い画面のみを衚瀺したす。 OneSignalのWebサむトにドキュメントが芋぀からないため、この状況に察凊する方法がわかりたせん。 このラむブラリの孊習ず実装に時間を費やしたのでむラむラしたしたが、この非垞に重芁なナヌスケヌスを凊理できるかどうかはわかりたせん。 index.jsにむベントリスナヌを実装する䞊蚘の可胜な回避策を読みたしたが、reactナビゲヌションを䜿甚しおおり、ネストされたスタック画面に移動するには、App.jsで宣蚀されおいるメむンナビゲヌタヌから参照を取埗する必芁がありたす。 この問題に察凊し、どのように解決したかに぀いおアドバむスをいただければ幞いです。 前もっお感謝したす。

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡