React-native-iap: buySubscription не разрешается при изменении подписок в iOS

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

Версия react-native-iap

2.2.2

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

iOS

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

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

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

Если в настоящее время вы подписаны на один план, переход на другой приводит к тому, что buySubscription перехватывает и возвращает следующую ошибку:
screen shot 2018-09-27 at 1 21 10 am

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

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

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

Это происходит, когда в приложении всплывают диалоговые окна изменения подписки с вопросом, хотите ли вы перейти с текущей подписки на новую. При нажатии на этот диалог вместо ожидаемого разрешенного обещания выдается ошибка. Кажется, этот вариант использования не был учтен или что-то в этом роде.

Сейчас это для меня ломается, потому что тогда нет возможности подтвердить, что они действительно купили, или проверить квитанции для этих случаев. Пожалуйста, дайте мне знать, если вы знаете об обходном пути или исправлении, или если я могу чем-то помочь (хотя у меня нет опыта Obj-C). Единственный возможный обходной путь, который я могу сейчас придумать, - это если buySubscriptions возвращает ошибку, проверяя эту ошибку, и если она соответствует этой ошибке, то подтверждает покупку. Но это очень опасно, поскольку делает невозможным проверку квитанции, и некоторые другие ошибки (например, невозможность подключиться к серверу или что-то еще) могут привести к тому же самому коду ошибки, давая пользователю подписку без необходимости платить за нее. Другими словами, на данный момент я не могу придумать возможных обходных путей. Я что-то упустил? Есть ли причина, по которой мне не нужно выполнять обещание от buySubscriptions? Был бы очень признателен услышать от кого-нибудь.

РЕДАКТИРОВАТЬ : это может быть очевидным следствием того, что я уже описал, но после попытки изменить подписку эта покупка не добавляется в вашу историю покупок. Со стороны пользователя нет никаких указаний на то, что эта покупка не удалась - пользователь успешно проходит через поток диалоговых окон покупки, заканчивая одним сообщением «Все готово».

EDIT2 : Иногда это работает, но я еще не уверен, как воспроизвести, сообщу, если найду способ. Когда он работает, первое диалоговое окно запрашивает мой пароль, а затем работает нормально, как будто у меня еще нет другой подписки, в отличие от того, когда первое диалоговое окно - «Подтвердить покупку» и спрашивает, хочу ли я изменить свою подписку, то есть что появляется, когда он не работает. Когда это работает, приобретенная подписка, как и ожидалось, добавляется в мою историю покупок.

EDIT3 :

🍗 enhancement 🐛 bug 📱 iOS

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

Я посмотрел на это еще раз сегодня, и я думаю, что нашел кое-что примечательное. Кажется, происходит то, что было найдено в этой ошибке: https://github.com/bizz84/SwiftyStoreKit/issues/269. При переключении между подписками с автопродлением в одной и той же группе транзакция не выполняется, поскольку пользователю не будет выставлен счет до истечения срока действия текущей подписки. Но он был успешно зарегистрирован, и платеж будет обработан, как только текущая подписка будет завершена, но не раньше. Таким образом, возврат транзакции завершился неудачно, потому что на самом деле транзакция еще не произошла. Поэтому я не думаю, что в процессе оплаты что-то действительно идет не так, просто отклоненная транзакция регистрируется как ошибка. Но мне еще предстоит это проверить, так как я только что наткнулся на это, и мой отладчик работает, и уже поздно, поэтому я не собираюсь разбираться с этим до завтра. Было бы здорово, если бы кто-то тем временем мог попытаться подтвердить (т.е. переключаясь между подписками и затем проверяя, появляется ли транзакция для второй подписки в вашей истории покупок после истечения срока действия первой, или что-то в этом роде). Если это то, что происходит, было бы здорово, если бы мы смогли найти способ справиться с этим. Если ошибка, которую он генерирует, специфична для этого процесса, мы могли бы просто передать ее как возвращаемое значение обещания, чтобы мы могли правильно обработать (например, не генерировать сообщение об ошибке для пользователя, обновляя информацию о подписке пользователя). Хотелось бы услышать чьи-либо мысли о том, проверяется ли это и как действовать.

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

Не могли бы вы сейчас попробовать последнюю версию - 2.3.15 ?

Да, я возьму его на прогулку в какой-то момент сегодня

@kevinEsherick Каков ваш результат для этого?

