React-native-onesignal: onOpened/onReceived-Ereignisse werden auf Android nicht ausgelöst

Erstellt am 9. Juli 2018  ·  35Kommentare  ·  Quelle: OneSignal/react-native-onesignal

Beschreibung:
Hallo zusammen. Ich habe Probleme mit onOpened/onReceived-Ereignissen auf Android. Das Verhalten ist auf dem Emulator und auf einem echten Gerät unterschiedlich, aber in beiden Fällen wird eine exakte Push-Nachricht geliefert.

Auf Emulator:

  1. Vordergrund - onReceived-Ereignis wird aufgerufen, onOpened wird nur aufgerufen, wenn Push angetippt wird (korrekt)
  2. Hintergrund aktiv - überhaupt nicht ausgelöst (falsch)
  3. Hintergrund inaktiv (App ist geschlossen) – onOpened wird nur aufgerufen, wenn Push angetippt wird (richtig)

Auf einem echten Gerät:

  1. Vordergrund - überhaupt nicht gefeuert (falsch)
  2. Hintergrund aktiv - überhaupt nicht ausgelöst (falsch)
  3. Hintergrund inaktiv (App ist geschlossen) – onOpened wird nur aufgerufen, wenn Push angetippt wird (richtig)

Umfeld

  1. reagieren-native-einsignal: "3.2.4"
  2. reagieren-nativ: "0.50.4"
  3. compileSdkVersion: "27"
  4. buildToolsVersion: "27.0.3"
  5. Note: "4.1"

Schritte zum Reproduzieren des Problems:
Aufgrund der Vertrauenspolitik meines Unternehmens kann ich keine Schritte zum Reproduzieren bereitstellen.

Noch etwas:
android/build.gradle

