2.3.0
Android
let sub = await RNIApp.buySubscription ("некоторые");
должен подождать, пока пользователь нажмет кнопку "Купить" в модальном окне платежей в приложении.
Я не могу проверить, принял ли пользователь подписку, потому что при выполнении:
let sub = await RNIApp.buySubscription ("некоторые");
if (sub) {
делать кое-что ..
}
блок if (под) выполняется сразу после открытия всплывающего окна, но пользователь по-прежнему не принимает подписку
Настоящее устройство
Любые идеи?
Существуют и другие методы, такие как getAvailablePurchases, которые также возвращают обещание и отлично работают.
Проблема в том, что buySubscription должен возвращать обратный вызов введенных пользователем данных, а не
Я использую 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
. Надеюсь, вы все попробуете это.
Пожалуйста, откройте снова, когда это все еще происходит. Спасибо за помощь.
Самый полезный комментарий
В настоящее время мы над этим работаем. Кроме того, любой, кто сталкивается с этим, звонил ли вы
getSubscriptions
перед фактическим вызовомbuySubscription
?