purchaserInfoUpdateListener никогда не вызывал RevenueCat

#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.