```// Build-Datei der obersten Ebene, in der Sie Konfigurationsoptionen hinzufügen können, die allen Unterprojekten/Modulen gemeinsam sind.

buildscript {
Depots {
jcenter()
Google()
}
Abhängigkeiten {
Klassenpfad „com.android.tools. build:gradle :3.0.1'

    // NOTE: Do not place your application dependencies here; they belong
    // in the individual module build.gradle files
}

}

alleProjekte {
Depots {
maven { url " https://jitpack.io " } // verwendet für MPAndroidChart
mavenLocal()
Google()
jcenter()
Männchen {
// Alles von React Native (JS, Obj-C-Quellen, Android-Binärdateien) wird von npm installiert
URL "$rootDir/../node_modules/react-native/android"
}
}
}

`android/app/build.gradle`

Plugin anwenden: 'com.onesignal.androidsdk.onesignal-gradle-plugin'
Plugin anwenden: "com.android.application"

Importieren Sie com.android.build.OutputFile

buildscript {
Depots {
maven { url ' https://plugins.gradle.org/m2/ ' } // Gradle-Plugin-Portal
}
Abhängigkeiten {
Klassenpfad „gradle.plugin.com. onesignal:onesignal-gradle-plugin :[0.10.0, 0.99.99]'
}
}

Plugin anwenden: 'com.onesignal.androidsdk.onesignal-gradle-plugin'

/**

  • Die Datei „react.gradle“ registriert eine Aufgabe für jede Build-Variante (z. B. bundleDebugJsAndAssets
  • und BundleReleaseJsAndAssets).
  • Diese rufen während des Android-Builds grundsätzlich react-native bundle mit den richtigen Argumenten auf
  • Kreislauf. Standardmäßig wird bundleDebugJsAndAssets übersprungen, da wir im Debug-/Entwicklungsmodus lieber die laden
  • Bundle direkt vom Entwicklungsserver. Unten sehen Sie alle möglichen Konfigurationen
  • und ihre Voreinstellungen. Wenn Sie sich entscheiden, einen Konfigurationsblock hinzuzufügen, stellen Sie sicher, dass Sie ihn vor dem hinzufügen
  • apply from: "../../node_modules/react-native/react.gradle" Zeile.
    *
  • project.ext.react = [
  • // der Name der generierten Asset-Datei, die Ihr JS-Bundle enthält
  • bundleAssetName: "index.android.bundle",
    *
  • // die Eingangsdatei für die Bundle-Generierung
  • entryFile: "index.android.js",
    *
  • // ob JS und Assets im Debug-Modus gebündelt werden sollen
  • bundleInDebug: falsch,
    *
  • // ob JS und Assets im Release-Modus gebündelt werden sollen
  • BundleInRelease: wahr,
    *
  • // ob JS und Assets in einer anderen Build-Variante gebündelt werden sollen (falls konfiguriert).
  • // Siehe http://tools.android.com/tech-docs/new-build-system/user-guide#TOC -Build-Variants
  • // Die Konfigurationseigenschaft kann in den folgenden Formaten vorliegen
  • // 'bundleIn${productFlavor}${buildType}'
  • // 'bundleIn${buildType}'
  • // bundleInFreeDebug: wahr,
  • // bundleInPaidRelease: wahr,
  • // BundleInBeta: wahr,
    *
  • // ob der Dev-Modus in benutzerdefinierten Build-Varianten deaktiviert werden soll (standardmäßig nur in der Version deaktiviert)
  • // zum Beispiel: Dev-Modus im Staging-Build-Typ deaktivieren (falls konfiguriert)
  • devDisabledInStaging: wahr,
  • // Die Konfigurationseigenschaft kann in den folgenden Formaten vorliegen
  • // 'devDisabledIn${productFlavor}${buildType}'
  • // 'devDisabledIn${buildType}'
    *
  • // die Wurzel Ihres Projekts, dh wo "package.json" lebt
  • Wurzel: "../../",
    *
  • // wo das JS-Bundle-Asset in den Debug-Modus versetzt werden soll
  • jsBundleDirDebug: "$buildDir/intermediates/assets/debug",
    *
  • // wo das JS-Bundle-Asset in den Release-Modus versetzt werden soll
  • jsBundleDirRelease: "$buildDir/intermediates/assets/release",
    *
  • // wohin man Drawable-Ressourcen / React-Native-Assets legt, z. B. die, die Sie über verwenden
  • // require('./image.png')), im Debug-Modus
  • resourcesDirDebug: "$buildDir/intermediates/res/merged/debug",
    *
  • // wohin man Drawable-Ressourcen / React-Native-Assets legt, z. B. die, die Sie über verwenden
  • // require('./image.png')), im Freigabemodus
  • resourcesDirRelease: "$buildDir/intermediates/res/merged/release",
    *
  • // Standardmäßig werden die Gradle-Aufgaben übersprungen, wenn sich keine der JS-Dateien oder Assets ändert; das heisst
  • // dass wir uns keine Dateien in android/ oder ios/ ansehen, um festzustellen, ob die Aufgaben den Anforderungen entsprechen
  • // Datum; wenn Sie andere Ordner haben, die Sie aus Leistungsgründen ignorieren möchten (gradle
  • // indiziert den gesamten Baum), fügen Sie sie hier hinzu. Alternativ, wenn Sie JS-Dateien in Android/
  • // Zum Beispiel möchten Sie es vielleicht von hier entfernen.
  • inputExcludes: ["android/ ", "ios/ "],
    *
  • // überschreiben, welcher Knoten aufgerufen wird und mit welchen zusätzlichen Argumenten
  • nodeExecutableAndArgs: ["Knoten"],
    *
  • // zusätzliche Argumente an den Packager liefern
  • extraPackagerArgs: []
  • ]
    */

project.ext.react = [
cliPath: "node_modules/haul/bin/cli.js"
]

anwenden von: "../../node_modules/react-native/react.gradle"

/**

  • Setzen Sie dies auf true, um zwei separate APKs anstelle von einem zu erstellen:

    • Ein APK, das nur auf ARM-Geräten funktioniert


    • Ein APK, das nur auf x86-Geräten funktioniert

  • Der Vorteil ist, dass die Größe der APK um etwa 4 MB reduziert wird.
  • Laden Sie alle APKs in den Play Store hoch und die Leute werden sie herunterladen
  • die richtige basierend auf der CPU-Architektur ihres Geräts.
    */
    def enableSeparateBuildPerCPUArchitecture = false

/**

  • Führen Sie Proguard aus, um den Java-Bytecode in Release-Builds zu verkleinern.
    */
    def enableProguardInReleaseBuilds = false

Android {
compileSdkVersion 27
buildToolsVersion "27.0.3"

defaultConfig {
    applicationId "com.binomysteryshopper"
    minSdkVersion 16
    targetSdkVersion 22
    versionCode 1
    versionName "1.0"
    vectorDrawables.useSupportLibrary = true
    ndk {
        abiFilters "armeabi-v7a", "x86"
    }
}
signingConfigs {
      release {
          if (project.hasProperty('MYAPP_RELEASE_STORE_FILE')) {
              storeFile file(MYAPP_RELEASE_STORE_FILE)
              storePassword MYAPP_RELEASE_STORE_PASSWORD
              keyAlias MYAPP_RELEASE_KEY_ALIAS
              keyPassword MYAPP_RELEASE_KEY_PASSWORD
          }
      }
  }
splits {
    abi {
        reset()
        enable enableSeparateBuildPerCPUArchitecture
        universalApk false  // If true, also generate a universal APK
        include "armeabi-v7a", "x86"
    }
}
buildTypes {
    release {
        minifyEnabled enableProguardInReleaseBuilds
        proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
        signingConfig signingConfigs.release
    }
}
// applicationVariants are e.g. debug, release
applicationVariants.all { variant ->
    variant.outputs.each { output ->
        // For each separate APK per architecture, set a unique version code as described here:
        // http://tools.android.com/tech-docs/new-build-system/user-guide/apk-splits
        def versionCodes = ["armeabi-v7a":1, "x86":2]
        def abi = output.getFilter(OutputFile.ABI)
        if (abi != null) {  // null for the universal-debug, universal-release variants
            output.versionCodeOverride =
                    versionCodes.get(abi) * 1048576 + defaultConfig.versionCode
        }
    }
}

}

Abhängigkeiten {
compile (project(':react-native-onesignal')){
Gruppe ausschließen: "com.google.android.gms"
}
kompilieren ("com.google.android.gms:play-services-base:12.0.1") {
Kraft = wahr;
}
Projekt kompilieren(':react-native-sound')
Projekt kompilieren(':react-native-audio')
Projekt kompilieren (':react-native-fetch-blob')
Projekt kompilieren (':react-native-fs')
compile project(':react-native-geocoder')
Projekt kompilieren (':react-native-image-crop-picker')
Projekt kompilieren(':react-native-version-check')
Projekt kompilieren (':react-native-charts-wrapper')
Projekt kompilieren(':react-native-spinkit')
Projekt kompilieren(':react-native-svg')
Projekt kompilieren(':react-native-maps')
fileTree kompilieren (dir: "libs", include: ["*.jar"])
kompiliere "com.android. support:appcompat-v7 :23.0.1"
kompiliere "com.facebook. respond :react-native :+" // From node_modules
}

// Führen Sie dies einmal aus, um die Anwendung mit BUCK ausführen zu können
// Legt alle Kompilierungsabhängigkeiten in den Ordner libs, damit BUCK sie verwenden kann
AufgabenkopieDownloadableDepsToLibs(Typ: Kopieren) {
aus configurations.compile
in 'libs'
}

`android/app/src/main/java/com/binomysteryshopper/MainApplication.java`

Paket com.binomysteryshopper;

android.app.Application importieren;

com.facebook.react.ReactApplication importieren;
import com.geektime.rnonesignalandroid.ReactNativeOneSignalPackage;
import com.zmxv.RNSound.RNSoundPackage;
import com.rnim.rn.audio.ReactNativeAudioPackage;
import com.RNFetchBlob.RNFetchBlobPackage;
com.rnfs.RNFSPackage importieren;
import com.reactnative.ivpusic.imagepicker.PickerPackage;
import io.xogus.reactnative.versioncheck.RNVersionCheckPackage;
import com.github.wuxudong.rncharts.MPAndroidChartPackage;
import com.react.rnspinkit.RNSpinkitPackage;
import com.horcrux.svg.SvgPackage;
com.facebook.react.ReactNativeHost importieren;
com.facebook.react.ReactPackage importieren;
import com.facebook.react.shell.MainReactPackage;
import com.devfd.RNGeocoder.RNGeocoderPackage;
com.facebook.soloader.SoLoader importieren;
import com.airbnb.android.react.maps.MapsPackage;

java.util.Arrays importieren;
java.util.List importieren;

öffentliche Klasse MainApplication erweitert Anwendung implementiert ReactApplication {

private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {
@Überschreiben
öffentlicher boolescher Wert getUseDeveloperSupport() {
BuildConfig.DEBUG zurückgeben;
}

<strong i="13">@Override</strong>
protected List<ReactPackage> getPackages() {
  return Arrays.<ReactPackage>asList(
      new MainReactPackage(),
        new ReactNativeOneSignalPackage(),
        new RNSoundPackage(),
        new ReactNativeAudioPackage(),
        new RNFetchBlobPackage(),
        new RNFSPackage(),
        new PickerPackage(),
        new RNVersionCheckPackage(),
        new MPAndroidChartPackage(),
        new RNSpinkitPackage(),
        new RNGeocoderPackage(),
        new SvgPackage(),
        new MapsPackage()
  );
}

<strong i="14">@Override</strong>
protected String getJSMainModuleName() {
  return "index";
}

};

@Überschreiben
public ReactNativeHost getReactNativeHost() {
mReactNativeHost zurückgeben;
}

@Überschreiben
öffentliche void onCreate() {
super.onCreate();
SoLoader.init (dies, /* natives Exopaket */ false);
}
}

`AndroidManifest.xml`

Paket="com.binomysteryshopper">









android:minSdkVersion="16"
android:targetSdkVersion="22" />

android:name=".MainApplication"
android:allowBackup="true"
android:label="@string/app_name"
android:icon="@mipmap/ic_launcher"
android:largeHeap="true"
android:theme="@style/AppTheme">

<activity
  android:name=".MainActivity"
  android:launchMode="singleTop"
  android:label="@string/app_name"
  android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
  android:screenOrientation="portrait"
  android:windowSoftInputMode="adjustResize"
  android:theme="@style/AppTheme">
    <intent-filter>
      <action android:name="android.intent.action.MAIN" />
      <action android:name="android.intent.action.DOWNLOAD_COMPLETE"/>
      <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    <intent-filter>
      <action android:name="android.intent.action.VIEW" />
      <category android:name="android.intent.category.DEFAULT" />
      <category android:name="android.intent.category.BROWSABLE" />
      <data android:scheme="binoshopper" />
    </intent-filter>
</activity>
<activity android:name="com.facebook.react.devsupport.DevSettingsActivity" />


`my OneSignal init`

KomponenteWillMount() {
OneSignal.init(ONESIGNAL_APP_ID, {
kOSSettingsKeyAutoPrompt: wahr,
kOSSettingsKeyInAppLaunchURL: falsch,
kOSSSettingsKeyPromptBeforeOpeningPushURL: true,
})
OneSignal.inFocusDisplaying(2)

OneSignal.addEventListener('received', this.onPushNotificationReceived)
OneSignal.addEventListener('opened', this.onPushNotificationOpened)

}

KomponenteWillUnmount() {
OneSignal.removeEventListener('received', this.onPushNotificationReceived)
OneSignal.removeEventListener('geöffnet', this.onPushNotificationOpened)
}

onPushNotificationReceived(Benachrichtigung) {
Alert.alert('onReceived') // für Tests auf einem realen Gerät
}

onPushNotificationOpened(openResult) {
Alert.alert('onOpened') // für Tests auf einem echten Gerät
}
```

