React-native-iap: RNIap.requestPurchase не отвечает в iOS

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

Версия react-native-iap

4.4.8

Версия реактивного натива

0,61,5

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

iOS

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

await RNIap.requestPurchase(sku, false)
console.log('REQUEST OVER') 

ЗАЯВКА ДЛЯ ПЕЧАТИ.

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

В устройстве я использую учетную запись тестера песочницы, она отвечает и работает хорошо. Но с любыми другими устройствами или симуляторами он не отвечает и не разрешается. Это очень важно, поскольку во время проверки приложения Apple продолжает отклонять мое приложение по причине нажатия кнопки «КУПИТЬ» и не отвечает.

Нет проблем с RNIap.getProducts(itemSkus)

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

Реальное устройство и симулятор

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

 async componentDidMount() {
    RNIap.getProducts(itemSkus)
      .then((products) => {
        this.setState({ products: products })
      })
      .catch((error) => {
        console.log(error.message)
      })
  }
requestPurchase = async (sku) => {
    try {
      await RNIap.requestPurchase(sku, false)
      console.log('REQUESTED OVER')
    } catch (err) {
      console.warn(err.code, err.message)
    }
}

render() {
 const { products } = this.state
 return (
  <View>
    {products.map((p, i) => { return (
       <TouchableWithoutFeedback onPress={() => this.requestPurchase(p.productId)}>
          <Text> BUY </Text>
       </TouchableWithoutFeedback> ) })}
 </View>)
🚶🏻 stale

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

У меня была та же проблема, и предложение @Panda313 добавить await RNIap.initConnection() в componentDidMount сработало.
Жаль, что это не документировано лучше...

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

То же самое здесь, однако, похоже, это работает на Android.

Возможно, я исправил это, добавив

константный результат = ожидание RNIap.initConnection();
ожидание RNIap.consumeAllItemsAndroid();
console.log('результат', результат);

В начале componentDidMount ;

Дайте мне знать, если это поможет

@hyochan Вы нашли решение этой проблемы? Я также испытываю ту же проблему в iOS. Это очень расстраивает, и я не могу пройти проверку приложения, потому что вызов RNIap.requestPurchase не отвечает предупреждением, либо предлагая пользователю согласиться с условиями подписки, либо подтверждая, что подписка уже активна. Если я принудительно закрою приложение и попробую еще раз, иногда это срабатывает. Я не знаю, проблема в песочнице или в этой библиотеке.

@smarttouchtechnology Вы звонили initConnection ? Это необходимо от 4.4.5 .

@smarttouchtechnology может быть трудно прочитать ответ ниже, который «решает» «проблему»;)

У меня была та же проблема, и предложение @Panda313 добавить await RNIap.initConnection() в componentDidMount сработало.
Жаль, что это не документировано лучше...

@Panda313 ... Ты только что спас меня от недели бессонной ночи отказов от яблок

Может ли кто-нибудь добавить это в документацию, чтобы больше людей не сталкивались с этой проблемой? Я не уверен, что это лучший способ добавить его.

РЕДАКТИРОВАТЬ: Добавлено здесь. № 1088.

Не стесняйтесь пересматривать (я не уверен, что сделал это правильно).

Возможно, я исправил это, добавив

константный результат = ожидание RNIap.initConnection();
ожидание RNIap.consumeAllItemsAndroid();
console.log('результат', результат);

В начале componentDidMount ;

Дайте мне знать, если это поможет

Что касается iOS, я не получил ответа от requestSubscription . Я попытался добавить await RNIap.initConnection(); перед RNIap.requestSubscription , и это сработало. Теперь я получаю объекты покупки в слушателях в корне приложения. И он также продолжается дальше по коду после того, как он разрешается либо с ошибкой, либо с успешным ответом.

Привет, похоже, в последнее время не было никакой активности по этому вопросу. Исправлена ​​ли проблема или она все еще требует внимания сообщества? Эта проблема может быть закрыта, если дальнейшие действия не происходят. Вы также можете пометить этот вопрос как «Для обсуждения» или «Хороший первый выпуск», и я оставлю его открытым. Спасибо за ваш вклад.

Закрытие темы после длительного периода бездействия. Если эта проблема все еще присутствует в последнем выпуске, не стесняйтесь создавать новую проблему с актуальной информацией.

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