React-native-iap: purchaseUpdatedListener wird mehrfach aufgerufen, manchmal mehr als 20 Mal

Erstellt am 8. Sept. 2020  ·  12Kommentare  ·  Quelle: dooboolab/react-native-iap

Version von react-native-iap

"react-native-iap": "^ 4.5.3"

Version von React-Native

"React-Native": "0,62.0"

Plattformen, auf denen Sie den Fehler hatten (IOS oder Android oder beides?)

iOS (noch nicht auf Android getestet)

Erwartetes Verhalten

purchaseUpdatedListener sollte nur so oft aufgerufen werden, wie die Komponente bereitgestellt wurde

Tatsächliches Verhalten

purchaseUpdatedListener wurde in ein paar Sekunden 20 Mal aufgerufen, und wenn ich die App öffne, wird sie mehrmals aufgerufen

Getestete Umgebung (Emulator? Reales Gerät?)

Echtes Gerät, Sandbox env

Schritte zum Reproduzieren des Verhaltens

Befolgen Sie die Anweisungen auf der Hauptseite

Derzeit ist purchaseUpdatedListener in componentDidMount () an einen Listener angehängt. Wenn ich meine App öffne, wird sie manchmal mehrmals ausgelöst. Dies geschieht auf txns, auf denen ich finishTransaction aufgerufen habe. Sieht jemand so etwas?

🕵️‍♂️ need more investigation 🙏 help wanted 🤖 android

Hilfreichster Kommentar

Hier gilt das gleiche. Bei jedem Ereignis der automatischen Verlängerung erhalte ich das eigentliche Abonnement für die automatische Verlängerung und einige Sekunden später erhalte ich einen großen Teil von 135 Kaufobjekten von purchaseUpdatedListener . Ich denke, dies ist meine gesamte Kaufhistorie. Ich habe versucht, sowohl finishTransaction als auch finishTransactionIOS aufzurufen, um die Transaktionen zu konsumieren, aber es ändert nichts.

Beim nächsten Ereignis der automatischen Verlängerung nimmt dieser große Teil der Transaktionen zu (136, 137, ...). Die Transaktionen sind nur meine Subs für die automatische Verlängerung. Keines meiner Verbrauchs- / Nichtverbrauchsprodukte wird in der Liste angezeigt.

Alle 12 Kommentare

Das gleiche gilt für mich, aber ich rufe den Kauffluss in Aktion auf

const { productId } = args
purchaseUpdatedListener(async (purchase) => {
    if (!purchase.transactionReceipt) {
        Alert("Error")
    }
    ...
})
purchaseErrorListener(error => {
    ...
})
await requestPurchase(productId, false)

Ich habe 4 Testprodukte und erhalte 4 Mal purchaseUpdatedListener , aber der Kauf wurde nur für eines von ihnen angefordert

Versucht, diese Transaktionen zu beenden, aber immer noch mehrere Anrufe

Ist der Artikel eine automatische Verlängerung? Ich denke, was passiert ist, weil es in der Sandbox ist. Die Verlängerungsdauer beträgt nur 5 Minuten für mein monatliches Abonnement. Apple sendet also bei jeder Erneuerung ein Ereignis. Wenn die App also 10 Minuten lang geschlossen wurde, sind dies 2 Benachrichtigungen, die ich beim Öffnen der App erhalte.

Kann jemand bestätigen, dass dies das erwartete Verhalten ist, um Benachrichtigungen bei einer automatischen Verlängerung und nicht nur beim Kauf zu erhalten?

Mein Kauf ist einmalig verbrauchbar

Hier gilt das gleiche. Bei jedem Ereignis der automatischen Verlängerung erhalte ich das eigentliche Abonnement für die automatische Verlängerung und einige Sekunden später erhalte ich einen großen Teil von 135 Kaufobjekten von purchaseUpdatedListener . Ich denke, dies ist meine gesamte Kaufhistorie. Ich habe versucht, sowohl finishTransaction als auch finishTransactionIOS aufzurufen, um die Transaktionen zu konsumieren, aber es ändert nichts.

Beim nächsten Ereignis der automatischen Verlängerung nimmt dieser große Teil der Transaktionen zu (136, 137, ...). Die Transaktionen sind nur meine Subs für die automatische Verlängerung. Keines meiner Verbrauchs- / Nichtverbrauchsprodukte wird in der Liste angezeigt.

Hier bestätige ich, dass der Hörer genauso oft angerufen wird wie die Anzahl der Käufe in der Kaufhistorie.

Ich habe ein Problem. Dies geschieht nur, wenn das Abonnement aktiviert ist.

Ich hatte eine ähnliche Erfahrung mit iOS 14.

Meine App verkauft ein Abonnement für die automatische Verlängerung.
Ich denke, dieses Problem ist aufgetreten, seit ich das gleiche Abonnement erneut gekauft habe.

Der folgende Link kann für dieses Problem relevant sein.
https://developer.apple.com/forums/thread/659529

Schauen Sie sich diesen Beitrag an
Das Problem ist, dass finishTransaction und finishTransactionIOS jetzt nicht für iOS funktionieren. Diese geben immer undefiniert zurück, sodass Sie die Transaktion nicht beenden können und sie in der ausstehenden Transaktion stecken bleiben. Wenn Sie Ihre App öffnen, werden ALLE ausstehenden Transaktionen in purchaseUpdatedListener verarbeitet. Deshalb haben Sie mehr als 20 Mal erhalten.
: (((jemand repariert dieses Problem)

Schauen Sie sich diesen Beitrag an
Das Problem ist, dass finishTransaction und finishTransactionIOS jetzt nicht für iOS funktionieren. Diese geben immer undefiniert zurück, sodass Sie die Transaktion nicht beenden können und sie in der ausstehenden Transaktion stecken bleiben. Wenn Sie Ihre App öffnen, werden ALLE ausstehenden Transaktionen in purchaseUpdatedListener verarbeitet. Deshalb haben Sie mehr als 20 Mal erhalten.
: (((jemand repariert dieses Problem)

https://github.com/dooboolab/react-native-iap/issues/1160#issuecomment -716525603
Ich habe hier eine Antwort gepostet und es wird erwartet, dass finishTransaction das Versprechen nicht löst.
Wir müssen überprüfen, ob die Transaktion tatsächlich abgeschlossen ist, indem wir das Protokoll in die Seite iOS einfügen und prüfen, ob eine Anweisung if eingegeben wird.

Ich sehe dasselbe wie hier erwähnt: https://github.com/dooboolab/react-native-iap/issues/1172#issuecomment -721676878.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen