React-native-iap: iOS: эта покупка в приложении уже куплена.

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

Версия react-native-iap

"react-native-iap": "^2.0.3",

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

iOS

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

Совершает покупку

const покупка = ожидание RNIap.buyProductWithoutFinishTransaction (productId)
const {transactionReceipt, buyToken} = покупка
sendToServer (transactionReceipt, {
onSuccess: () => {
RNIap.finishTransaction ()
RNIap.consumeAllItems ()
}})

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

Диалог: «Эта покупка в приложении уже куплена». Это происходит только для одного SKU, другие работают нормально. Я думаю, что приложение находится в плохом состоянии, и я не вижу способа исправить это. Я устал вызывать finishTransaction и consumeAllItems при инициализации, но это не помогло. Другие артикулы я могу без проблем приобрести несколько раз. Для getPurchaseHistory ничего не возвращается.

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

Устройство (песочница)

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

Я не уверен.

📱 iOS 🙏 help wanted

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

Я называл этот нативный код.

Когда я вызвал его в didFinishLaunchingWithOptions currentQueue.transactions был пустым, но вызов в applicationDidBecomeActive работал.

Это сработало:

- (void)applicationDidBecomeActive:(UIApplication *)application
{
  // take current payment queue
  SKPaymentQueue* currentQueue = [SKPaymentQueue defaultQueue];
  [currentQueue restoreCompletedTransactions];
  // finish ALL transactions in queue
  //  [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
  [currentQueue.transactions enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
    [currentQueue finishTransaction:(SKPaymentTransaction *)obj];
  }]; 
}

Я не уверен, как, но, может быть, мы сможем предоставить эту функцию в библиотеке?

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

@siderakis Ага, странно. Я уже исправил эту проблему, как сказано в stackoverflow, но все еще возникает на некоторых устройствах. Я тоже хочу это исправить. Какое устройство вы используете?

@siderakis Думаю, это может решить проблему с вашим приложением. Не могли бы вы попробовать?

Я попробовал, но ничего не вышло. Я также переустановил приложение, и это не помогло. Он работает на iPad.

Я установил точку останова, и похоже, что currentQueue.transactions пуст

От SKPaymentQueue.h

// Array of unfinished SKPaymentTransactions.  Only valid while the queue has observers.  Updated asynchronously.
@property(nonatomic, readonly) NSArray<SKPaymentTransaction *> *transactions NS_AVAILABLE_IOS(3_0);

<strong i="6">@end</strong>

Может я позвонил слишком рано

Я вызвал код позже во время выполнения программы, и проблема была устранена.

@siderakis Извините за
Массив transactions - это свойство, а не метод, которого нет в нашем коде.
Вы имели в виду finishTransaction ?

Я называл этот нативный код.

Когда я вызвал его в didFinishLaunchingWithOptions currentQueue.transactions был пустым, но вызов в applicationDidBecomeActive работал.

Это сработало:

- (void)applicationDidBecomeActive:(UIApplication *)application
{
  // take current payment queue
  SKPaymentQueue* currentQueue = [SKPaymentQueue defaultQueue];
  [currentQueue restoreCompletedTransactions];
  // finish ALL transactions in queue
  //  [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
  [currentQueue.transactions enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
    [currentQueue finishTransaction:(SKPaymentTransaction *)obj];
  }]; 
}

Я не уверен, как, но, может быть, мы сможем предоставить эту функцию в библиотеке?

@siderakis Да. Вот что я имел в виду в выпуске № 259.
Я думаю, что действие может быть где угодно после applicationDidBecomeActive.
Итак, я покажу этот метод стороне JS, чтобы пользователь мог вызвать его в любое время.
Спасибо за ваш совет.

@JJMoon , у меня такая же проблема, когда мы можем ожидать разрешения для раскрытия метода, как вы упомянули выше. Благодарю.

@sivrihuseyin Проблема теперь хорошо известна. Мы сделаем патч в эти выходные. Спасибо всем эмитентам.

Мы выпустили ожидаемое решение в 2.2.0 . Не могли бы вы выполнить readme и попробовать эту строку кода?

Привет Хё Чан,

Спасибо за информацию.

Я установил версию 2.2.0 и попробовал код. К сожалению,
проблема еще не устранена. думаю, что функция * clearTransaction * не
был экспортирован. В среде reactNative нет clearTransaction
функция внутри РНИАп.

Я проверил файл index.d.ts и не увидел функцию как
clearTransaction в этом. файл.

С уважением,

Хусейн

В воскресенье, 16 сентября 2018 г., в 14:25 Хё Чан Чан [email protected]
написал:

Закрыт № 257 https://github.com/dooboolab/react-native-iap/issues/257
через a5f225d
https://github.com/dooboolab/react-native-iap/commit/a5f225d470af0a85417325d24357667e54aa7078
.

-
Вы получаете это, потому что вас упомянули.
Ответьте на это письмо напрямую, просмотрите его на GitHub
https://github.com/dooboolab/react-native-iap/issues/257#event-1848183078 ,
или отключить поток
https://github.com/notifications/unsubscribe-auth/AiH7bOp96EzsoX82UVxKHK2LkN7PNWVAks5ubjUogaJpZM4WmG_0
.

Привет Хё Чан,

Прошу прощения за неверную информацию. ЭТО ИСПРАВЛЕНО. Нет проблем
больше.

Спасибо за оперативный ответ и отличное решение.

С уважением,

Хусейн

В воскресенье , 16 сентября 2018 г., в 14:56 Хусейн Сиври
написал:

Привет Хё Чан,

Спасибо за информацию.

Я установил версию 2.2.0 и попробовал код. К сожалению,
проблема еще не устранена. думаю, что функция * clearTransaction * имеет
не экспортировался. В среде reactNative нет clearTransaction
функция внутри РНИАп.

Я проверил файл index.d.ts и не увидел функцию как
clearTransaction в этом. файл.

С уважением,

Хусейн

В воскресенье, 16 сентября 2018 г., в 14:25 Хё Чан Чан [email protected]
написал:

Закрыт № 257 https://github.com/dooboolab/react-native-iap/issues/257
через a5f225d
https://github.com/dooboolab/react-native-iap/commit/a5f225d470af0a85417325d24357667e54aa7078
.

-
Вы получаете это, потому что вас упомянули.
Ответьте на это письмо напрямую, просмотрите его на GitHub
https://github.com/dooboolab/react-native-iap/issues/257#event-1848183078 ,
или отключить поток
https://github.com/notifications/unsubscribe-auth/AiH7bOp96EzsoX82UVxKHK2LkN7PNWVAks5ubjUogaJpZM4WmG_0
.

В версии 2.2.0 это исправлено применением функции clearTransaction. Спасибо
@JJMoon

Для будущих гуглеров, переходящих с v2 на v3-5, я нашел это полезным

https://github.com/dooboolab/react-native-iap/blob/de0fc084966fc4d36a9c45f4e27cb166243d4319/README_DEPRECATED.md

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