React-native-iap: buyUpdatedListener вызывается несколько раз, иногда более 20 раз

Созданный на 8 сент. 2020  ·  12Комментарии  ·  Источник: dooboolab/react-native-iap

Версия react-native-iap

"реагировать-native-iap": "^ 4.5.3"

Версия react-native

"react-native": "0.62.0"

Платформы, на которых вы столкнулись с ошибкой (IOS или Android или оба?)

iOS (еще не тестировал на Android)

Ожидаемое поведение

buyUpdatedListener должен вызываться столько раз, сколько раз был смонтирован компонент

Фактическое поведение

buyUpdatedListener вызывался 20 раз за пару секунд, каждый раз, когда я открываю приложение, он вызывается несколько раз

Протестированная среда (Эмулятор? Настоящее устройство?)

Настоящее устройство, песочница env

Шаги по воспроизведению поведения

Следуйте инструкциям на главной странице

В настоящее время у меня есть PurchaseUpdatedListener, подключенный к слушателю в componentDidMount (), иногда, когда я открываю свое приложение, оно запускается несколько раз. Это происходит в txns, для которого я назвал finishTransaction. Кто-нибудь видит что-то подобное?

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

Самый полезный комментарий

Тоже самое. На каждом событии автоматического продления я получаю фактическую автоматически возобновляемую подписку, а через несколько секунд я получаю большой кусок из 135 объектов покупки из purchaseUpdatedListener . Я чувствую, что это вся моя история покупок. Я попытался вызвать как finishTransaction и finishTransactionIOS чтобы использовать транзакции, но это ничего не меняет.

При следующем событии автоматического продления этот большой кусок транзакций увеличивается (136, 137, ...). Транзакции - это только мои автоматически продлеваемые подписки. Ни один из моих расходных / нерасходуемых продуктов не отображается в списке.

Все 12 Комментарий

То же самое для меня, но я называю поток покупок в действии

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

У меня есть 4 тестовых продукта, и я получаю purchaseUpdatedListener 4 раза, но покупка была запрошена только для одного из них

Пытался завершить эти транзакции, но все еще несколько звонков

Товар обновляется автоматически? Я думаю, что происходит потому, что в песочнице период продления составляет всего 5 минут для моей ежемесячной подписки. Итак, яблоко будет отправлять событие при каждом обновлении, поэтому, если приложение было закрыто на 10 минут, это два уведомления, которые я получу, когда приложение откроется.

Может ли кто-нибудь подтвердить, что это ожидаемое поведение для получения уведомлений об автоматическом продлении, а не только о покупке?

Моя покупка одноразовая

Тоже самое. На каждом событии автоматического продления я получаю фактическую автоматически возобновляемую подписку, а через несколько секунд я получаю большой кусок из 135 объектов покупки из purchaseUpdatedListener . Я чувствую, что это вся моя история покупок. Я попытался вызвать как finishTransaction и finishTransactionIOS чтобы использовать транзакции, но это ничего не меняет.

При следующем событии автоматического продления этот большой кусок транзакций увеличивается (136, 137, ...). Транзакции - это только мои автоматически продлеваемые подписки. Ни один из моих расходных / нерасходуемых продуктов не отображается в списке.

То же самое, я подтверждаю, что он вызывает слушателя столько раз, сколько покупок в истории покупок.

У меня проблема. Это происходит только при включенной подписке.

У меня был аналогичный опыт с iOS 14.

В моем приложении продается подписка с автоматическим продлением.
Я думаю, что эта проблема возникла после того, как я снова приобрел ту же подписку.

Следующая ссылка может иметь отношение к этой проблеме.
https://developer.apple.com/forums/thread/659529

посмотрите этот пост
проблема в том, что finishTransaction и finishTransactionIOS сейчас не работают для iOS, они всегда возвращают undefined, так что вы не можете завершить транзакцию, и они застряли в ожидающей транзакции. Когда вы открываете свое приложение, ВСЕ незавершенные транзакции будут обрабатываться в PurchaseUpdatedListener ... поэтому вы получили 20+ раз.
: (((кто-нибудь исправит это пожалуйста

посмотрите этот пост
проблема в том, что finishTransaction и finishTransactionIOS сейчас не работают для iOS, они всегда возвращают undefined, так что вы не можете завершить транзакцию, и они застряли в ожидающей транзакции. Когда вы открываете свое приложение, ВСЕ незавершенные транзакции будут обрабатываться в PurchaseUpdatedListener ... поэтому вы получили 20+ раз.
: (((кто-нибудь исправит это пожалуйста

https://github.com/dooboolab/react-native-iap/issues/1160#issuecomment -716525603
Я отправил здесь ответ, и на самом деле ожидается, что finishTransaction не разрешает обещание.
Нам нужно убедиться, что он действительно завершает транзакцию, поместив log на стороне iOS и проверив, входит ли он в оператор if .

Я вижу то же, что и здесь: https://github.com/dooboolab/react-native-iap/issues/1172#issuecomment -721676878.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги