React-native-iap: Как вручную отменить незавершенную покупку?

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

Версия react-native-iap

3.3.7

Версия react-native

0,59,8

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

Android

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

когда я запрашиваю покупку, я проверяю квитанцию ​​на моем сервере, если проверка не удалась, я хочу иметь возможность вручную отменить покупку, вместо того, чтобы запускать функцию PurchaseUpdatedListener каждый раз, если не вызывается подтверждение покупки или потребление.

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

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

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

Настоящее устройство

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

Совершите покупку и не называйте "подтверждение покупки" или "потребительную покупку".

1️⃣ good first issue ❓ question 🙏 help wanted 🤖 android

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

@hyochan , есть ли такая функция на iOS, чтобы отменить покупку, которая не была завершена, путем вызова finishTransactionIOS и последующего удаления этой покупки из истории покупок. Я не знаю, есть ли другой способ проверить, активна ли подписка, но сейчас я проверяю дату истечения срока действия последней транзакции в истории получения. Поэтому, если покупка не была совершена, я не хочу, чтобы она записывалась в историю покупок. К сожалению, сейчас именно это и происходит. И, в отличие от Android, незавершенная покупка не будет отменена через некоторое время, и она никогда не перестанет инициироваться purchaseUpdateListener .

У меня такая же проблема на ios и android, мне нужно отменить покупку, которая не была завершена. И, в частности, на ios, когда эта покупка не записывается в истории, если нет более эффективного способа проверить действительность подписки.

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

Даже в случае сбоя вы все равно должны вызывать acknowledgePurchase и consumePurchase для завершения транзакции. Вы только не выполняете такую ​​логику, как отказ от вознаграждения в собственной базе данных. Также вам следует consmePurchase чтобы он не остался в вашем приложении.

@hyochan, если я это сделаю, платеж будет одобрен, и с учетной записи пользователя будет

@tmjordan О, я понимаю, что вы имели в виду. Что, если вы продолжите логику, дав награду?

@hyochan, когда пользователь покупает продукт, данная квитанция отправляется на серверы Google, чтобы проверить квитанцию ​​и узнать статус покупки (если платеж был одобрен, ожидает обработки или отменен).
Скажем, у меня есть ошибка во время процесса проверки, не исходящая от сервера Google (например, мой бэкэнд), поэтому я не могу проверить квитанцию ​​и хочу отменить покупку вручную, вместо того, чтобы ждать ее отмены Google ( в течение этого времени я не могу совершить еще одну покупку), если я не называю покупку со знанием или потребляющую покупку.
Не знаю, возможно ли это, возможно, именно так работает процесс покупки в Google.

Было бы хорошо, если бы мы могли вручную отменить покупку, которая еще не подтверждена или не использована. В этом сценарии пользователю будут возвращены деньги, если платеж был одобрен.
Вместо того, чтобы каждый раз запускать одну и ту же покупку, пока она не будет отменена Google.

@tmjordan Спасибо за вашу хорошую точку зрения. Звучит очень разумно, но я не совсем уверен, что покупки в pending действительно взимаются. Я думаю, что покупки pending даже не должны взиматься, когда acknowledged а их лучше удалить. Надеюсь, мы сможем подробнее рассказать о любом другом опыте.

@hyochan , есть ли такая функция на iOS, чтобы отменить покупку, которая не была завершена, путем вызова finishTransactionIOS и последующего удаления этой покупки из истории покупок. Я не знаю, есть ли другой способ проверить, активна ли подписка, но сейчас я проверяю дату истечения срока действия последней транзакции в истории получения. Поэтому, если покупка не была совершена, я не хочу, чтобы она записывалась в историю покупок. К сожалению, сейчас именно это и происходит. И, в отличие от Android, незавершенная покупка не будет отменена через некоторое время, и она никогда не перестанет инициироваться purchaseUpdateListener .

У меня такая же проблема на ios и android, мне нужно отменить покупку, которая не была завершена. И, в частности, на ios, когда эта покупка не записывается в истории, если нет более эффективного способа проверить действительность подписки.

Я бы хотел разобраться с подобным сценарием

  1. Пользователь Начать покупку (чувствительного ко времени) продукта. Товар необходимо немедленно вернуть.
  2. Сервер не может вернуть товар. и может быть поздно вернуть товар, повторив попытку
  3. purchaseUpdateListener запускается много раз, пока не будет вызвана finishTransactionIOS, однако это нежелательные результаты. На этом этапе транзакцию следует отменить.

Есть ли способ отменить транзакцию.

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