React-native-iap: iOS 14: проблемы с requestSubscription ()

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

Версия react-native-iap

4.4.9

Версия react-native

.62.2

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

Только для iOS. Еще не тестировал на Android.

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

Появляется диалоговое окно покупки для завершения покупки, после чего вызывается PurchaseUpdatedListener.

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

вызовите requestSubscription (). Нет диалогов о покупке. PurchaseUpdatedListener вызывается немедленно, без диалоговых окон покупки или действительного чека.

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

Настоящее устройство iOS 14 с использованием TestFlight.

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

вызовите RNIap.requestSubscription ().

Примечания:

  • XCode 12
  • с помощью входа в систему с Apple Id.
  • тестирование в песочнице с реальным Apple id (не тестовый пользователь)
  • отлично работает на iPad под управлением iOS 13.7.
  • применили исправление обещаний iOS 14.
🍚 need contribution 📱 iOS 🙏 help wanted

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

Здесь просто хочу сказать, что я столкнулся с той же проблемой. Я уже тестировал iOS 12, и она работает нормально ... iOS 14 глючит.

Мой звонок с просьбой Подписка длиться вечно ... И это ошибка в производстве!

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

Тоже самое. Может кто-нибудь поможет?

Не зависает, но возвращает []

Для нас отображается диалоговое окно покупки, и слушатель покупки вызывается правильно, но вызов requestSubscription возвращает обещание, которое никогда не выполняется.

Похоже, это могло быть решено здесь https://github.com/dooboolab/react-native-iap/pull/1064

Я применил это исправление обещания ранее, так что проблема здесь не в этом.

У меня работает с iOS14, вот как я это сделал:
// request purchase, listener registered above will receive notification when processing done RNIap.requestSubscription(this.productIds[0]).catch(err => { console.log(err.code, err.message); });

Я вызывал метод с логическим параметром false, что, как мне кажется, является рекомендацией. Я удалил это и все еще наблюдаю очень странное поведение на iOS14, независимо от того, как я вызываю метод, и он отлично работает на iPhone и iPad с iOS 13 через TestFlight. Я тестировал requestSubscription с логическим значением и без него, и я никогда не получаю диалоговые окна покупки на iOS 14. Сейчас в большинстве случаев он немедленно вызывает RequestUpdatedListener с тем, что выглядит как недействительный чек.

Есть ли у кого-то, у кого нет проблем со своими подписками в iOS14 и xCode 12 с помощью TestFlight?

Эй, кто-нибудь из вас использует getPurchaseHistory() или getAvailablePurchases() непосредственно перед requestSubscription() ? Если да, то, похоже, это проблема iOS 14.

Я использую getAvailablePurchases () раньше в потоке - при загрузке приложения, экран прямо перед экраном подписки.

да, к сожалению, это похоже на ошибку в iOS 14. Не виноват этот плагин. Я проверил собственный код, и это та же проблема.

Это была проблема. Я удалил вызов getAvailablePurchases (), появилось всплывающее окно покупки, и покупка прошла успешно. К сожалению, мне нужно сделать этот вызов getAvailablePurchases, поскольку я проверяю статус их подписки при загрузке приложения. Итак, похоже, нам нужно дождаться патча iOS 14, чтобы исправить это? Больше никто ничего не может сделать? Кстати, большое спасибо theDev23!

Не за что, тупица. Лучше всего, вероятно, полагаться на проверку на сервере.

Я надеялся избежать этого на сервере. Это так же просто, как скопировать код из моей реакции в нечто вроде облачной функции Firebase? Или это что-то, что нужно изменить? Наверное, глупый вопрос, но эй ... мы все начали с глупых вопросов. :)

@ the-dut Вы можете использовать iaphub для проверки квитанции сервера

Напиток на ваш выбор, если вы когда-нибудь будете на Среднем Западе США. :)

Та же проблема касается и живых пользователей. @ theDev23 у вас есть ссылка на обсуждение проблемы в iOS? Есть ли сроки для исправления?

@nicknjpconsultingllc нет ссылки, извините. Я копал сам.

@ the-dut Я тоже использую облачные функции Firebase. Посмотрите это репо .

