"react-native-iap": "^2.0.3",
iOS
Совершает покупку
const покупка = ожидание RNIap.buyProductWithoutFinishTransaction (productId)
const {transactionReceipt, buyToken} = покупка
sendToServer (transactionReceipt, {
onSuccess: () => {
RNIap.finishTransaction ()
RNIap.consumeAllItems ()
}})
Диалог: «Эта покупка в приложении уже куплена». Это происходит только для одного SKU, другие работают нормально. Я думаю, что приложение находится в плохом состоянии, и я не вижу способа исправить это. Я устал вызывать finishTransaction
и consumeAllItems
при инициализации, но это не помогло. Другие артикулы я могу без проблем приобрести несколько раз. Для getPurchaseHistory
ничего не возвращается.
Устройство (песочница)
Я не уверен.
@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, я нашел это полезным
Самый полезный комментарий
Я называл этот нативный код.
Когда я вызвал его в
didFinishLaunchingWithOptions
currentQueue.transactions был пустым, но вызов в applicationDidBecomeActive работал.Это сработало:
Я не уверен, как, но, может быть, мы сможем предоставить эту функцию в библиотеке?