Hilfreichster Kommentar

@sofianegargouri Hier ist die PR: https://github.com/geektimecoil/react-native-onesignal/pull/592

Wir werden entweder morgen oder übermorgen ein Update veröffentlichen.

Alle 35 Kommentare

Auf IOS funktioniert es perfekt. Leider kann ich keine Protokolle von Android Logcat bereitstellen, da ich kein echtes Gerät habe. Ich habe auf dem Gerät meines weit entfernten Freundes wegen TeamViewer getestet.

Ich habe auch versucht, OneSignal.setLogLevel(0, 6) auf einem echten Gerät zu machen. Aber es wurden keine Fehler gefunden, alle Anfragen waren erfolgreich, nur Ereignisse wurden nicht ausgelöst.

Hallo @Ble3k , wir waren in letzter Zeit ziemlich beschäftigt mit der Arbeit an einem neuen Flutter SDK und hatten noch keine Zeit, Ihr Problem zu untersuchen, aber ich werde es morgen untersuchen und mich in Kürze bei Ihnen melden, entschuldigen Sie die Verzögerung!

Hallo,

Ich wollte nur sagen, dass ich das gleiche Verhalten auf 3.2.5 auf einem Entwicklungsgerät sehe. Seltsam, weil ich in letzter Zeit nichts geändert habe und ich mir ziemlich sicher bin, dass es vor einigen Tagen funktioniert hat, da meine fokussierten Pushs als In-App-Toasts angezeigt werden. Ich erinnere mich, dass ich diese getestet habe und es funktioniert hat.

