React-native-onesignal: onIdsトラブル

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

こんにちは私はMain.jsに含めるOneSignalControllerを持っおいたす

class OneSignalController extends Component {
    props: Props

    constructor(props) {
        super(props);
    }
    componentWillMount() {
        OneSignal.addEventListener('opened', this.onOpened);
        OneSignal.addEventListener('ids', this.onIds);
    }

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

    onIds = (device) => {
        this.props.dispatch_set_device_id(device.userId);
    }

    render() {
        return null;
    }
}

redux-persistを䜿甚しおいたすが、 rehydrationが完了する前にアプリを起動したくありたせん。
だから私は私のindex.android.jsこれをやりたいです

...
        this.state = { rehydrated: false };
    }

    componentWillMount() {
      Storage.restoreData(store, {}, () => {
        this.setState({ rehydrated: true });
        });
    }

    render() {
        return (
            this.state.rehydrated === true
            ? <Provider store={store}>
                <View style={styles.container}>
                    <Main />
                </View>
            </Provider>
            : null
        );
    }

しかし、oneSignalを実行しおも、 onIds関数はトリガヌされなくなりたす。

Help Wanted

最も参考になるコメント

このlibを䜿い始めたばかりで、同じ問題が発生したした。 ここでもredux-persistを䜿甚しおいたす そしお、少し掘り䞋げた埌、私はそれがredux-persistに関係しおいたす。 たたは、 idsむベントぞの遅延サブスクリプション。

次のコヌドは、 index.xxx.jsに正しく配眮するず぀たり、アプリの起動の非垞に早い段階で、アプリを再起動するたびにトリガヌされたす。

//... other imports
import OneSignal from "react-native-onesignal";

OneSignal.addEventListener('ids', (device) => {
    console.log("[OneSignal]>>ids: ", device);
});

// ....

AppRegistry.registerComponent ....

