React-native-onesignal: masalah onIds

Dibuat pada 19 Feb 2017  ·  25Komentar  ·  Sumber: OneSignal/react-native-onesignal

Hai saya punya OneSignalController yang saya sertakan di Main.js

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

Saya menggunakan redux-persist dan tidak ingin memulai aplikasi sebelum rehydration selesai.
jadi saya ingin melakukan ini di 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
        );
    }

Tetapi jika saya melakukan oneSignal tidak memicu fungsi onIds lagi.

Help Wanted

Komentar yang paling membantu

Saya baru saja mulai menggunakan lib ini dan mengalami masalah yang sama. Menggunakan redux-bertahan di sini juga! Dan setelah beberapa penggalian, saya sangat yakin itu ada hubungannya dengan redux-persist. Atau langganan tertunda apa pun ke acara ids .

Kode berikut, jika diletakkan tepat di index.xxx.js (yaitu sangat awal di awal aplikasi), itu akan memicu setiap aplikasi dimulai ulang:

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

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

// ....

AppRegistry.registerComponent ....

Namun, jika OneSignal.addEventListener('ids' ... dipanggil setelah redux-persist rehydration => ciuman selamat tinggal panggilan balik.

PERBAIKI inilah cara saya (meretas?) memperbaikinya, untuk saat ini (rilis react-native-onesignal saat ini 3.0.3):

ada metode sisi js tidak berdokumen yang disebut OneSignal.configure() yang membuat sisi asli ( Android dan ios ) menyiarkan acara ids kembali ke sisi js.

Jadi, panggil tepat setelah menambahkan pendengar acara untuk 'id':

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

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

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

Menurut penilaian saya tentang bagaimana itu diterapkan di sisi asli dan tampaknya cukup aman untuk menyebutnya, bahkan lebih dari satu kali (itu hanya menggantikan event handler internal, tidak membuat lebih banyak). Namun perlu diingat, ini memicu ids pendengar setiap kali.

Sekarang saya bertanya-tanya apakah acara lain akan berfungsi ketika pendengar ditambahkan nanti di startup aplikasi.

Saya pikir ini mungkin harus diperbaiki lebih baik oleh lib react-native-onesignal dengan antrian pelanggan internal. Saya akan mencoba mencobanya, mungkin melakukan permintaan tarik dalam waktu dekat untuk skenario ini dengan pendaftaran pendengar acara yang tertunda.

Semua 25 komentar

Saya mengalami beberapa masalah dengan onIds, yang terkadang tidak dipanggil. Namun, ini tidak terkait dengan redux-persist.

Sepertinya server OneSignal tidak dapat dijangkau? Namun, Doc mengatakan itu harus mengembalikan nol. Saya mengalami masalah ini setiap beberapa kali mencoba, itu tidak konsisten. Saya tidak yakin seberapa andal acara ini sekarang.

Saya memeriksa lagi di simulator hari ini dan butuh 10 detik untuk mendapatkan acara "onIds", setelah menerima izin melalui OneSignal.requestPermissions().

Saya telah menempatkan acara yang sama di tempat lain dalam aplikasi untuk melihat apakah saya masih mendapatkan Id, setiap kali saya menyegarkan (perilaku proyek demo), tetapi tidak berfungsi sama sekali.

Lebih lanjut, tidak jelas apa yang seharusnya menjadi peristiwa "terdaftar" tentang penyebab yang tidak pernah dipicu dalam hal apa pun.

Guys, acara tidak pernah dipanggil ketika aplikasi ditutup dan dibuka lagi. Maksud saya jika id tersedia, bukankah ini harus dipicu setiap saat?

Masalah lainnya adalah bahwa itu tidak dipicu 1 dari 5 kali (rata-rata), ketika pengguna menerima Pemberitahuan Push. Ini tidak akan menjadi masalah jika masalah pertama baik-baik saja, jadi kami dapat mengambil id saat pengguna membuka aplikasi berikutnya.

Saya baru saja mulai menggunakan lib ini dan mengalami masalah yang sama. Menggunakan redux-bertahan di sini juga! Dan setelah beberapa penggalian, saya sangat yakin itu ada hubungannya dengan redux-persist. Atau langganan tertunda apa pun ke acara ids .

Kode berikut, jika diletakkan tepat di index.xxx.js (yaitu sangat awal di awal aplikasi), itu akan memicu setiap aplikasi dimulai ulang:

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

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

// ....

AppRegistry.registerComponent ....

Namun, jika OneSignal.addEventListener('ids' ... dipanggil setelah redux-persist rehydration => ciuman selamat tinggal panggilan balik.

PERBAIKI inilah cara saya (meretas?) memperbaikinya, untuk saat ini (rilis react-native-onesignal saat ini 3.0.3):

ada metode sisi js tidak berdokumen yang disebut OneSignal.configure() yang membuat sisi asli ( Android dan ios ) menyiarkan acara ids kembali ke sisi js.

Jadi, panggil tepat setelah menambahkan pendengar acara untuk 'id':

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

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

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

Menurut penilaian saya tentang bagaimana itu diterapkan di sisi asli dan tampaknya cukup aman untuk menyebutnya, bahkan lebih dari satu kali (itu hanya menggantikan event handler internal, tidak membuat lebih banyak). Namun perlu diingat, ini memicu ids pendengar setiap kali.

Sekarang saya bertanya-tanya apakah acara lain akan berfungsi ketika pendengar ditambahkan nanti di startup aplikasi.

Saya pikir ini mungkin harus diperbaiki lebih baik oleh lib react-native-onesignal dengan antrian pelanggan internal. Saya akan mencoba mencobanya, mungkin melakukan permintaan tarik dalam waktu dekat untuk skenario ini dengan pendaftaran pendengar acara yang tertunda.

Jika Anda memanggil OneSignal.configure(); sebelum pendengar acara ini berfungsi dengan baik. Saya bahkan tidak yakin apakah itu redux-bertahan.

Sekedar catatan singkat Saya baru saja mengalami masalah dengan perilaku tidak menentu dengan acara onIds tidak diaktifkan.

Sekarang setelah menambahkan fungsi configure ke komponen lain yang dimuat sedikit kemudian dalam peluncuran aplikasi, saya terkadang mendapatkan satu peristiwa onIds yang diaktifkan dan kadang-kadang dua (karena yang asli kadang-kadang masih menyala).

Perlu dicatat bahwa saya belum menguji ini pada rilis build dan saat ini sedang men-debug di Android, React Native 0.38 dan karena orang lain menyarankan ini adalah masalah redux, perlu dicatat bahwa saya juga menggunakannya.

Jika memang tidak ada pengaruh negatif untuk memanggil konfigurasi beberapa kali maka saya kira itu baik-baik saja. Saya hanya akan menghadapinya dengan memukul API saya dua kali setiap kali pengguna melanjutkan aplikasi sesekali.

Jika ada semacam hasil negatif dari melakukan ini (selain inefisiensi) tolong beri tahu saya karena ini bukan bidang keahlian saya.

Saya memiliki hal yang sama dan kami sedang berproduksi. ;) Ya, saya memanggil API dua kali. :(

Hai @ edo1493 , saya juga mengalami masalah yang sama. Bagaimana cara memanggil API dua kali?

Saya perhatikan bahwa tanpa memuat ulang aplikasi (mode Pengembang), acara hanya akan diaktifkan setelah 35 detik

Sunting:
Ini terjadi pada pemuatan pertama aplikasi
Platform: Android

Mungkin @jkasten2 akan dapat membantu di sini, saya pikir itu bukan masalah dengan perpustakaan khusus ini,

@edo1493 onIds tidak akan aktif kecuali bisa mendapatkan id pemain/pengguna dari server OneSignal. Ini berarti bahwa userId tidak akan pernah menjadi null namun pushToken mungkin jika APN / FCM tidak merespon tepat waktu. Masalahnya melihat tampaknya terkait dengan koneksi. Bisakah Anda mencoba memanggil setLogLevel dalam kode asli untuk mengaktifkan pencatatan panggilan jaringan? Jika Anda dapat mereproduksi masalah dengan Android, ini akan memberikan detail lebih lanjut tentang panggilan yang dilakukan di logcat vs log Xcode dengan iOS.

Namun sebagian besar mencatat masalah tampaknya terkait dengan redux-persist yang kemungkinan besar berarti masalah di lapisan javascript dengan plugin OneSignal. @avishayil Bisakah Anda mencoba mereproduksi masalah dengan redux-persist dan mencoba menunjukkan masalahnya? Bagikan proyek setelah Anda melakukannya, saya dapat mencoba men-debugnya juga.

@jkasten2 Saat ini saya tidak menggunakan redux-persist dalam proyek saya sehingga akan sulit untuk menemukan waktu untuk mereproduksi. Saya pikir akan lebih mudah jika salah satu dari orang-orang di sini akan membagikan repo menggunakan redux-persist dengan masalah yang direproduksi.

Tidak menggunakan redux dan ini masih menjadi masalah.

Terima kasih @rcugut ! OneSignal.configure() segera perbaiki! Saya menggunakan redux-persist juga ! Perlu ini untuk diperbaiki!

Menambahkan .configure memperbaikinya untuk saya juga, saya tidak menggunakan react-persist.

Bagi saya OneSignal.configure() hack juga berfungsi, tetapi saya perhatikan bahwa OneSignal.removeEventListener("ids", this.onIds) tidak berfungsi. Tidak yakin apakah ini terkait. Ada ide bagaimana cara memperbaikinya?

menghadapi hal yang sama seperti @junedomingo

Di android, pada pemuatan pertama aplikasi, acara id dipanggil setelah 35 detik

Saya tidak punya masalah di Android, acara berjalan tanpa masalah.
Tapi saya berjuang di iOS, di mana saya tidak, tidak pernah, masuk ke fungsi onIds() ...
Menambahkan OneSignal.configure() sebelum atau sesudah pendengar acara dan sebelum atau setelah rehidrasi selesai (ya, saya menggunakan redux-persist ) tidak membantu.
Ada yang punya ide?

@jkasten2 saya memiliki masalah yang sama dengan @junedomingo yang disebutkan di sini tentang pendengar id. saya meletakkan log di luar dan di dalam metode ini

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

itu merespons setelah 30 detik!
apakah anda punya ide/solusi?

jika Anda memiliki OneSignal.setRequiresUserPrivacyConsent(true);
itu tidak akan berfungsi sampai Anda memberikan persetujuan!
OneSignal.provideUserConsent(benar);

juga memanggil OneSignal.configure() setelah menambahkan pendengar.
Harapan bekerja untuk Anda!!!

Permasalahan yang sama
versi: v3.3.1
Platform: iOS

Seperti yang Anda lihat di sini userId adalah null, hanya setelah 29 detik event listener dipicu dengan userId. Ini pada peluncuran pertama setelah pemasangan aplikasi yang bersih.
Screen Shot 2019-08-05 at 3 04 59 PM

Adakah yang masih dengan masalah ini?
Acara ini hanya dipicu setelah ~ 30 detik dalam boot yang jelas di Android.

@damathryx Hai, saya menghadapi null userId yang sama pada masalah peluncuran pertama. Apakah Anda menemukan perbaikan untuk itu?

Masalah ini harus dibuka kembali

Bagi saya pemberitahuan push tidak masuk di Android tanpa .configure . Id terpicu dengan baik sekarang, info perangkat diterima, tetapi notifikasi itu sendiri tidak berfungsi.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat