Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Purchases.purchasePackage hangs in the try block or goes directly into the finally block without resolving/rejecting the promise #1082

Open
5 tasks done
bilal1031 opened this issue Sep 4, 2024 · 7 comments
Labels
bug Something isn't working

Comments

@bilal1031
Copy link

bilal1031 commented Sep 4, 2024

Describe the bug
I encountered an issue with the subscription process. Initially, I purchased a subscription and subsequently canceled it. After a few minutes, I attempted to repurchase the subscription, having confirmed through the webhook that the CANCELLATION event had been triggered. The Apple subscription process proceeded as expected, and I received an alert indicating that the purchase was successful. However, the function call Purchases.purchasePackage, which is expected to either resolve or reject the promise, appears to hang instead.

When a finally block is included, the execution proceeds to that block, but the expected resolution or rejection of the promise does not occur. Additionally, if I comment out the finally block, the line log('json', purchaseResponse)) is never executed, indicating that the function is stalling at this point.

This behavior suggests that something is preventing the function from properly resolving or rejecting the promise after the purchase process.

  1. Environment
    1. Platform: iOS
    2. SDK version: "react-native-purchases": "^8.1.0"
    3. OS version: 15.8.3
    4. Xcode/Android Studio version: Using expo dev-build
    5. React Native version: 0.74.5
    6. SDK installation (CocoaPods + version or manual):Using expo dev-build
    7. How widespread is the issue. Percentage of devices affected. Currently testing on my own device before launching into production
  2. Debug logs that reproduce the issue
  3. Steps to reproduce, with a description of expected vs. actual behavior
  4. Other information (e.g. stacktraces, related issues, suggestions how to fix, links for us to have context, eg. stackoverflow, etc.)

Additional context

const onPressSubscribe = async () => {
    try {

       log('notify', 'Product ID: ' + product_id)
        setLoading(true)

        const offer = offerings.find(
          (item) => item.product.identifier == product_id
        )
        const { customerInfo } = await Purchases.logIn(user_id)

        // after this function call it goes to finally block when I deal with apple subscription process
        const purchaseResponse = await Purchases.purchasePackage(offer)

        log('json', purchaseResponse)
        log('success', 'Subscription Purchased Successfully')
       
       // perform stuff to update user data
   
        setLoading(false)
      
    } catch (ex) {

        console.log('Error', e.message)
        setLoading(false)

    } finally {

        // Here I am trying to see if the customer info is updated but it return a json showing that
        // there is no subscription purchased
        console.log('Finally')
        const customerInfo = await Purchases.getCustomerInfo()
        console.log('customerInfo', customerInfo)
        setLoading(false)
    }
  }
@bilal1031 bilal1031 added the bug Something isn't working label Sep 4, 2024
@RCGitBot
Copy link
Contributor

RCGitBot commented Sep 4, 2024

👀 We've just linked this issue to our internal tracker and notified the team. Thank you for reporting, we're checking this out!

@crico
Copy link

crico commented Sep 5, 2024

Same here

@mshmoustafa
Copy link
Contributor

@bilal1031 Do you get the logs from right before purchasePackage but not the ones after? Is it possible that offer is null or undefined, causing an exception at purchasePackage?
And also, are you able to get the debug logs when you run that code?

@crico
Copy link

crico commented Sep 7, 2024

@bilal1031 Do you get the logs from right before purchasePackage but not the ones after? Is it possible that offer is null or undefined, causing an exception at purchasePackage? And also, are you able to get the debug logs when you run that code?

In my case, when I execute Purchases.purchasePackage, the native iOS payment system opens, and the whole process finishes with 'Ok', but it doesn't return control back to my app. Instead, the native iOS payment system reappears. On Android, it works perfectly. I'm using the same versions of the libraries as @bilal1031

@bilal1031
Copy link
Author

bilal1031 commented Sep 7, 2024

@bilal1031 Do you get the logs from right before purchasePackage but not the ones after? Is it possible that offer is null or undefined, causing an exception at purchasePackage? And also, are you able to get the debug logs when you run that code?

Yes, I get the logs from right before purchasePackage but not the ones after. I also reviewed the code and confirmed that the offer variable is never null or undefined, as the function throws an error in those cases. I also tested by passing a hardcoded package as a parameter. Additionally, the scenario described by @crico, is the exact behavior occurring on iOS and it aligns with what I'm experiencing. I am not able to get the debug logs as I am using the expo development-build on a physical device.

@crico
Copy link

crico commented Sep 17, 2024

any news?

@yolpsoftware
Copy link

Uhm, is anyone at RevenueCat aware that this issue is a real blocker for adoption? In our case, most of the time, the native purchase UI does not even appear. The call to purchasePackage just hangs. No UI appears, no promise rejection, nothing.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

5 participants