Ich werde das nicht weiter untersuchen, da wir uns entschieden haben, zu normalen Push-Benachrichtigungen überzugehen, selbst wenn die App fokussiert ist

@Nightsd01 Thx, werde auf deine Untersuchung warten.

Auf Android mit Verzögerung beim Empfang von Benachrichtigungen, auf meinem Android-Telefon getestet und Benachrichtigung nach 30-40 Minuten erhalten, mehrfach getestet

Gibt es hierzu Neuigkeiten? Ich habe das gleiche Problem auf einem Android-Gerät (Samsung Galaxy S7).

Keines der onOpened- oder onReceived-Ereignisse wird ausgelöst, die Benachrichtigung wird jedoch empfangen. Wir müssen in der Lage sein, den Benutzer zu einem bestimmten Bildschirm zu navigieren, wenn das onOpened-Ereignis ausgelöst wird.

Hat jemand ein Problem damit, dass Ereignisse (empfangen, geöffnet) nicht ausgelöst werden, nachdem die native Android-App durch doppeltes Drücken von R neu geladen oder das Paket „react-native-restart“ verwendet wurde?

@ackosumane Ich verwende Expo und Updates.reload() tatsächlich sehr oft in meinem Entwicklungsworkflow.

Und du hast Recht:

  • Ich kann die Rückrufe beim ersten App-Start auslösen
  • Ich sehe keine Rückrufe, die nach dem ersten Neuladen der App ausgelöst wurden

