React-native-iap: buySubscription игнорируя отзывы пользователей

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

Версия react-native-iap

2.3.0

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

Android

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

let sub = await RNIApp.buySubscription ("некоторые");

должен подождать, пока пользователь нажмет кнопку "Купить" в модальном окне платежей в приложении.

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

Я не могу проверить, принял ли пользователь подписку, потому что при выполнении:

let sub = await RNIApp.buySubscription ("некоторые");
if (sub) {
делать кое-что ..
}

блок if (под) выполняется сразу после открытия всплывающего окна, но пользователь по-прежнему не принимает подписку

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

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

Любые идеи?

Существуют и другие методы, такие как getAvailablePurchases, которые также возвращают обещание и отлично работают.

Проблема в том, что buySubscription должен возвращать обратный вызов введенных пользователем данных, а не

⌚️ regression 📱 iOS

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

В настоящее время мы над этим работаем. Кроме того, любой, кто сталкивается с этим, звонил ли вы getSubscriptions перед фактическим вызовом buySubscription ?

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

Я использую RN 57, также подписка выполняется, я могу проверить в игровом магазине, что покупка в порядке, но обещание buySubscription возвращается undefined

любая помощь?

Ну, я понизил версию до 2.2.2 и работает ... так что, ребята, вы что-то пропустили в своем новом выпуске

@ marcosmartinez7 Извините за нарушение, не могли бы вы попробовать 2.3.1 ?

Привет спасибо!

У меня сейчас нет времени, но я буду

@ marcosmartinez7 Спасибо, пожалуйста, вернись.

@dooboolab Проблема присутствует и на iOS. Пробовал как 2.3.1 так и 2.3.2 . Как упоминалось @ marcosmartinez7 2.2.2 отлично работает

Думаю, это исправлено в 2.3.3 . Пожалуйста, откройте снова, когда это все еще происходит.

@dooboolab Извините, я только что установил и повторно связал 2.3.5 . await RNIap.buySubscription(iapProductId) прежнему немедленно возвращает undefined на iOS

@ Gaia-Nutrition Я думаю, ваша проблема в другом, потому что код ios не изменился. Не могли бы вы попробовать отключить и снова установить связь?

@dooboolab Я пробовал связывать и отключать. Каждый раз, когда я переключаюсь обратно на 2.2.2 он снова начинает работать. Но завтра еще раз проверю. Может попробую вручную установить родной компонент

@dooboolab Хорошо, теперь я вручную связал новую версию 2.3.6 . Все еще получаю undefined . Я хотел бы помочь решить эту проблему. Сообщите мне, чем я могу помочь!

Кто-нибудь может это подтвердить? Такого не должно происходить, особенно в ios.

@dooboolab Я могу подтвердить, что в iOS версия 2.3.6 не выполняет обещания, а версия 2.2.2 выполняет (с помощью устройства iPhone 5, React Native 0.56)

Я тоже испытываю эту проблему на 2.3.7. Когда я пытаюсь использовать await следующая строка вызывается сразу, вместо ожидания обещания, и когда я использую RNIap.buySubscription(subId).then(purchase => {}) сбой с ошибкой, не удается прочитать свойство, тогда undefined

В настоящее время мы над этим работаем. Кроме того, любой, кто сталкивается с этим, звонил ли вы getSubscriptions перед фактическим вызовом buySubscription ?

Я только что протестировал покупку в приложении RNExample. Я приобрел подписку с помощью метода buyProductWithoutFinishTransaction ().
Предлагаю протестировать прямо как RNExample. И обновите Xcode, настройку сборки на «legacy» .. Я думаю, процесс сборки в Xcode изменил это обновление.
И воспользуйтесь только что созданным тестером-песочницей.

@JJMoon очень интересно. Комбинация buyProductWithoutFinishTransaction() и finishTransaction() работает с 2.3.7 а buySubscription() напрямую все равно не работает!

@ Gaia-Nutrition ОК. Затем используйте buyProductWithoutFinishTransaction и finishTransaction вместо buySubscription . Действие покупки точно такое же.

@ Gaia-Nutrition Вы можете попробовать 2.3.8 ? Кроме того, вы звонили в getSubscriptions перед buySubscription ?

@dooboolab 2.3.8 прежнему не работает при использовании buySubscription и снова: Да, я звонил getSubscriptions раньше. Я не думаю, что в противном случае buyProductWithoutFinishTransaction() сработало бы.

Я тестировал покупку подписки на устройстве iOS в режиме песочницы.
Успешно, но отображается сообщение об ошибке.
И автоматическая возобновляемая подписка не выдает квитанцию.
Я предлагаю использовать buyProductWithoutFinishTransaction и finishTransaction вместо buySubscription.
На данный момент у меня нет устройства для тестирования, я буду отслеживать эту проблему позже.

Похоже, это проблема только в iOS настоящее время. Я прав?

@dooboolab Нет, тоже происходит на Android. Функция возвращает undefined даже до того, как будет вызвана первая строка в buyItemByType.

@dooboolab Проблема вызвана в index.js: 105. Вы должны изменить строки на что-то вроде

export const buySubscription = (sku, oldSku, prorationMode) => Platform.select({ ios: () => RNIapIos.buyProduct(sku), android: () => RNIapModule.buyItemByType(ANDROID_ITEM_TYPE_SUBSCRIPTION, sku, oldSku, -1), })();
(Я знаю, что это игнорирует prorationMode)

Однако после успешной подписки возникает проблема:

E/UncaughtException: java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.Object java.util.List.get(int)' on a null object reference at com.dooboolab.RNIap.RNIapModule$11.onPurchasesUpdated(RNIapModule.java:427) at com.android.billingclient.api.BillingClientImpl$1.onReceive(BillingClientImpl.java:136) at com.android.billingclient.api.LocalBroadcastManager.executePendingBroadcasts(LocalBroadcastManager.java:303) at com.android.billingclient.api.LocalBroadcastManager.access$000(LocalBroadcastManager.java:44) at com.android.billingclient.api.LocalBroadcastManager$1.handleMessage(LocalBroadcastManager.java:114) at android.os.Handler.dispatchMessage(Handler.java:105) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6938) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)

@mfentross Какая у вас версия react-native-iap ? В RNIapModule.java:427 пустая строка. Пожалуйста, попробуйте еще раз для последнего.

Моя вина: я отредактировал несколько строк. Но решение основной проблемы - отредактировать функцию buySubscription на

`
экспорт const buySubscription = (sku, oldSku, prorationMode) =>
Platform.select ({
ios: () => RNIapIos.buyProduct (sku),
android: () => {
если (! prorationMode) prorationMode = -1;
вернуть RNIapModule.buyItemByType (ANDROID_ITEM_TYPE_SUBSCRIPTION, sku, oldSku, prorationMode);
},
}) ();

`

Были какие-то ненужные скобки.

@mfentross мой плохой. Я пропустил инструкцию return . Я только что опубликовал в 2.3.11 . Так теперь андроид работает?

@dooboolab Спасибо, теперь работает 👍

@mfentross @JJMoon Хорошо! Так что у нас осталась только проблема с iOS.

@JJMoon Он говорит, что если обернуть метод с async и await , он работает. Однако я не совсем уверен, как это могло быть возможно. Обертка с async и await избыточна в возвращаемом значении, не так ли?

Я опубликовал на 2.3.13 . Надеюсь, вы все попробуете это.

Пожалуйста, откройте снова, когда это все еще происходит. Спасибо за помощь.

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