#ios #react-native #in-app-purchase #revenuecat
#iOS #реагировать-родной #покупка в приложении #revenuecat
Вопрос:
Я использую React Native SDK RevenueCat.
Я следую официальному примеру.
Я могу совершить покупку на iOS и получить You're all set. Your purchase was successful
приглашение.
Проблема purchaserInfoUpdateListener
в том, что никогда не вызывается, и покупка всегда catch
блокируется, и я не могу проверить, была ли покупка успешно выполнена в моем коде.
В чем может быть проблема?
async componentDidMount() {
try {
this.purchaserInfoUpdateListener = (info) => {
console.log('purchaserInfoUpdateListener:: ', info )
checkIfPro(info);
};
this.shouldPurchasePromoProduct = async deferredPurchase => {
this.deferredPurchase = deferredPurchase;
};
Purchases.addPurchaserInfoUpdateListener(this.purchaserInfoUpdateListener);
Purchases.addShouldPurchasePromoProductListener(this.shouldPurchasePromoProduct);
} catch (e) {
console.log("Error handling");
}
}
async componentWillUnmount() {
Purchases.removePurchaserInfoUpdateListener(this.purchaserInfoUpdateListener);
Purchases.removeShouldPurchasePromoProductListener(this.shouldPurchasePromoProduct);
}
onPress={async () => {
const aPackage = this.state.offerings.current.availablePackages[0];
try {
const purchaseMade = await Purchases.purchasePackage(aPackage);
checkIfPro(purchaseMade); //never called
console.log('purchaseMade:: ',purchaseMade) //never called
} catch (e) {
if (!e.userCancelled) {
console.log(`Error handling ${JSON.stringify(e)}`);
} else {
console.log(`User cancelled ${JSON.stringify(e)}`);
}
}
}}
Журналы:
[Purchases] - DEBUG: No cached purchaser info, fetching
[Purchases] - DEBUG: there are no requests currently running, starting request GET
[Purchases] - DEBUG: GET /v1/subscribers/$RCAnonymousID:f68c1e27ec9548489acd081bbf178ebe
[Purchases] - DEBUG: GET /v1/subscribers/$RCAnonymousID:f68c1e27ec9548489acd081bbf178ebe/offerings
[Purchases] - DEBUG: GET /v1/subscribers/$RCAnonymousID:f68c1e27ec9548489acd081bbf178ebe/offerings 200
[Purchases] - DEBUG: Requesting products with identifiers: {(
[Purchases] - DEBUG: Products request finished
[Purchases] - DEBUG: Valid Products:
[Purchases] - DEBUG: 2567531 - <SKProduct: 0x281753720>
[Purchases] - DEBUG: com.colorfulNightLight.unlockAllFeatures - <SKProduct: 0x281753740>
[Purchases] - DEBUG: Invalid Product Identifiers - (
[Purchases] - DEBUG: 1 completion handlers waiting on products
[Purchases] - DEBUG: GET /v1/subscribers/$RCAnonymousID:f68c1e27ec9548489acd081bbf178ebe 201
[Purchases] - DEBUG: Sending latest purchaser info to delegate
[Purchases] - DEBUG: serial request done: GET /subscribers/$RCAnonymousID%3Af68c1e27ec9548489acd081bbf178ebe, 0 requests left in the queue
[Purchases] - DEBUG: Vending offerings from cache
[Purchases] - DEBUG: Vending offerings from cache
[Purchases] - DEBUG: Vending purchaserInfo from cache
[Purchases] - DEBUG: Vending purchaserInfo from cache
[Purchases] - DEBUG: applicationDidBecomeActive
[Purchases] - DEBUG: Vending offerings from cache
[Purchases] - DEBUG: Vending offerings from cache
[Purchases] - DEBUG: makePurchase
[Purchases] - DEBUG: makePurchase - com.colorfulNightLight.unlockAllFeatures - Offering: Default
[Purchases] - DEBUG: PaymentQueue updatedTransaction: com.colorfulNightLight.unlockAllFeatures (null) ((null)) (null) - 0
[Purchases] - DEBUG: applicationDidBecomeActive
[Purchases] - DEBUG: applicationDidBecomeActive
[Purchases] - DEBUG: PaymentQueue updatedTransaction: com.colorfulNightLight.unlockAllFeatures 4 ((null)) 0 - 1
[Purchases] - DEBUG: Loaded receipt from file:///private/var/mobile/Containers/Data/Application/3C217C29-CDCE-4EBF-966C-
7ADB8B64CF1C/StoreKit/sandboxReceipt
[Purchases] - INFO: found 0 unsynced attributes for appUserID: $RCAnonymousID:f68c1e27ec9548489acd081bbf178ebe
[Purchases] - DEBUG: there are no requests currently running, starting request POST /receipts
[Purchases] - DEBUG: POST /v1/receipts
[Purchases] - DEBUG: POST /v1/receipts 400
[Purchases] - ERROR: The receipt is not valid.
[Purchases] - DEBUG: serial request done: POST /receipts, 0 requests left in the queue
[Purchases] - DEBUG: Finishing com.colorfulNightLight.unlockAllFeatures 4 (0)
[Purchases] - DEBUG: PaymentQueue removedTransaction: com.colorfulNightLight.unlockAllFeatures 4 (0 (null)) (null) - 1
[Purchases] - DEBUG: Vending offerings from cache
[Purchases] - DEBUG: makePurchase
[Purchases] - DEBUG: makePurchase - com.colorfulNightLight.unlockAllFeatures - Offering: Default
[Purchases] - DEBUG: PaymentQueue updatedTransaction: com.colorfulNightLight.unlockAllFeatures (null) ((null)) (null) - 0
[Purchases] - DEBUG: applicationDidBecomeActive
[Purchases] - DEBUG: applicationDidBecomeActive
Комментарии:
1. Вы когда-нибудь заставляли прослушиватель обновления информации о покупке работать? У меня аналогичная проблема в коде Flutter.
2. Нет, к сожалению, я не мог. Я переключился на другую библиотеку. Похоже, что служба поддержки RevenueCat спит.
3. Хорошо, спасибо. Какая библиотека? Я попробовал пару других пакетов для Flutter, но они не поддерживают обработку подписки и вполовину так хорошо, как RevenueCat.
4. У меня есть только непотребляемый продукт, но вы правы, RevenueCat обладает множеством навыков для подписки. Я использую
https://github.com/dooboolab/react-native-iap
прямо сейчас.
Ответ №1:
Из журналов вы получаете a 400 error The receipt is not valid.
при отправке в RevenueCat. Это происходит на симуляторе или физическом устройстве?
Для тестирования на симуляторе (iOS 14 ) вам необходимо создать конфигурацию StoreKit в XCode и загрузить свой сертификат в RevenueCat: https://docs.revenuecat.com/docs/apple-app-store#ios-14-only-testing-on-the-simulator
На физическом устройстве вам не нужно выполнять какие-либо дополнительные настройки для проверки покупок.
Возможно, у вас также повреждена учетная запись изолированной среды, вы можете попробовать создать нового пользователя изолированной среды в App Store Connect.
Комментарии:
1. Спасибо за ответ. Я тестировал как на симуляторе, так и на реальном устройстве. Я создал конфигурационный файл StoreKit, но в документах не было упоминания о загрузке сертификата в RevenueCat, я думаю, что это что-то новое. В любом случае, я переключился на другую библиотеку. Я попробую это, если в будущем вернусь к RevenueCat.