@ Nightsd01 Es sieht also so aus, als ob die Android-Integration von OneSignal RN das Neuladen von Apps derzeit nicht sehr gut unterstützt. Es ist nicht so wirkungsvoll, wie ich dachte, da der Benutzer die App meistens nicht neu lädt, aber es gibt Produktionsfälle, in denen wir möchten, dass der Benutzer die App neu lädt (OverTheAir-Updates wie Expo/CodePush oder Benutzerabmeldung?). In solchen Fällen wäre es toll, dass nach einem Reload die Pushes nicht kaputt gehen ;)

@Nightsd01 Hallo, gibt es Neuigkeiten?

Hallo, ich stehe auch vor dem gleichen Problem. Irgendwelche Lösungen dafür ???

Als Update zu diesem Problem: Wir planen, dies im nächsten Update zu beheben!

@Nightsd01 Irgendein Datum? Gibt es einen Zweig, den wir mit dem Fix forken können?

@sofianegargouri Hier ist die PR: https://github.com/geektimecoil/react-native-onesignal/pull/592

Wir werden entweder morgen oder übermorgen ein Update veröffentlichen.

danke @ Nightsd01 , dieses Problem kann geschlossen werden, denke ich

Können Sie bitte eine neue npm-Version mit dem Fix veröffentlichen?

Für alle, die bei diesem Problem geblieben sind, der Code von master funktioniert jetzt gut.

Führen Sie einfach Folgendes aus:

npm installiere git+ https://github.com/geektimecoil/react-native-onesignal#master --save

@eabuslaiman30 Steht immer noch vor einem Problem. Ich verwende git+ https://github.com/geektimecoil/react-native-onesignal#master , wie Sie oben erwähnt haben. In Android wird immer noch keines der Ereignisse ausgelöst. Jeder kann vorschlagen, welche neueste Version stabil ist? Zuvor habe ich die Version 3.0.5 verwendet, die einwandfrei funktionierte, außer dass die App beendet wurde und keine Benachrichtigung in Android 8.0 (Oreo) empfangen wurde. Um dieses Problem zu beheben, aktualisiere ich auf die neueste Version und erhalte diesen Fehler.

@eabuslaiman30 @Nightsd01 Ich habe es auch versucht und wie @shahchaitanya stehe ich immer noch vor dem Problem.

Ich habe eine PR erstellt, die die Hörer zu beheben scheint, die sich nicht erneut anmelden: https://github.com/geektimecoil/react-native-onesignal/pull/593

@shahchaitanya Sie können den Java-Code des lokalen Projekts mit dieser winzigen Änderung bearbeiten, und dies sollte Ihr Problem vorübergehend lösen.