До сих пор не работает. Если я подписан на ежемесячную подписку и перехожу на ежегодную, это попадает в пункт улова. Было несколько раз, когда это срабатывало случайным образом, но пока не было возможности воспроизвести. Я буду держать вас в курсе того, что я нашел, и, пожалуйста, сделайте то же самое для меня. Спасибо!

@kevinEsherick Как вы "переключили" подписку? Я предполагаю, что вы «отмените» ежемесячную подписку и «купите снова» годовую подписку. Это правильно?

В iOS нельзя ли переключить подписку, зайдя в приложение настроек для управления своими подписками, а затем выбрав другой продукт в той же группе?

@JJMoon Нет, я просто покупаю ежемесячную подписку в приложении, а затем покупаю годовую подписку в приложении. Они автоматически продлевают подписки в одной группе подписок. Если две подписки (A и B) находятся в одной группе в iTunes Connect, покупка B при подписке на A должна автоматически отменить A и подписать вас на B. Как вы думаете, проблема в том, что этот пакет не поддерживает эту функцию? Если да, можем ли мы найти способ реализовать это?

Я тоже сталкиваюсь с этой проблемой. Какой-либо прогресс?

Нет. В последнее время у меня не было времени заниматься этим. Я скоро посмотрю на это снова.

Посмотрев на это немного, я понял, что, похоже, Apple признает изменение в подписке, по крайней мере, до некоторой степени. Если я перейду, скажем, с ежемесячного на ежегодный, он покажет соответствующий модальный вариант с языком для изменения вашей подписки. Когда я покупаю ежегодно, возникает ошибка, и покупка подписки не устраняется. НО, когда я возвращаюсь, чтобы сделать покупку снова, на этот раз возвращаясь к ежемесячной подписке, API Apple знает, что я использую годовую подписку, и снова показывает модальное окно «Вы хотите изменить свою подписку ...». Как это проявляется в производственной среде, я еще не уверен, поскольку все это в песочнице. Сегодня вечером я займусь этим подробнее, но это может означать, что со стороны Apple все в порядке, и что это просто ошибка на стороне клиента. Если это так, это может больше не быть критической ошибкой, но все же требует исправления.

Я посмотрел на это еще раз сегодня, и я думаю, что нашел кое-что примечательное. Кажется, происходит то, что было найдено в этой ошибке: https://github.com/bizz84/SwiftyStoreKit/issues/269. При переключении между подписками с автопродлением в одной и той же группе транзакция не выполняется, поскольку пользователю не будет выставлен счет до истечения срока действия текущей подписки. Но он был успешно зарегистрирован, и платеж будет обработан, как только текущая подписка будет завершена, но не раньше. Таким образом, возврат транзакции завершился неудачно, потому что на самом деле транзакция еще не произошла. Поэтому я не думаю, что в процессе оплаты что-то действительно идет не так, просто отклоненная транзакция регистрируется как ошибка. Но мне еще предстоит это проверить, так как я только что наткнулся на это, и мой отладчик работает, и уже поздно, поэтому я не собираюсь разбираться с этим до завтра. Было бы здорово, если бы кто-то тем временем мог попытаться подтвердить (т.е. переключаясь между подписками и затем проверяя, появляется ли транзакция для второй подписки в вашей истории покупок после истечения срока действия первой, или что-то в этом роде). Если это то, что происходит, было бы здорово, если бы мы смогли найти способ справиться с этим. Если ошибка, которую он генерирует, специфична для этого процесса, мы могли бы просто передать ее как возвращаемое значение обещания, чтобы мы могли правильно обработать (например, не генерировать сообщение об ошибке для пользователя, обновляя информацию о подписке пользователя). Хотелось бы услышать чьи-либо мысли о том, проверяется ли это и как действовать.

Надеюсь, при изменении подписки IAP используйте URL-адрес из этого документа.
https://developer.apple.com/library/archive/documentation/NetworkingInternet/Conceptual/StoreKitGuide/Chapters/Subscriptions.html

Предоставление пользователям возможности управлять подписками ..
https://developer.apple.com/library/archive/documentation/NetworkingInternet/Conceptual/StoreKitGuide/Chapters/Subscriptions.html#//apple_ref/doc/uid/TP40008267 -CH7-SW19

Поможет ли это решить эту проблему?

Я надеюсь, что эту проблему можно решить указанными мною методами.
Закрытие ...

У вас такое же поведение, какие-либо шаги для решения этой проблемы?

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