В итоге я сохранил квитанцию ​​в базе данных об успешной покупке в PurchaUpdatedListener, затем при загрузке приложения я извлекаю квитанцию ​​из базы данных, проверяю ее снова и проверяю, истек ли срок ее действия или нет. Это позволило мне избавиться от вызова getAvailablePurchases () - он отлично работает в iOS14. Пока что это работает очень хорошо и намного быстрее. Теперь вопрос о том, как далеко мне нужно зайти. Если это все, что я делаю, будет ли UpdatedPurchaseListener вызываться при всех обновлениях подписки (в основном при автоматическом продлении), пока я не завершу транзакции? Или мне нужно реализовать межсерверные уведомления, чтобы получать информацию об автоматическом продлении? Похоже, что использование UpdatedPurchaseListener - лучшее (и более простое) решение, поскольку я читал, что межсерверная интеграция не идеальна.

Эта проблема по-прежнему возникает после удаления getPurchaseHistory и применения исправления обещаний. Не удается открыть диалоговое окно покупки. Кто-нибудь может помочь?

Я бы посоветовал взглянуть на все звонки, которые вы делаете в AIP, прежде чем делать запрос на покупку. Вы тоже вызываете getAvailablePurchases ()?

Я не могу исключить вызовы getAvailablePurchases () и getPurchaseHistory (), есть ли способ сделать так, чтобы requestSubscription () отображал всплывающее меню покупки с этими вызовами?

Привет @ HamzaIkram2727 , если я не ошибаюсь, вы можете просто создать новую учетную запись в песочнице и удалить старую. Должно работать.

@ the-dut Даже я не использую вызовы getAvailablePurchases () и getPurchaseHistory (), но все равно сталкиваюсь с той же проблемой. Он не показывает диалог покупки, но покупка завершается автоматически.

Я также вызываю функции finishTrsanactionIOS и finishTransation.

Мне удалось получить собственный диалог покупки iOS, выйдя из приложения. Мне кажется, что некоторые обещания наконец-то выполнены. Я не уверен, есть ли какие-либо зависимости от обещаний в react-native-iap но поведение кажется странным. Вызов requestSubscription разрешается в приложении, но диалогового окна нет, пока я не выйду из приложения.

У меня такая же проблема с getAvailblePruchases (), в большинстве случаев обещание не разрешается или не отклоняется. Это началось при тестировании на устройствах iOS 14.

У меня такая же проблема

  1. Я вызываю getAvailablePurchases ()
  2. requestSubscription ()

Я удалил getAvailablePurchase, и, похоже, он отлично работает

Любые обновления?

Действительно странное поведение, и я замечаю, что это происходит не только на ios 14 ... Я связываюсь с Apple, чтобы попытаться понять, что происходит, потому что я не думаю, что это проблема, связанная с пакетом, который он себя.

Здесь просто хочу сказать, что я столкнулся с той же проблемой. Я уже тестировал iOS 12, и она работает нормально ... iOS 14 глючит.

Мой звонок с просьбой Подписка длиться вечно ... И это ошибка в производстве!

Итак, после целого дня "веселья" я пришел к выводу, что у меня разные устройства с разными версиями ОС, и эта проблема возникает на каждом из них. Я связался с Apple по этому поводу, и мы все еще следим за этим случаем, но без каких-либо твердых выводов. Я не думаю, что это проблема с упаковкой, это должно быть что-то на стороне Apple. Я перепробовал все, что люди упоминают в этой и других ветках, сообщавших о подобной проблеме. Диалоговое окно In App Purchase просто непоследовательно отображается, и до сих пор я не могу найти для него вескую причину, потому что результат всегда разный. Иногда я получаю ошибку E_UNKNOWN, в других случаях я получаю нулевую обратную связь, иногда всплывающее окно появляется через 10 минут ожидания, а иногда просто работает ... Я пробовал с пользователями песочницы, а не пользователями песочницы, у меня был одинаковые разные результаты для одного и того же пользователя и устройства, и даже не отображается ошибка или убедительный / содержательный журнал. Это просто неприятно отлаживать, потому что вы почти ничего не можете найти ... Что ж, если у вас есть какие-либо советы или идеи, я слушаю ... А пока, если у меня есть новости от Apple, Буду держать вас в курсе ...
PS РЕДАКТИРОВАТЬ. после прочтения последнего комментария одно остается неизменным, и я могу это подтвердить, на iOS 14 это кажется более непоследовательным, хотя это происходит на каждой версии ОС, которую я тестировал (12, 13.7, 14). Тем не менее, у меня все еще сложилось впечатление, что проблема связана не только с версией ОС, и поэтому я думаю, что это должно быть что-то с сервером песочницы или что-то еще в конце Apple ..