Hey @slorber Ihre Lösung löst die Methode onOpened und onReceived aus. Aber das onIds-Ereignis wird noch nicht ausgelöst? Haben Sie überprüft, ob das onIds-Ereignis in Ihrem Code ausgelöst wird oder nicht? Ich dachte, ich bleibe bei React-Native-OneSignal Version 3.0.5, bis die neueste Version stabil wird.

Ich habe gerade getestet und alle 3 Rückrufe werden beim Neustart der App für mich ausgelöst, beginnend mit onIds.

Selbst wenn onIds nicht ausgelöst würden, wäre es keine große Sache für mich, da sich die IDs wahrscheinlich nicht über Neustarts hinweg ändern und sie bereits an mein Backend gesendet wurden.

@slorber Für mich ist es eine große Sache, wenn onIds beim Neustart einer App nicht ausgelöst wurden. Ich speichere idToken auch im lokalen Speicher und im Backend. Beim Abmelden habe ich es aus dem Backend entfernt. Und irgendwie, wenn der Benutzer den lokalen Speicher löscht, wie kann ich dann das idToken eines Benutzers erhalten, wenn onIds nicht jedes Mal ausgelöst wurde. In früheren Versionen bis 3.2.0 (Major Update) wird onIds jedes Mal ausgelöst, wenn eine App neu gestartet wird.

Hey Leute @slorber @shahchaitanya. Lassen Sie mich einen Teil meines Implementierungscodes kopieren, vielleicht hilft es Ihnen (ich musste einige Codezeilen hinzufügen, die in einer früheren Version nicht erforderlich waren).

OneSignal.init('YOUR_APP_ID');
OneSignal.addEventListener('ids', this.onIds);
OneSignal.configure();

Zum Beispiel habe ich die "init"-Funktion in früheren Versionen nicht verwendet, da die Initialisierung anscheinend aus dem Java-Code erfolgte.

Außerdem verwende ich npm install git+https://github.com/geektimecoil/react-native-onesignal\#master --save als Abhängigkeit und erhalte drei Ereignisse korrekt (onIds, empfangen, geöffnet).

Ich verwende auch init und configure und erinnere mich, dass es ein Problem mit IDs gab, die nicht ausgelöst wurden, wenn configure nicht aufgerufen wurde

    OneSignal.init(OneSignalAppId, OneSignalSettings);
    OneSignal.addEventListener('received', onReceived);
    OneSignal.addEventListener('opened', onOpened);
    OneSignal.addEventListener('ids', onIds);
    // Quickfix for ids event not firing!
    // See https://github.com/geektimecoil/react-native-onesignal/issues/200#issuecomment-288579373
    OneSignal.configure();
    OneSignal.inFocusDisplaying(inFocusDisplaying);
    OneSignal.setSubscription(true);
    OneSignal.syncHashedEmail(email);
    OneSignal.sendTags(tags);

@slorber @eabuslaiman30 Jetzt funktioniert es gut. Ich habe verpasst, OneSignal.configure() hinzuzufügen. Früher brauchte ich es nicht, um den onIds-Listener auszulösen. Hey @slorber, jetzt muss ich den Patch, den du oben erwähnt hast, nicht hinzufügen. @ eabuslaiman30- Lösung funktioniert absolut einwandfrei.

Perfekt @shahchaitanya , ich bin froh, dass es funktioniert hat!

Wir werden bald eine offizielle Version herausbringen, die diesen Fix enthält.

Ich habe kürzlich ein ziemlich schwerwiegendes Problem mit dem Android SDK behoben, also warte ich darauf, dass diese PR überprüft wird, bevor ich ein offizielles React-Native-Update veröffentliche.

Danke für eure Geduld an alle! In der Zwischenzeit können Sie einfach master verwenden

@shahchaitanya das ids -Ereignis soll einfach ausgelöst werden, wenn sich die IDs des Benutzers oder das Push-Token mit OneSignal ändern. Wenn sie sich seit der letzten Verwendung Ihrer App nicht geändert haben, werden die Ereignisse standardmäßig nicht ausgelöst.

Dies ist verwirrender Legacy-Code, ich beabsichtige, ihn in der nächsten Hauptversion umzugestalten, um viel intuitiver zu sein.

Sie können sie zum Feuern zwingen, indem Sie configure() anrufen, aber ich würde es nicht empfehlen. Eine elegantere Lösung ist der Aufruf OneSignal.getPermissionSubscriptionState() , der die OneSignal-ID des Benutzers enthält