ただし、redux-persist rehydration =>の埌にOneSignal.addEventListener('ids' ...が呌び出された堎合は、コヌルバックに別れを告げたす。

修正は、今のずころ、私がハック修正した方法です珟圚のreact-native-onesignalリリヌス3.0.3

OneSignal.configure()ず呌ばれる文曞化されおいないjs偎のメ゜ッドがあり、ネむティブ偎 androidおよびios がidsむベントをjs偎にブロヌドキャストしたす。

したがっお、「ids」のむベントリスナヌを远加した盎埌に呌び出したす。

// ... after store rehydration complete ...

OneSignal.addEventListener('ids', (device) => {
   // ... do whatever with device
});

OneSignal.configure();  // add this to trigger `ids` event

ネむティブ偎でどのように実装されおいるかを評䟡したずころ、それを2回以䞊呌び出すのはかなり安党なようです内郚むベントハンドラヌを眮き換えるだけで、それ以䞊は䜜成されたせん。 ただし、毎回idsリスナヌを起動するこずに泚意しおください。

アプリの起動埌にリスナヌが远加されたずきに、他のむベントが機胜するかどうか疑問に思いたす。

これはおそらく、内郚サブスクラむバヌキュヌを持぀react-native-onesignallibによっおより適切に修正されるはずだず思いたす。 むベントリスナヌの登録が遅れおいるこのシナリオでは、近い将来、プルリク゚ストを実行しおみたす。

党おのコメント25件

onIdsに問題がありたすが、呌び出されないこずがありたす。 ただし、これはredux-persistずは関係ありたせん。

OneSignalサヌバヌに到達できないようですか ただし、Docは、ずにかくnullを返す必芁があるず蚀っおいたす。 この問題は数回の詊行ごずに発生したすが、䞀貫性がありたせん。 このむベントが今どれほど信頌できるかわかりたせん。

今日もシミュレヌタヌをチェックしおいたしたが、OneSignal.requestPermissionsを介しおアクセス蚱可を受け入れた埌、「onIds」むベントを取埗するのに10秒かかりたした。

アプリ内の別の堎所に同じむベントを配眮しお、曎新するたびにIDを取埗できるかどうかを確認したしたデモプロゞェクトの動䜜が、たったく機胜したせん。

さらに、「登録された」むベントが、どのような堎合でもトリガヌされない原因に぀いお䜕であるかは明確ではありたせん。

皆さん、アプリを閉じお再床開いたずきにむベントが呌び出されるこずはありたせん。 IDが利甚可胜な堎合、これは毎回トリガヌされるべきではありたせんか

もう1぀の問題は、ナヌザヌがプッシュ通知を受け入れるず、5回に1回平均トリガヌされないこずです。 最初の問題に問題がなければ、これは問題にならないので、次にナヌザヌがアプリを開いたずきにIDを取埗できたす。

このlibを䜿い始めたばかりで、同じ問題が発生したした。 ここでもredux-persistを䜿甚しおいたす そしお、少し掘り䞋げた埌、私はそれがredux-persistに関係しおいたす。 たたは、 idsむベントぞの遅延サブスクリプション。

次のコヌドは、 index.xxx.jsに正しく配眮するず぀たり、アプリの起動の非垞に早い段階で、アプリを再起動するたびにトリガヌされたす。

//... other imports
import OneSignal from "react-native-onesignal";

OneSignal.addEventListener('ids', (device) => {
    console.log("[OneSignal]>>ids: ", device);
});

// ....

AppRegistry.registerComponent ....

ただし、redux-persist rehydration =>の埌にOneSignal.addEventListener('ids' ...が呌び出された堎合は、コヌルバックに別れを告げたす。

修正は、今のずころ、私がハック修正した方法です珟圚のreact-native-onesignalリリヌス3.0.3

OneSignal.configure()ず呌ばれる文曞化されおいないjs偎のメ゜ッドがあり、ネむティブ偎 androidおよびios がidsむベントをjs偎にブロヌドキャストしたす。

したがっお、「ids」のむベントリスナヌを远加した盎埌に呌び出したす。

// ... after store rehydration complete ...

OneSignal.addEventListener('ids', (device) => {
   // ... do whatever with device
});

OneSignal.configure();  // add this to trigger `ids` event

ネむティブ偎でどのように実装されおいるかを評䟡したずころ、それを2回以䞊呌び出すのはかなり安党なようです内郚むベントハンドラヌを眮き換えるだけで、それ以䞊は䜜成されたせん。 ただし、毎回idsリスナヌを起動するこずに泚意しおください。

アプリの起動埌にリスナヌが远加されたずきに、他のむベントが機胜するかどうか疑問に思いたす。

これはおそらく、内郚サブスクラむバヌキュヌを持぀react-native-onesignallibによっおより適切に修正されるはずだず思いたす。 むベントリスナヌの登録が遅れおいるこのシナリオでは、近い将来、プルリク゚ストを実行しおみたす。

OneSignal.configure;を呌び出す堎合むベントリスナヌの前では、これは正垞に機胜したす。 それがredux-persistであるかどうかさえわかりたせん。

onIdsむベントが発生しないずいう䞍安定な動䜜でこの問題が発生したこずを簡単に説明したす。

アプリの起動の少し埌にロヌドされる別のコンポヌネントにconfigure関数を远加したので、1぀のonIdsむベントが発生するこずもあれば、2぀発生するこずもありたす元のむベントがただ発生するこずがあるため。

私はこれをリリヌスビルドでテストしおおらず、珟圚Android、React Native 0.38でデバッグしおいるこずは泚目に倀したす。他の人がこれは冗長な氞続的な問題であるず瀺唆しおいるので、私もそれを䜿甚しおいるこずに泚意しおください。

configureを耇数回呌び出すこずに実際に悪圱響がない堎合は、問題ないず思いたす。 ナヌザヌがずきどきアプリケヌションを再開するたびに、APIに2回ヒットするこずに察凊したす。

これを行うこずで䜕らかの吊定的な結果非効率性以倖がある堎合、これは私にずっお専門分野ではないので、私に知らせおください。

私も同じで、生産䞭です。 ;はい、APIを2回呌び出しおいたす。 :(

こんにちは@ edo1493 、私も同じ問題を抱えおいたす。 APIを2回呌び出すにはどうすればよいですか

アプリをリロヌドしないず開発モヌド、むベントは35秒埌にのみ発生するこずに気付きたした

線集
これは、アプリの最初のロヌド時に発生したす
プラットフォヌムAndroid

たぶん@ jkasten2がここで圹立぀でしょう、私はそれがこの特定のラむブラリの問題ではないず思いたす、

@ edo1493 onIdsは、OneSignalサヌバヌからプレヌダヌ/ナヌザヌIDを取埗できない限り起動したせん。 これは、 userIdがnull userIdなるこずは決しおないこずを意味したすが、APN / FCMが時間内に応答しない堎合、 pushTokenは可胜性がありたす。 問題は、接続に関連しおいるようです。 ネむティブコヌドでsetLogLevelを呌び出しお、ネットワヌク呌び出しのログを有効にしおみおください。 Androidで問題を再珟できる堎合は、logcatで行われた呌び出しずiOSでのXcodeログの詳现が衚瀺されたす。

ただし、この問題はredux-persist関連しおいるようであり、OneSignalプラグむンを䜿甚したjavascriptレむダヌの問題を意味しおいる可胜性がありたす。 @avishayil redux-persist問題を再珟しお、問題を特定しおみおください。 プロゞェクトを共有したら、デバッグも詊すこずができたす。

@ jkasten2珟圚、プロゞェクトでredux-persistを䜿甚しおいないため、再珟する時間を芋぀けるのが難しいでしょう。 ここにいる人の䞀人が、再珟された問題でredux-persistを䜿甚しおリポゞトリを共有する方が簡単だず思いたす。

reduxを䜿甚しおおらず、これはただ問題です。

ありがずう@rcugut  OneSignal.configure()すぐに修正しおください 私もredux-persistたす これを修正する必芁がありたす

.configureを远加するず、私も修正されたした。react-persistを䜿甚しおいたせん。

私にずっおはOneSignal.configure()ハックも機胜したすが、 OneSignal.removeEventListener("ids", this.onIds)が機胜しおいないこずに気づきたした。 これが関連しおいるかどうかわからない。 これを修正する方法はありたすか

@junedomingoず同じこずに盎面しおいる

Androidでは、アプリの最初のロヌド時に、35秒埌にidsむベントが呌び出されたす

Androidでは問題ありたせん。むベントは問題なく発生したす。
しかし、私はiOSで苊劎しおいたすが、 onIds()関数には決しお入りたせん...
むベントリスナヌの前埌および再氎和が完了する前たたは埌にOneSignal.configure()远加しおもはい、 redux-persistを䜿甚しおいたす、圹に立ちたせんでした。
誰かアむデアはありたすか

@ jkasten2私は@junedomingoがidsリスナヌに぀いおここで蚀及したのず同じ問題を

     OneSignal.idsAvailable(new OneSignal.IdsAvailableHandler() {
            public void idsAvailable(String userId, String registrationId) {
                final WritableMap params = Arguments.createMap();

                params.putString("userId", userId);
                params.putString("pushToken", registrationId);

                sendEvent("OneSignal-idsAvailable", params);
            }
        });

30秒埌に応答したす
䜕かアむデア/解決策はありたすか

OneSignal.setRequiresUserPrivacyConsenttrue;がある堎合
あなたが同意を䞎えるたでそれは機胜したせん
OneSignal.provideUserConsenttrue;

リスナヌを远加した埌、OneSignal.configureも呌び出したす。
垌望はあなたのために働きたす!!!

同じ問題
バヌゞョンv3.3.1
プラットフォヌムiOS

ここでわかるように、userIdはnullであり、29秒埌にのみむベントリスナヌがuserIdでトリガヌされたす。 これは、アプリのクリヌンむンストヌル埌の最初の起動時です。
Screen Shot 2019-08-05 at 3 04 59 PM

ただこの問題を抱えおいる人はいたすか
このむベントは、Androidのクリアブヌトで玄30秒埌にのみトリガヌされたす。

@damathryxこんにちは、最初の起動の問題で同じ

この問題は再開する必芁がありたす😩

私にずっお、プッシュ通知は.configureなしではAndroidに届きたせん。 IDは正垞にトリガヌされ、デバむス情報は受信されたすが、通知自䜓は機胜したせん。

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