Мы протестировали наш пакет приложения с утвержденной сборкой App Store, и похоже, что несоответствие более заметно в iOS версии 14+.

Мы пришли к выводу, что способ, которым Apple проверяет квитанцию ​​на iOS 14+, немного отличается.

Бывает с аккаунтами, в которых уже были совершены покупки

  1. Создайте новую учетную запись в Sandbox
  2. Сделайте покупку (работает нормально, потому что в restorePurchases нет покупок)
  3. Подождите, пока он не истечет.
  4. Купи снова. (Теперь на восстановление покупок отвечает объект, и всплывающее окно с подтверждением покупки больше не работает)

Это странно. Я просматривал код библиотеки и добавил несколько журналов для тестирования. И я получил следующее

  1. Когда вызывается restorePurchases. Он запускает прослушиватель paymentQueueRestoreCompletedTransactionsFinished.
-(void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue {  ////////   RESTORE
    NSLog(@"\n\n\n  paymentQueueRestoreCompletedTransactionsFinished  \n\n.");
    NSMutableArray* items = [NSMutableArray arrayWithCapacity:queue.transactions.count];
    NSLog(@"Number of items in my array is: %d", [queue.transactions count]);//this will return (5)

    for(SKPaymentTransaction *transaction in queue.transactions) {
        if(transaction.transactionState == SKPaymentTransactionStateRestored
           || transaction.transactionState == SKPaymentTransactionStatePurchased) {
            [self getPurchaseData:transaction withBlock:^(NSDictionary *restored) {
                [items addObject:restored];
                [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
            }];
        }
    }
    NSLog(@"\n  finished paymentQueueRestoreCompletedTransactionsFinished ");

    [self resolvePromisesForKey:@"availableItems" value:items];
}

Здесь я печатаю в журнале размер транзакции и у меня 23 элемента

  1. Выполняется функция
case SKPaymentTransactionStateRestored: {
          NSLog(@"Restored ");

         NSLog(@"\n  paymentQueue transaction : %@", transaction.transactionDate);
         [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
           break;
  }
  1. resolvePromisesForKey завершить восстановлениеПокупка

  2. requestSubscription запускает вызов функции buyProduct

  3. Здесь я добавил логи для просмотра лога
 NSLog(@"\n  produc purchase : %@", product);

  SKMutablePayment *payment = [SKMutablePayment paymentWithProduct:product];

  NSLog(@"\n  payment buy product : %@", payment.productIdentifier);

  [[SKPaymentQueue defaultQueue] addPayment:payment];
  1. Получился такой журнал:
    а) Восстановить журнал покупок
2020-10-22 14:01:49.319677-0500 ApplicationTest[532:51039] Restored
2020-10-22 14:01:49.319784-0500 ApplicationTest[532:51039] 
  paymentQueue transaction : Mon Oct  5 16:46:53 2020
2020-10-22 14:01:49.319930-0500 ApplicationTest[532:51039] Restored
2020-10-22 14:01:49.319970-0500 ApplicationTest[532:51039] 
  paymentQueue transaction : Mon Oct  5 19:16:45 2020
2020-10-22 14:01:49.320044-0500 ApplicationTest[532:51039] Restored
2020-10-22 14:01:49.320082-0500 ApplicationTest[532:51039] 
  paymentQueue transaction : Mon Oct  5 19:06:37 2020
2020-10-22 14:01:49.320155-0500 ApplicationTest[532:51039] Restored
2020-10-22 14:01:49.320275-0500 ApplicationTest[532:51039] 
  paymentQueue transaction : Mon Oct  5 19:01:37 2020
2020-10-22 14:01:49.320421-0500 ApplicationTest[532:51039] Restored
2020-10-22 14:01:49.320532-0500 ApplicationTest[532:51039] 
  paymentQueue transaction : Mon Oct  5 07:49:31 2020
2020-10-22 14:01:49.320671-0500 ApplicationTest[532:51039] Restored
2020-10-22 14:01:49.320776-0500 ApplicationTest[532:51039] 
  paymentQueue transaction : Mon Oct  5 14:21:39 2020
2020-10-22 14:01:49.320915-0500 ApplicationTest[532:51039] Restored
2020-10-22 14:01:49.321018-0500 ApplicationTest[532:51039] 
  paymentQueue transaction : Mon Oct  5 14:26:39 2020
2020-10-22 14:01:49.321180-0500 ApplicationTest[532:51039] Restored
2020-10-22 14:01:49.321282-0500 ApplicationTest[532:51039] 
  paymentQueue transaction : Mon Oct  5 16:56:53 2020
2020-10-22 14:01:49.321414-0500 ApplicationTest[532:51039] Restored
2020-10-22 14:01:49.321516-0500 ApplicationTest[532:51039] 
  paymentQueue transaction : Mon Oct  5 16:51:53 2020
2020-10-22 14:01:49.321648-0500 ApplicationTest[532:51039] Restored
2020-10-22 14:01:49.321749-0500 ApplicationTest[532:51039] 
  paymentQueue transaction : Mon Oct  5 08:04:31 2020
2020-10-22 14:01:49.321879-0500 ApplicationTest[532:51039] Restored
2020-10-22 14:01:49.321984-0500 ApplicationTest[532:51039] 
  paymentQueue transaction : Mon Oct  5 19:11:41 2020
2020-10-22 14:01:49.322113-0500 ApplicationTest[532:51039] Restored
2020-10-22 14:01:49.322214-0500 ApplicationTest[532:51039] 
  paymentQueue transaction : Mon Oct  5 16:41:53 2020
2020-10-22 14:01:49.322346-0500 ApplicationTest[532:51039] Restored
2020-10-22 14:01:49.322444-0500 ApplicationTest[532:51039] 
  paymentQueue transaction : Mon Oct  5 14:31:39 2020
2020-10-22 14:01:49.323955-0500 ApplicationTest[532:51039] Restored
2020-10-22 14:01:49.324097-0500 ApplicationTest[532:51039] 
  paymentQueue transaction : Mon Oct  5 12:07:14 2020
2020-10-22 14:01:49.324240-0500 ApplicationTest[532:51039] Restored
2020-10-22 14:01:49.324344-0500 ApplicationTest[532:51039] 
  paymentQueue transaction : Mon Oct  5 14:16:39 2020
2020-10-22 14:01:49.324474-0500 ApplicationTest[532:51039] Restored
2020-10-22 14:01:49.324579-0500 ApplicationTest[532:51039] 
  paymentQueue transaction : Mon Oct  5 14:11:39 2020
2020-10-22 14:01:49.324709-0500 ApplicationTest[532:51039] Restored
2020-10-22 14:01:49.324808-0500 ApplicationTest[532:51039] 
  paymentQueue transaction : Mon Oct  5 07:39:31 2020
2020-10-22 14:01:49.324934-0500 ApplicationTest[532:51039] Restored
2020-10-22 14:01:49.325030-0500 ApplicationTest[532:51039] 
  paymentQueue transaction : Mon Oct  5 07:59:31 2020
2020-10-22 14:01:49.325163-0500 ApplicationTest[532:51039] Restored
2020-10-22 14:01:49.325260-0500 ApplicationTest[532:51039] 
  paymentQueue transaction : Mon Oct  5 19:26:45 2020
2020-10-22 14:01:49.327079-0500 ApplicationTest[532:51039] Restored
2020-10-22 14:01:49.327212-0500 ApplicationTest[532:51039] 
  paymentQueue transaction : Mon Oct  5 07:44:31 2020
2020-10-22 14:01:49.327360-0500 ApplicationTest[532:51039] Restored
2020-10-22 14:01:49.327465-0500 ApplicationTest[532:51039] 
  paymentQueue transaction : Mon Oct  5 07:54:31 2020
2020-10-22 14:01:49.327594-0500 ApplicationTest[532:51039] Restored
2020-10-22 14:01:49.327695-0500 ApplicationTest[532:51039] 
  paymentQueue transaction : Mon Oct  5 14:37:11 2020
2020-10-22 14:01:49.327823-0500 ApplicationTest[532:51039] Restored
2020-10-22 14:01:49.327923-0500 ApplicationTest[532:51039] 
  paymentQueue transaction : Mon Oct  5 19:21:45 2020
2020-10-22 14:01:49.328099-0500 ApplicationTest[532:51039] 

  paymentQueueRestoreCompletedTransactionsFinished  

2020-10-22 14:01:49.328204-0500 ApplicationTest[532:51039] Number of items in my array is: 23
2020-10-22 14:01:49.336873-0500 ApplicationTest[532:51039] 
  finished paymentQueueRestoreCompletedTransactionsFinished
2020-10-22 14:01:50.317721-0500 ApplicationTest[532:51234] 

б. Журнал подписки:

2020-10-22 14:01:50.319607-0500 ApplicationTest[532:51234] 
  produc purchase : <SKProduct: 0x2839c0630>

2020-10-22 14:01:50.319694-0500 ApplicationTest[532:51234] 
  payment buy product : test.applicationtest

**2020-10-22 14:01:50.319849-0500 ApplicationTest[532:51039] Restored
2020-10-22 14:01:50.319895-0500 ApplicationTest[532:51039] 
  paymentQueue transaction : Mon Oct  5 19:16:45 2020**

Поэтому я не понимаю, почему метод paymentQueue выполняется с SKPaymentTransactionStateRestored от 5 октября.

@andresordonezfm Вы звонили на finishTransaction после покупки?

Также, что касается всплывающих окон, вот отличные испытания, приведенные в # 863. Надеюсь, это поможет.

@andresordonezfm Вы звонили на finishTransaction после покупки?

Конечно! также я все равно вызвал clearTransactionIOS (), если это может быть проблемой, но ничего.

Также, что касается всплывающих окон, вот отличные испытания, приведенные в # 863. Надеюсь, это поможет.

Спасибо. Я собираюсь пересмотреть это

Любые решения / обновления?

Пока ничего. Я просматривал, и Apple добавила новые функции в StoreKit и Типы уведомлений.
Я не уверен, может ли это быть проблемой

https://developer.apple.com/videos/play/wwdc2020/10661/

я понизил пакет до 4.5.2 работал у меня
проверь, звонишь ли ты
await RNIap.initConnection();
перед RNIap.requestSubscription

Кажется, я решил эту проблему:
https://github.com/dooboolab/react-native-iap/issues/1146

Прежде всего, когда я проверял квитанцию, я передавал true как параметр isTest (даже когда это была производственная сборка).
Затем я добавил RNIap.clearTransactionIOS(); в purchaseUpdatedListener перед проверкой квитанции и RNIap.finishTransaction(purchase, false) после RNIap.finishTransactionIOS(purchase.transactionId);

Я тестировал в TestFlight и впервые смог совершить покупку (с учетной записью в песочнице), теперь я собираюсь протестировать ее в продакшене 🤞

Кажется, я решил эту проблему:

1146

Прежде всего, когда я проверял квитанцию, я передавал true как параметр isTest (даже когда это была производственная сборка).
Затем я добавил RNIap.clearTransactionIOS(); в purchaseUpdatedListener перед проверкой квитанции и RNIap.finishTransaction(purchase, false) после RNIap.finishTransactionIOS(purchase.transactionId);

Я тестировал в TestFlight и впервые смог совершить покупку (с учетной записью в песочнице), теперь я собираюсь протестировать ее в продакшене 🤞

Привет, чувак, я пробовал это решение, но у меня не сработало.

Я столкнулся с той же проблемой. Это происходит при попытке приобрести подписку после восстановления покупки.

Я могу подтвердить журналы из @andresordonezfm , где кажется, что SKPaymentQueue получает транзакцию типа SKPaymentTransactionStateRestored вместо типа SKPaymentTransactionStatePurchasing , что является причиной "Восстановить" строка при покупке.

Привет, ребята, извините за задержку.

Я просматривал и нашел решение этой проблемы. Проблема заключается в том, что перед вызовом покупок восстановления вновь открытые транзакции тех же покупок восстановления не закрываются должным образом. Потом принудительно закрываю их.

Затем необходимо добавить функцию clearTransactionIOS библиотеки, обещание дождаться закрытия транзакций с помощью функции removeTransactions

Вот мой код:

Файл: response-native-iap / ios / RNIapIos.m

  1. Замените функцию RCT_EXPORT_METHOD (clearTransaction) следующим кодом
RCT_EXPORT_METHOD(clearTransaction:(RCTPromiseResolveBlock)resolve
                  reject:(RCTPromiseRejectBlock)reject) {  

    NSLog(@"\n\n\n  ***  clear remaining Transactions. Call this before make a new transaction   \n\n.");

    NSArray *pendingTrans = [[SKPaymentQueue defaultQueue] transactions];
    countPendingTransaction = (NSInteger)(pendingTrans.count);

    if (countPendingTransaction > 0) {
        [self addPromiseForKey:@"cleaningTransactions" resolve:resolve reject:reject];

        for (SKPaymentTransaction *transaction in pendingTrans) {
            [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
        }

    } else {
        resolve(nil);
    }
}
  1. Добавьте следующую новую функцию (я добавил эту функцию в конец файла RNIapIos.m. Перед строкой «@end»)
-(void)paymentQueue:(SKPaymentQueue *)queue removedTransactions:(NSArray *)transactions {
    NSLog(@"removedTransactions");
    if (countPendingTransaction != nil && countPendingTransaction > 0) {
        countPendingTransaction--;
        if (countPendingTransaction == 0) {
            [self resolvePromisesForKey:@"cleaningTransactions" value:nil];
            countPendingTransaction = nil;
        }
    }
}

Файл: response-native-iap / ios / RNIapIos.h

  1. Под кодом «SKProduct * promotedProduct;» добавьте следующую строку
  NSInteger countPendingTransaction;

Наконец, перед вызовом функции «RNIap.requestSubscription (productId, false)».
Должна быть вызвана функция clearTransactionIOS, например:

    if (Platform.OS === 'ios') {
      await RNIap.clearTransactionIOS();
    }
    await RNIap.requestSubscription(productId, false);

Я надеюсь, что это помогает. Странное поведение при восстановлении покупок мне так и не удалось найти причину. Но это решило для меня тестирование в песочнице.

Если у Вас есть предложения, пожалуйста, дайте мне знать.

У меня тоже есть такая проблема , пожалуйста, автор, помогите мне, спасибо семье

У меня тоже есть такая проблема , пожалуйста, автор, помогите мне, спасибо семье

Привет, чувак! В предыдущем комментарии объясняются шаги, которые я сделал для его решения.

Если у вас есть комментарии, дайте мне знать

@andresordonezfm Не могли бы вы создать PR для этих изменений?

Что касается покупок, поступающих как SKPaymentTransactionStateRestored которые происходят после восстановления, я создал новую учетную запись и сделал несколько покупок, и это не происходит для этой учетной записи. После этого я могу позвонить RNIap.getAvailablePurchases() и RNIap.requestSubscription() .

Кажется, это может быть связано с количеством покупок у пользователя? Я еще не проводил никаких тестов на производстве.

Итак, после целого дня "веселья" я пришел к выводу, что у меня разные устройства с разными версиями ОС, и эта проблема возникает на каждом из них. Я связался с Apple по этому поводу, и мы все еще следим за этим случаем, но без каких-либо твердых выводов. Я не думаю, что это проблема с упаковкой, это должно быть что-то на стороне Apple. Я перепробовал все, что люди упоминают в этой и других ветках, сообщавших о подобной проблеме. Диалоговое окно In App Purchase просто непоследовательно отображается, и до сих пор я не могу найти для него вескую причину, потому что результат всегда разный. Иногда я получаю ошибку E_UNKNOWN, в других случаях я получаю нулевую обратную связь, иногда всплывающее окно появляется через 10 минут ожидания, а иногда просто работает ... Я пробовал с пользователями песочницы, а не пользователями песочницы, у меня был одинаковые разные результаты для одного и того же пользователя и устройства, и даже не отображается ошибка или убедительный / содержательный журнал. Это просто неприятно отлаживать, потому что вы почти ничего не можете найти ... Что ж, если у вас есть какие-либо советы или идеи, я слушаю ... А пока, если у меня есть новости от Apple, Буду держать вас в курсе ...
PS РЕДАКТИРОВАТЬ. после прочтения последнего комментария одно остается неизменным, и я могу это подтвердить, на iOS 14 это кажется более непоследовательным, хотя это происходит на каждой версии ОС, которую я тестировал (12, 13.7, 14). Тем не менее, у меня все еще сложилось впечатление, что проблема связана не только с версией ОС, и поэтому я думаю, что это должно быть что-то с сервером песочницы или что-то еще в конце Apple ..

Именно то, что я испытываю на своей стороне, даже после исправления, предложенного @andresordonezfm (https://github.com/dooboolab/react-native-iap/issues/1120#issuecomment-734805587). @ 106firestarter , Apple когда-нибудь

А пока посмотрю, что найду на форумах разработчиков.

Что касается покупок, поступающих как SKPaymentTransactionStateRestored которые происходят после восстановления, я создал новую учетную запись и сделал несколько покупок, и это не происходит для этой учетной записи. После этого я могу позвонить RNIap.getAvailablePurchases() и RNIap.requestSubscription() .

Кажется, это может быть связано с количеством покупок у пользователя? Я еще не проводил никаких тестов на производстве.

Я попробую, но производство тоже вызывает беспокойство.

Для записи, я также звоню getAvailablePurchases() перед requestSubscription() .

Возможно связанные:

Я также могу подтвердить, что с новой учетной записью проблема больше не существует, как заявил @Paduado (https://github.com/dooboolab/react-native-iap/issues/1120#issuecomment-742685043).

Исправление: использование новой учетной записи вместе с исправлением, предложенным @andresordonezfm, заставляет его работать на моей

@andresordonezfm Не могли бы вы создать PR для этих изменений?

Привет, чувак, снова извини за задержку. Я создал запрос на перенос, чтобы реагировать на собственный iap

~ Я также могу подтвердить, что с новым аккаунтом проблема больше не в том, как заявил @Paduado ( # 1120 (комментарий) ). ~

Исправление: использование новой учетной записи вместе с исправлением, предложенным @andresordonezfm, заставляет его работать на моей

Привет, чувак, я думаю, это проблема песочницы. Вы продолжаете вести себя так?

@andresordonezfm да, я тоже подозреваю, что это проблема с песочницей Apple. Я не проводил больше тестов с момента моего последнего комментария, и я еще не проверял производство. Однако на сегодняшний день жалоб от покупателей не поступало.

С моей стороны, песочница, похоже, вернулась в нужное русло при использовании новой учетной записи, как ранее сообщал @Paduado , без каких-либо изменений в коде. 🤷‍♂️ 😕

@andresordonezfm Я столкнулся с тем же самым и вашими cleartTransactionsIOS() . removeTransactions может быть вызван с удалением 1 или более транзакций. Итак, в removeTransactions , я думаю, мы хотим:

        countPendingTransaction -= [transactions count];

На практике я видел только removedTransactions вызываемый с одной транзакцией, но в документации Apple говорится, что это может быть одна или несколько транзакций. Кстати, хорошая находка! Я застрял на этом какое-то время.

@andresordonezfm Я столкнулся с тем же самым и вашими cleartTransactionsIOS() . removeTransactions может быть вызван с удалением 1 или более транзакций. Итак, в removeTransactions , я думаю, мы хотим:

        countPendingTransaction -= [transactions count];

На практике я видел только removedTransactions вызываемый с одной транзакцией, но в документации Apple говорится, что это может быть одна или несколько транзакций. Кстати, хорошая находка! Я застрял на этом какое-то время.

Привет, чувак, спасибо за твою рекомендацию. Я проверил ваше предложение, и оно мне подходит. Я сделал запрос на перенос с этим изменением.

Примечание: Да, я просмотрел эту документацию, но поскольку она запускается только от транзакции к транзакции, я не реализовал ее. Но это очень хорошая рекомендация. Спасибо!

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