Das Problem sollte jetzt in 3.2.6 behoben sein (zusammen mit einigen anderen Dingen). Danke für eure Geduld an alle!

Hallo! Ich bekomme dieses Problem immer noch auf Android (nicht vollständig überprüftes iOS).

  • App im Fokus – Geöffnetes Ereignis wird korrekt ausgelöst
  • App geschlossen – Geöffnetes Ereignis wird korrekt ausgelöst
  • App im Hintergrund – Geöffnetes Ereignis wird nie ausgelöst

Ich bin auf der Version 3.2.6 und mein Ereignis-Listener ist eingerichtet...

componentDidMount() {

        OneSignal.init(APP_ID, { kOSSettingsKeyAutoPrompt: true });

        OneSignal.addEventListener('ids', this.onIds);

        OneSignal.addEventListener('opened', (result) => alert('text'));

        OneSignal.inFocusDisplaying(2);

        // OneSignal.setLogLevel(0, 6);

        OneSignal.configure();
}

componentWillUnmount() {
    OneSignal.removeEventListener('ids', this.onIds);
    OneSignal.removeEventListener('opened', (result) => alert('text'));
}

@joefazz Ich kann Ihr Problem nicht reproduzieren. Können Sie versuchen, yarn remove react-native onesignal und yarn add react-native-onesignal auszuführen, nur um sicherzustellen, dass es auf 3.2.6 aktualisiert ist? Wenn ja, eröffne ich das Thema erneut.

Tritt das Problem bei Ihnen zu 100 % auf?

Können Sie dieses Problem in unserem Demoprojekt reproduzieren?

Es passiert 100% der Zeit und trat auch nach dem Entfernen und Lesen auf.

Ich werde versuchen, es später heute zu reproduzieren, und ich werde diesen Kommentar mit meinen Ergebnissen bearbeiten.

Ich weiß nicht, wie relevant es ist, aber in dem Projekt, an dem ich arbeite, waren wir auf Version 3.0.9 und haben den ganzen Weg auf 3.2.6 aktualisiert. Ich habe React-Native Unlink ausgeführt und dann neu verknüpft, iOS manuell aktualisiert und die gesamte native Initialisierung entfernt, um die Methode OneSignal.init() zu verwenden.

BEARBEITEN: Ich bin mir nicht sicher, was passiert ist, aber es funktioniert jetzt 100% der Zeit auf Android. Danke für deine Hilfe. Tut mir leid, ein geschlossenes Problem zu kommentieren 😅

Wenn jemand dieses Problem in 3.2.6 oder höher erneut sieht, können Sie gerne ein neues Problem eröffnen.

@joefazz Freut mich zu hören! Ich habe das Problem behoben, das das anfängliche Problem verursacht hat, aber es ist durchaus möglich, dass eine Art Race Condition vorliegt. Wenn Sie dieses Problem erneut sehen, können Sie gerne ein neues Problem eröffnen

In meiner App behebt die neue Version meine Probleme und ich sehe das von @joefazz gemeldete Verhalten nicht

Hallo zusammen, ich habe das gleiche Problem OneSignal.addEventListener('opened', (result) => console.log(result)); wird beim zweiten Start der App nicht ausgelöst. In einem Hintergrundmodus wird als erste Benachrichtigung das Ereignis „geöffnet“ angezeigt. Beenden Sie die App => erhalten Sie eine Benachrichtigung => „geöffnet“ wird nie wieder ausgelöst.

nur Android - 8-Version
erst nach zweiter Benachrichtigung, wenn App im Hintergrund war
reagieren-native-einsignal - 3.9.1

Ich habe dasselbe Problem. geöffnet wird nicht aufgerufen, wenn die App im Hintergrund ist, gibt es eine Lösung

@kostiantyn-solianyk @shrolr ,
Zusammenfassend lässt sich sagen, dass das Ereignis „geöffnet“ nicht ausgelöst wird, wenn die App zum zweiten Mal in Android 8 geöffnet wird.

Die Traditionsereignisse werden in der kommenden Hauptversion (jetzt in der Beta) als veraltet markiert. Ich empfehle , zur Beta zu migrieren und zu versuchen, das Problem zu reproduzieren.

Wenn das Problem weiterhin besteht, teilen Sie uns dies bitte mit, indem Sie ein neues Problem eröffnen.

Beifall

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen