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

App needs to be restarted to identify user #777

Open
5 tasks done
wmonecke opened this issue Nov 13, 2023 · 25 comments
Open
5 tasks done

App needs to be restarted to identify user #777

wmonecke opened this issue Nov 13, 2023 · 25 comments
Labels
bug Something isn't working status: needs-additional-info Issues that are missing steps from bug template

Comments

@wmonecke
Copy link

Describe the bug
I have lost about 500 paying subscribers because revenuecat is failing to identify my paying users. This started happening after upgrading the library.

For a subscribed user to access their premium features after log in they will need to kill and restart the app.

This is my validateSub function - what am I doing wrong?

export const validateSubscription = () => {
  return (dispatch: Dispatch) => {
    auth().onAuthStateChanged(async (currentUser) => {

      if (!currentUser) {
        return;
      }

      const user = await Purchases.logIn(currentUser.uid);

      const isSubscriptionActive =
        typeof user.customerInfo.entitlements.active.plus !==
        'undefined';

      if (isSubscriptionActive) {
        prettyLog("auth().onAuthStateChanged - You're a PLUS user!");
        return dispatch({ type: SUBSCRIPTION_VALIDATED });
      }
    });

    Purchases.addCustomerInfoUpdateListener(
      async (updatedCustomerInfo) => {
        
        if (
          typeof updatedCustomerInfo.entitlements.active?.plus !==
          'undefined'
        ) {
        
          return dispatch({ type: SUBSCRIPTION_VALIDATED });
        }

        dispatch({ type: SUBSCRIPTION_EXPIRED });
      },
    );
  };
};

I am calling Purchases.configure outside my App.js (very early)

Sometimes the user within the addCustomerInfoUpdateListener will return a non-subbed user while the user inside the onAuthStateChanged IS subscribed. This is really confusing an non-intuitive.

I dont know what else to try and dont want to ship another version and lose whats left.

Please help.

  1. Environment
    1. Platform: iOS and android
    2. SDK version: 6.3.0
    3. OS version:
    4. Xcode/Android Studio version:
    5. React Native version: 0.72.1
    6. SDK installation (CocoaPods + version or manual):
    7. How widespread is the issue. Percentage of devices affected. Almost everyone.
  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
Add any other context about the problem here.

@wmonecke wmonecke added the bug Something isn't working label Nov 13, 2023
@RCGitBot
Copy link
Contributor

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

@NachoSoto
Copy link
Contributor

Thanks for the report. Is this happening on both platforms?
Can you provide complete (starting from SDK initialization) verbose logs on the platforms that are reproducing this issue?

Purchases.setLogLevel(Purchases.LOG_LEVEL.VERBOSE);

@wmonecke
Copy link
Author

wmonecke commented Nov 13, 2023

@NachoSoto Done, but where should the logs show? In my terminal, I am only seeing my own console.logs. This is happening in both Android and iOS.

@NachoSoto
Copy link
Contributor

They'll be on the Xcode terminal (or Console.app) and in Android Studio on Logcat.

@wmonecke
Copy link
Author

wmonecke commented Nov 13, 2023

I have the logs:

2023-11-13 21:33:02.512 15027-15149 [Purchases] - DEBUG     com.moodpixel                        D  ℹ️ Debug logging enabled
2023-11-13 21:33:02.513 15027-15149 [Purchases] - DEBUG     com.moodpixel                        D  ℹ️ SDK Version - 6.5.2
2023-11-13 21:33:02.513 15027-15149 [Purchases] - DEBUG     com.moodpixel                        D  ℹ️ Package name - com.moodpixel
2023-11-13 21:33:02.513 15027-15149 [Purchases] - DEBUG     com.moodpixel                        D  👤 Initial App User ID - null
2023-11-13 21:33:02.514 15027-15149 [Purchases] - DEBUG     com.moodpixel                        D  ℹ️ Purchases configured with response verification: DISABLED
2023-11-13 21:33:02.515 15027-15149 [Purchases] - DEBUG     com.moodpixel                        D  👤 Setting new anonymous App User ID - %s
2023-11-13 21:33:02.516 15027-15149 [Purchases] - DEBUG     com.moodpixel                        D  👤 Identifying App User ID: $RCAnonymousID:2a8e7301c8584e519a547706dfcdd2c8
2023-11-13 21:33:02.517 15027-15149 [Purchases] - DEBUG     com.moodpixel                        D  ℹ️ Deleting old synced subscriber attributes that don't belong to $RCAnonymousID:2a8e7301c8584e519a547706dfcdd2c8
2023-11-13 21:33:02.519 15027-15027 [Purchases] - DEBUG     com.moodpixel                        D  ℹ️ App foregrounded
2023-11-13 21:33:02.519 15027-15027 [Purchases] - DEBUG     com.moodpixel                        D  ℹ️ CustomerInfo cache is stale, updating from network in foreground.
2023-11-13 21:33:02.519 15027-15149 [Purchases] - DEBUG     com.moodpixel                        D  ℹ️ Listener set
2023-11-13 21:33:02.520 15027-15027 [Purchases] - DEBUG     com.moodpixel                        D  Retrieving customer info with policy: FETCH_CURRENT
2023-11-13 21:33:02.520 15027-15027 [Purchases] - DEBUG     com.moodpixel                        D  ℹ️ Updating pending purchase queue
2023-11-13 21:33:02.521 15027-15027 [Purchases] - DEBUG     com.moodpixel                        D  ℹ️ Offerings cache is stale, updating from network in foreground
2023-11-13 21:33:02.522 15027-15027 [Purchases] - DEBUG     com.moodpixel                        D  😻 Offerings updated from network.
2023-11-13 21:33:02.523 15027-15027 [Purchases] - DEBUG     com.moodpixel                        D  ℹ️ Updating pending purchase queue
2023-11-13 21:33:02.524 15027-15027 [Purchases] - DEBUG     com.moodpixel                        D  ℹ️ No subscriber attributes to synchronize.
2023-11-13 21:33:02.524 15027-15027 [Purchases] - DEBUG     com.moodpixel                        D  Product entitlement mappings are stale. Updating.
2023-11-13 21:33:02.532 15027-15027 [Purchases] - DEBUG     com.moodpixel                        D  ℹ️ Starting connection for com.android.billingclient.api.BillingClientImpl@d67b3e3
2023-11-13 21:33:02.547 15027-15027 [Purchases] - DEBUG     com.moodpixel                        D  ℹ️ Starting connection for com.android.billingclient.api.BillingClientImpl@d67b3e3
2023-11-13 21:33:02.559 15027-15027 [Purchases] - DEBUG     com.moodpixel                        D  ℹ️ Billing Service Setup finished for com.android.billingclient.api.BillingClientImpl@d67b3e3
2023-11-13 21:33:02.559 15027-15027 [Purchases] - DEBUG     com.moodpixel                        D  ℹ️ Updating pending purchase queue
2023-11-13 21:33:02.560 15027-15027 [Purchases] - DEBUG     com.moodpixel                        D  ℹ️ Querying purchases
2023-11-13 21:33:02.577 15027-15185 [Purchases] - DEBUG     com.moodpixel                        D  ℹ️ Purchase of type SUBS with hash lVLcJ2jzOh5EWIf1QRnIKIGtvyU=
2023-11-13 21:33:02.577 15027-15185 [Purchases] - DEBUG     com.moodpixel                        D  ℹ️ Cleaning previously sent tokens
2023-11-13 21:33:02.577 15027-15185 [Purchases] - DEBUG     com.moodpixel                        D  ℹ️ Tokens already posted: []
2023-11-13 21:33:02.578 15027-15185 [Purchases] - DEBUG     com.moodpixel                        D  ℹ️ Saving tokens []
2023-11-13 21:33:02.578 15027-15185 [Purchases] - DEBUG     com.moodpixel                        D  ℹ️ Tokens already posted: []
2023-11-13 21:33:02.579 15027-15185 [Purchases] - DEBUG     com.moodpixel                        D  ℹ️ Requesting products from the store with identifiers: moodflow.plus.1month
2023-11-13 21:33:02.600 15027-15186 [Purchases] - DEBUG     com.moodpixel                        D  ℹ️ Products request finished for moodflow.plus.1month
2023-11-13 21:33:02.601 15027-15186 [Purchases] - DEBUG     com.moodpixel                        D  💰 Retrieved productDetailsList: ProductDetails{jsonString='{"productId":"moodflow.plus.1month","type":"subs","title":"Moodflow Plus 1-Month (Moodflow: Mood Tracker)","name":"Moodflow Plus 1-Month","description":"Get access to Routines, up to 4 Cloud-backed images per entry, Atlas and \nmore!","localizedIn":["en-US"],"skuDetailsToken":"AEuhp4KGJrva5HPTcb5pOzRpfGB5rculzUx87GloslpckrwaVcu_ugXu2CihmKgjt2Uw","subscriptionOfferDetails":[{"offerIdToken":"AUj\/YhgAX5lwuf1JPrc6oEj\/fRJX107vFfPDxMvTANirj13cjIegLIxeW8lWfijPGJ678YVKvQ6YbaPyEtJ4uIwX4t9bDrl4CerzH+r3aw==","basePlanId":"p1m","pricingPhases":[{"priceAmountMicros":3990000,"priceCurrencyCode":"EUR","formattedPrice":"€3.99","billingPeriod":"P1M","recurrenceMode":1}],"offerTags":[]}]}', parsedJson={"productId":"moodflow.plus.1month","type":"subs","title":"Moodflow Plus 1-Month (Moodflow: Mood Tracker)","name":"Moodflow Plus 1-Month","description":"Get access to Routines, up to 4 Cloud-backed images per entry, Atlas and \nmore!","localizedIn":["en-US"],"skuDetailsToken":"AEuhp4KGJrva5HPTcb5pOzRpfGB5rculzUx87GloslpckrwaVcu_ugXu2CihmKgjt2Uw","subscriptionOfferDetails":[{"offerIdToken":"AUj\/YhgAX5lwuf1JPrc6oEj\/fRJX107vFfPDxMvTANirj13cjIegLIxeW8lWfijPGJ678YVKvQ6YbaPyEtJ4uIwX4t9bDrl4CerzH+r3aw==","basePlanId":"p1m","pricingPhases":[{"priceAmountMicros":3990000,"priceCurrencyCode":"EUR","formattedPrice":"€3.99","billingPeriod":"P1M","recurrenceMode":1}],"offerTags":[]}]}, productId='moodflow.plus.1month', productType='subs', title='Moodflow Plus 1-Month (Moodflow: Mood Tracker)', productDetailsToken='AEuhp4KGJrva5HPTcb5pOzRpfGB5rculzUx87GloslpckrwaVcu_ugXu2CihmKgjt2Uw', subscriptionOfferDetails=[com.android.billingclient.api.ProductDetails$SubscriptionOfferDetails@b3b15d1]}
2023-11-13 21:33:02.603 15027-15186 [Purchases] - DEBUG     com.moodpixel                        D  💰 moodflow.plus.1month - ProductDetails{jsonString='{"productId":"moodflow.plus.1month","type":"subs","title":"Moodflow Plus 1-Month (Moodflow: Mood Tracker)","name":"Moodflow Plus 1-Month","description":"Get access to Routines, up to 4 Cloud-backed images per entry, Atlas and \nmore!","localizedIn":["en-US"],"skuDetailsToken":"AEuhp4KGJrva5HPTcb5pOzRpfGB5rculzUx87GloslpckrwaVcu_ugXu2CihmKgjt2Uw","subscriptionOfferDetails":[{"offerIdToken":"AUj\/YhgAX5lwuf1JPrc6oEj\/fRJX107vFfPDxMvTANirj13cjIegLIxeW8lWfijPGJ678YVKvQ6YbaPyEtJ4uIwX4t9bDrl4CerzH+r3aw==","basePlanId":"p1m","pricingPhases":[{"priceAmountMicros":3990000,"priceCurrencyCode":"EUR","formattedPrice":"€3.99","billingPeriod":"P1M","recurrenceMode":1}],"offerTags":[]}]}', parsedJson={"productId":"moodflow.plus.1month","type":"subs","title":"Moodflow Plus 1-Month (Moodflow: Mood Tracker)","name":"Moodflow Plus 1-Month","description":"Get access to Routines, up to 4 Cloud-backed images per entry, Atlas and \nmore!","localizedIn":["en-US"],"skuDetailsToken":"AEuhp4KGJrva5HPTcb5pOzRpfGB5rculzUx87GloslpckrwaVcu_ugXu2CihmKgjt2Uw","subscriptionOfferDetails":[{"offerIdToken":"AUj\/YhgAX5lwuf1JPrc6oEj\/fRJX107vFfPDxMvTANirj13cjIegLIxeW8lWfijPGJ678YVKvQ6YbaPyEtJ4uIwX4t9bDrl4CerzH+r3aw==","basePlanId":"p1m","pricingPhases":[{"priceAmountMicros":3990000,"priceCurrencyCode":"EUR","formattedPrice":"€3.99","billingPeriod":"P1M","recurrenceMode":1}],"offerTags":[]}]}, productId='moodflow.plus.1month', productType='subs', title='Moodflow Plus 1-Month (Moodflow: Mood Tracker)', productDetailsToken='AEuhp4KGJrva5HPTcb5pOzRpfGB5rculzUx87GloslpckrwaVcu_ugXu2CihmKgjt2Uw', subscriptionOfferDetails=[com.android.billingclient.api.ProductDetails$SubscriptionOfferDetails@b3b15d1]}
2023-11-13 21:33:02.612 15027-15186 [Purchases] - DEBUG     com.moodpixel                        D  ℹ️ Found 0 unsynced attributes for App User ID: $RCAnonymousID:2a8e7301c8584e519a547706dfcdd2c8
2023-11-13 21:33:03.231 15027-15173 [Purchases] - DEBUG     com.moodpixel                        D  API request started: GET /subscribers/%24RCAnonymousID%3A2a8e7301c8584e519a547706dfcdd2c8/offerings
2023-11-13 21:33:03.234 15027-15173 [Purchases] - DEBUG     com.moodpixel                        D  API request completed with status: GET /subscribers/%24RCAnonymousID%3A2a8e7301c8584e519a547706dfcdd2c8/offerings 200
2023-11-13 21:33:03.240 15027-15173 [Purchases] - DEBUG     com.moodpixel                        D  ℹ️ Requesting products from the store with identifiers: moodflow.plus.1month, moodflow.plus.3months, moodflow.plus.6months
2023-11-13 21:33:03.249 15027-15027 [Purchases] - DEBUG     com.moodpixel                        D  ℹ️ Querying purchases
2023-11-13 21:33:03.249 15027-15027 [Purchases] - DEBUG     com.moodpixel                        D  ℹ️ Querying purchases
2023-11-13 21:33:03.268 15027-15197 [Purchases] - DEBUG     com.moodpixel                        D  ℹ️ Products request finished for moodflow.plus.1month, moodflow.plus.3months, moodflow.plus.6months
2023-11-13 21:33:03.269 15027-15197 [Purchases] - DEBUG     com.moodpixel                        D  💰 Retrieved productDetailsList: ProductDetails{jsonString='{"productId":"moodflow.plus.1month","type":"subs","title":"Moodflow Plus 1-Month (Moodflow: Mood Tracker)","name":"Moodflow Plus 1-Month","description":"Get access to Routines, up to 4 Cloud-backed images per entry, Atlas and \nmore!","localizedIn":["en-US"],"skuDetailsToken":"AEuhp4KGJrva5HPTcb5pOzRpfGB5rculzUx87GloslpckrwaVcu_ugXu2CihmKgjt2Uw","subscriptionOfferDetails":[{"offerIdToken":"AUj\/YhgAX5lwuf1JPrc6oEj\/fRJX107vFfPDxMvTANirj13cjIegLIxeW8lWfijPGJ678YVKvQ6YbaPyEtJ4uIwX4t9bDrl4CerzH+r3aw==","basePlanId":"p1m","pricingPhases":[{"priceAmountMicros":3990000,"priceCurrencyCode":"EUR","formattedPrice":"€3.99","billingPeriod":"P1M","recurrenceMode":1}],"offerTags":[]}]}', parsedJson={"productId":"moodflow.plus.1month","type":"subs","title":"Moodflow Plus 1-Month (Moodflow: Mood Tracker)","name":"Moodflow Plus 1-Month","description":"Get access to Routines, up to 4 Cloud-backed images per entry, Atlas and \nmore!","localizedIn":["en-US"],"skuDetailsToken":"AEuhp4KGJrva5HPTcb5pOzRpfGB5rculzUx87GloslpckrwaVcu_ugXu2CihmKgjt2Uw","subscriptionOfferDetails":[{"offerIdToken":"AUj\/YhgAX5lwuf1JPrc6oEj\/fRJX107vFfPDxMvTANirj13cjIegLIxeW8lWfijPGJ678YVKvQ6YbaPyEtJ4uIwX4t9bDrl4CerzH+r3aw==","basePlanId":"p1m","pricingPhases":[{"priceAmountMicros":3990000,"priceCurrencyCode":"EUR","formattedPrice":"€3.99","billingPeriod":"P1M","recurrenceMode":1}],"offerTags":[]}]}, productId='moodflow.plus.1month', productType='subs', title='Moodflow Plus 1-Month (Moodflow: Mood Tracker)', productDetailsToken='AEuhp4KGJrva5HPTcb5pOzRpfGB5rculzUx87GloslpckrwaVcu_ugXu2CihmKgjt2Uw', subscriptionOfferDetails=[com.android.billingclient.api.ProductDetails$SubscriptionOfferDetails@652d5ef]}, ProductDetails{jsonString='{"productId":"moodflow.plus.3months","type":"subs","title":"Moodflow Plus 3-Months (Moodflow: Mood Tracker)","name":"Moodflow Plus 3-Months","description":"Get access to Routines, up to 4 Cloud-backed images per entry, Atlas and \nmore!","localizedIn":["en-US"],"skuDetailsToken":"AEuhp4L-X4bd3Nf-QF_povwXU3Y-DStg1oqeSq34KdjpkYYK4HdUfBGyjk07vq1yv8v-","subscriptionOfferDetails":[{"offerIdToken":"AUj\/Yhh31n7JrHDeUzlUXJDshNpfv3YXpH1EmDqRtnv0bBkP5VaOr\/jrc4l3DaCdQ88ZlKvC3ndYIlXBIQ1BwQlU6x7x1jWcqtzaQREbZg==","basePlanId":"p3m","pricingPhases":[{"priceAmountMicros":10990000,"priceCurrencyCode":"EUR","formattedPrice":"€10.99","billingPeriod":"P3M","recurrenceMode":1}],"offerTags":[]}]}', parsedJson={"productId":"moodflow.plus.3months","type":"subs","title":"Moodflow Plus 3-Months (Moodflow: Mood Tracker)","name":"Moodflow Plus 3-Months","description":"Get access to Routines, up to 4 Cloud-backed images per entry, Atlas and \nmore!","localizedIn":["en-US"],"skuDetailsToken":"AEuhp4L-X4bd3Nf-QF_povwXU3Y-DStg1oqeSq34KdjpkYYK4HdUfBGyjk07vq1yv8v-","subscriptionOfferDetails":[{"offerIdToken":"AUj\/Yhh31n7JrHDeUzlUXJDshNpfv3YXpH1EmDqRtnv0bBkP5VaOr\/jrc4l3DaCdQ88ZlKvC3ndYIlXBIQ1BwQlU6x7x1jWcqtzaQREbZg==","basePlanId":"p3m","pricingPhases":[{"priceAmountMicros":10990000,"priceCurrencyCode":"EUR","formattedPrice":"€10.99","billingPeriod":"P3M","recurrenceMode":1}],"offerTags":[]}]}, productId='moodflow.plus.3months', productType='subs', title='Moodflow Plus 3-Months (Moodflow: Mood Tracker)', productDetailsToken='AEuhp4L-X4bd3Nf-QF_povwXU3Y-DStg1oqeSq34KdjpkYYK4HdUfBGyjk07vq1yv8v-', subscriptionOfferDetails=[com.android.billingclient.api.ProductDetails$SubscriptionOfferDetails@44e18fc]}, ProductDetails{jsonString='{"productId":"moodflow.plus.6months","type":"subs","title":"Moodflow Plus 6-Months (Moodflow: Mood Tracker)","name":"Moodflow Plus 6-Months","description":"Get access to Routines, up to 4 Cloud-backed images per entry, Atlas and \nmore!","localizedIn":["en-US"],"skuDetailsToken":"AEuhp4L8sXFC9syA1WawVyd8jAgG799M25nl8VKX4CWc4UB5YKT-7G-YLotJcuQsceFD","subscriptionOfferDetails":[{"offerIdToken":"AUj\/YhhAz4dJ9+1xh+t1uNnXgHVPyLiXnGpEIMJbjv1y2BJP3XVUdTfvqThJ80m62BUJxij7ahNBvgMXaeJygzG0oRZw6PRSAM3sS07bGQ==","basePlanId":"p6m","pricingPh
2023-11-13 21:33:03.269 15027-15197 [Purchases] - DEBUG     com.moodpixel                        D  💰 moodflow.plus.1month - ProductDetails{jsonString='{"productId":"moodflow.plus.1month","type":"subs","title":"Moodflow Plus 1-Month (Moodflow: Mood Tracker)","name":"Moodflow Plus 1-Month","description":"Get access to Routines, up to 4 Cloud-backed images per entry, Atlas and \nmore!","localizedIn":["en-US"],"skuDetailsToken":"AEuhp4KGJrva5HPTcb5pOzRpfGB5rculzUx87GloslpckrwaVcu_ugXu2CihmKgjt2Uw","subscriptionOfferDetails":[{"offerIdToken":"AUj\/YhgAX5lwuf1JPrc6oEj\/fRJX107vFfPDxMvTANirj13cjIegLIxeW8lWfijPGJ678YVKvQ6YbaPyEtJ4uIwX4t9bDrl4CerzH+r3aw==","basePlanId":"p1m","pricingPhases":[{"priceAmountMicros":3990000,"priceCurrencyCode":"EUR","formattedPrice":"€3.99","billingPeriod":"P1M","recurrenceMode":1}],"offerTags":[]}]}', parsedJson={"productId":"moodflow.plus.1month","type":"subs","title":"Moodflow Plus 1-Month (Moodflow: Mood Tracker)","name":"Moodflow Plus 1-Month","description":"Get access to Routines, up to 4 Cloud-backed images per entry, Atlas and \nmore!","localizedIn":["en-US"],"skuDetailsToken":"AEuhp4KGJrva5HPTcb5pOzRpfGB5rculzUx87GloslpckrwaVcu_ugXu2CihmKgjt2Uw","subscriptionOfferDetails":[{"offerIdToken":"AUj\/YhgAX5lwuf1JPrc6oEj\/fRJX107vFfPDxMvTANirj13cjIegLIxeW8lWfijPGJ678YVKvQ6YbaPyEtJ4uIwX4t9bDrl4CerzH+r3aw==","basePlanId":"p1m","pricingPhases":[{"priceAmountMicros":3990000,"priceCurrencyCode":"EUR","formattedPrice":"€3.99","billingPeriod":"P1M","recurrenceMode":1}],"offerTags":[]}]}, productId='moodflow.plus.1month', productType='subs', title='Moodflow Plus 1-Month (Moodflow: Mood Tracker)', productDetailsToken='AEuhp4KGJrva5HPTcb5pOzRpfGB5rculzUx87GloslpckrwaVcu_ugXu2CihmKgjt2Uw', subscriptionOfferDetails=[com.android.billingclient.api.ProductDetails$SubscriptionOfferDetails@652d5ef]}
2023-11-13 21:33:03.270 15027-15197 [Purchases] - DEBUG     com.moodpixel                        D  💰 moodflow.plus.3months - ProductDetails{jsonString='{"productId":"moodflow.plus.3months","type":"subs","title":"Moodflow Plus 3-Months (Moodflow: Mood Tracker)","name":"Moodflow Plus 3-Months","description":"Get access to Routines, up to 4 Cloud-backed images per entry, Atlas and \nmore!","localizedIn":["en-US"],"skuDetailsToken":"AEuhp4L-X4bd3Nf-QF_povwXU3Y-DStg1oqeSq34KdjpkYYK4HdUfBGyjk07vq1yv8v-","subscriptionOfferDetails":[{"offerIdToken":"AUj\/Yhh31n7JrHDeUzlUXJDshNpfv3YXpH1EmDqRtnv0bBkP5VaOr\/jrc4l3DaCdQ88ZlKvC3ndYIlXBIQ1BwQlU6x7x1jWcqtzaQREbZg==","basePlanId":"p3m","pricingPhases":[{"priceAmountMicros":10990000,"priceCurrencyCode":"EUR","formattedPrice":"€10.99","billingPeriod":"P3M","recurrenceMode":1}],"offerTags":[]}]}', parsedJson={"productId":"moodflow.plus.3months","type":"subs","title":"Moodflow Plus 3-Months (Moodflow: Mood Tracker)","name":"Moodflow Plus 3-Months","description":"Get access to Routines, up to 4 Cloud-backed images per entry, Atlas and \nmore!","localizedIn":["en-US"],"skuDetailsToken":"AEuhp4L-X4bd3Nf-QF_povwXU3Y-DStg1oqeSq34KdjpkYYK4HdUfBGyjk07vq1yv8v-","subscriptionOfferDetails":[{"offerIdToken":"AUj\/Yhh31n7JrHDeUzlUXJDshNpfv3YXpH1EmDqRtnv0bBkP5VaOr\/jrc4l3DaCdQ88ZlKvC3ndYIlXBIQ1BwQlU6x7x1jWcqtzaQREbZg==","basePlanId":"p3m","pricingPhases":[{"priceAmountMicros":10990000,"priceCurrencyCode":"EUR","formattedPrice":"€10.99","billingPeriod":"P3M","recurrenceMode":1}],"offerTags":[]}]}, productId='moodflow.plus.3months', productType='subs', title='Moodflow Plus 3-Months (Moodflow: Mood Tracker)', productDetailsToken='AEuhp4L-X4bd3Nf-QF_povwXU3Y-DStg1oqeSq34KdjpkYYK4HdUfBGyjk07vq1yv8v-', subscriptionOfferDetails=[com.android.billingclient.api.ProductDetails$SubscriptionOfferDetails@44e18fc]}
2023-11-13 21:33:03.270 15027-15197 [Purchases] - DEBUG     com.moodpixel                        D  💰 moodflow.plus.6months - ProductDetails{jsonString='{"productId":"moodflow.plus.6months","type":"subs","title":"Moodflow Plus 6-Months (Moodflow: Mood Tracker)","name":"Moodflow Plus 6-Months","description":"Get access to Routines, up to 4 Cloud-backed images per entry, Atlas and \nmore!","localizedIn":["en-US"],"skuDetailsToken":"AEuhp4L8sXFC9syA1WawVyd8jAgG799M25nl8VKX4CWc4UB5YKT-7G-YLotJcuQsceFD","subscriptionOfferDetails":[{"offerIdToken":"AUj\/YhhAz4dJ9+1xh+t1uNnXgHVPyLiXnGpEIMJbjv1y2BJP3XVUdTfvqThJ80m62BUJxij7ahNBvgMXaeJygzG0oRZw6PRSAM3sS07bGQ==","basePlanId":"p6m","pricingPhases":[{"priceAmountMicros":17990000,"priceCurrencyCode":"EUR","formattedPrice":"€17.99","billingPeriod":"P6M","recurrenceMode":1}],"offerTags":[]}]}', parsedJson={"productId":"moodflow.plus.6months","type":"subs","title":"Moodflow Plus 6-Months (Moodflow: Mood Tracker)","name":"Moodflow Plus 6-Months","description":"Get access to Routines, up to 4 Cloud-backed images per entry, Atlas and \nmore!","localizedIn":["en-US"],"skuDetailsToken":"AEuhp4L8sXFC9syA1WawVyd8jAgG799M25nl8VKX4CWc4UB5YKT-7G-YLotJcuQsceFD","subscriptionOfferDetails":[{"offerIdToken":"AUj\/YhhAz4dJ9+1xh+t1uNnXgHVPyLiXnGpEIMJbjv1y2BJP3XVUdTfvqThJ80m62BUJxij7ahNBvgMXaeJygzG0oRZw6PRSAM3sS07bGQ==","basePlanId":"p6m","pricingPhases":[{"priceAmountMicros":17990000,"priceCurrencyCode":"EUR","formattedPrice":"€17.99","billingPeriod":"P6M","recurrenceMode":1}],"offerTags":[]}]}, productId='moodflow.plus.6months', productType='subs', title='Moodflow Plus 6-Months (Moodflow: Mood Tracker)', productDetailsToken='AEuhp4L8sXFC9syA1WawVyd8jAgG799M25nl8VKX4CWc4UB5YKT-7G-YLotJcuQsceFD', subscriptionOfferDetails=[com.android.billingclient.api.ProductDetails$SubscriptionOfferDetails@fc59b85]}
2023-11-13 21:33:03.280 15027-15198 [Purchases] - DEBUG     com.moodpixel                        D  ℹ️ Purchase of type SUBS with hash lVLcJ2jzOh5EWIf1QRnIKIGtvyU=
2023-11-13 21:33:03.280 15027-15198 [Purchases] - DEBUG     com.moodpixel                        D  ℹ️ Cleaning previously sent tokens
2023-11-13 21:33:03.280 15027-15198 [Purchases] - DEBUG     com.moodpixel                        D  ℹ️ Tokens already posted: []
2023-11-13 21:33:03.281 15027-15198 [Purchases] - DEBUG     com.moodpixel                        D  ℹ️ Saving tokens []
2023-11-13 21:33:03.281 15027-15198 [Purchases] - DEBUG     com.moodpixel                        D  ℹ️ Tokens already posted: []
2023-11-13 21:33:03.281 15027-15198 [Purchases] - DEBUG     com.moodpixel                        D  ℹ️ Requesting products from the store with identifiers: moodflow.plus.1month
2023-11-13 21:33:03.284 15027-15200 [Purchases] - DEBUG     com.moodpixel                        D  ℹ️ Purchase of type SUBS with hash lVLcJ2jzOh5EWIf1QRnIKIGtvyU=
2023-11-13 21:33:03.284 15027-15200 [Purchases] - DEBUG     com.moodpixel                        D  ℹ️ Cleaning previously sent tokens
2023-11-13 21:33:03.285 15027-15200 [Purchases] - DEBUG     com.moodpixel                        D  ℹ️ Tokens already posted: []
2023-11-13 21:33:03.285 15027-15200 [Purchases] - DEBUG     com.moodpixel                        D  ℹ️ Saving tokens []
2023-11-13 21:33:03.285 15027-15200 [Purchases] - DEBUG     com.moodpixel                        D  ℹ️ Tokens already posted: []
2023-11-13 21:33:03.285 15027-15200 [Purchases] - DEBUG     com.moodpixel                        D  ℹ️ Requesting products from the store with identifiers: moodflow.plus.1month
2023-11-13 21:33:03.300 15027-15183 [Purchases] - DEBUG     com.moodpixel                        D  ℹ️ Products request finished for moodflow.plus.1month
2023-11-13 21:33:03.301 15027-15183 [Purchases] - DEBUG     com.moodpixel                        D  💰 Retrieved productDetailsList: ProductDetails{jsonString='{"productId":"moodflow.plus.1month","type":"subs","title":"Moodflow Plus 1-Month (Moodflow: Mood Tracker)","name":"Moodflow Plus 1-Month","description":"Get access to Routines, up to 4 Cloud-backed images per entry, Atlas and \nmore!","localizedIn":["en-US"],"skuDetailsToken":"AEuhp4KGJrva5HPTcb5pOzRpfGB5rculzUx87GloslpckrwaVcu_ugXu2CihmKgjt2Uw","subscriptionOfferDetails":[{"offerIdToken":"AUj\/YhgAX5lwuf1JPrc6oEj\/fRJX107vFfPDxMvTANirj13cjIegLIxeW8lWfijPGJ678YVKvQ6YbaPyEtJ4uIwX4t9bDrl4CerzH+r3aw==","basePlanId":"p1m","pricingPhases":[{"priceAmountMicros":3990000,"priceCurrencyCode":"EUR","formattedPrice":"€3.99","billingPeriod":"P1M","recurrenceMode":1}],"offerTags":[]}]}', parsedJson={"productId":"moodflow.plus.1month","type":"subs","title":"Moodflow Plus 1-Month (Moodflow: Mood Tracker)","name":"Moodflow Plus 1-Month","description":"Get access to Routines, up to 4 Cloud-backed images per entry, Atlas and \nmore!","localizedIn":["en-US"],"skuDetailsToken":"AEuhp4KGJrva5HPTcb5pOzRpfGB5rculzUx87GloslpckrwaVcu_ugXu2CihmKgjt2Uw","subscriptionOfferDetails":[{"offerIdToken":"AUj\/YhgAX5lwuf1JPrc6oEj\/fRJX107vFfPDxMvTANirj13cjIegLIxeW8lWfijPGJ678YVKvQ6YbaPyEtJ4uIwX4t9bDrl4CerzH+r3aw==","basePlanId":"p1m","pricingPhases":[{"priceAmountMicros":3990000,"priceCurrencyCode":"EUR","formattedPrice":"€3.99","billingPeriod":"P1M","recurrenceMode":1}],"offerTags":[]}]}, productId='moodflow.plus.1month', productType='subs', title='Moodflow Plus 1-Month (Moodflow: Mood Tracker)', productDetailsToken='AEuhp4KGJrva5HPTcb5pOzRpfGB5rculzUx87GloslpckrwaVcu_ugXu2CihmKgjt2Uw', subscriptionOfferDetails=[com.android.billingclient.api.ProductDetails$SubscriptionOfferDetails@a63edda]}
2023-11-13 21:33:03.301 15027-15183 [Purchases] - DEBUG     com.moodpixel                        D  💰 moodflow.plus.1month - ProductDetails{jsonString='{"productId":"moodflow.plus.1month","type":"subs","title":"Moodflow Plus 1-Month (Moodflow: Mood Tracker)","name":"Moodflow Plus 1-Month","description":"Get access to Routines, up to 4 Cloud-backed images per entry, Atlas and \nmore!","localizedIn":["en-US"],"skuDetailsToken":"AEuhp4KGJrva5HPTcb5pOzRpfGB5rculzUx87GloslpckrwaVcu_ugXu2CihmKgjt2Uw","subscriptionOfferDetails":[{"offerIdToken":"AUj\/YhgAX5lwuf1JPrc6oEj\/fRJX107vFfPDxMvTANirj13cjIegLIxeW8lWfijPGJ678YVKvQ6YbaPyEtJ4uIwX4t9bDrl4CerzH+r3aw==","basePlanId":"p1m","pricingPhases":[{"priceAmountMicros":3990000,"priceCurrencyCode":"EUR","formattedPrice":"€3.99","billingPeriod":"P1M","recurrenceMode":1}],"offerTags":[]}]}', parsedJson={"productId":"moodflow.plus.1month","type":"subs","title":"Moodflow Plus 1-Month (Moodflow: Mood Tracker)","name":"Moodflow Plus 1-Month","description":"Get access to Routines, up to 4 Cloud-backed images per entry, Atlas and \nmore!","localizedIn":["en-US"],"skuDetailsToken":"AEuhp4KGJrva5HPTcb5pOzRpfGB5rculzUx87GloslpckrwaVcu_ugXu2CihmKgjt2Uw","subscriptionOfferDetails":[{"offerIdToken":"AUj\/YhgAX5lwuf1JPrc6oEj\/fRJX107vFfPDxMvTANirj13cjIegLIxeW8lWfijPGJ678YVKvQ6YbaPyEtJ4uIwX4t9bDrl4CerzH+r3aw==","basePlanId":"p1m","pricingPhases":[{"priceAmountMicros":3990000,"priceCurrencyCode":"EUR","formattedPrice":"€3.99","billingPeriod":"P1M","recurrenceMode":1}],"offerTags":[]}]}, productId='moodflow.plus.1month', productType='subs', title='Moodflow Plus 1-Month (Moodflow: Mood Tracker)', productDetailsToken='AEuhp4KGJrva5HPTcb5pOzRpfGB5rculzUx87GloslpckrwaVcu_ugXu2CihmKgjt2Uw', subscriptionOfferDetails=[com.android.billingclient.api.ProductDetails$SubscriptionOfferDetails@a63edda]}
2023-11-13 21:33:03.302 15027-15183 [Purchases] - DEBUG     com.moodpixel                        D  ℹ️ Found 0 unsynced attributes for App User ID: $RCAnonymousID:2a8e7301c8584e519a547706dfcdd2c8
2023-11-13 21:33:03.303 15027-15183 [Purchases] - DEBUG     com.moodpixel                        D  Same call already in progress, adding to callbacks map with key: [ojlgpkbobljljfekkpemabio.AO-J1Owr_MHE5ciFFZ0WhLh7L200-z7U_G_PhRlt34j45q7VhAt_F33JRovmt3GKYcBYk6BoXeTMk_11-LJHPlwLS5Un1zJJUQ, $RCAnonymousID:2a8e7301c8584e519a547706dfcdd2c8, true, false, {}, ReceiptInfo(productIDs='moodflow.plus.1month', offeringIdentifier=null, storeProduct=null, subscriptionOptionId=null, pricingPhases=null, price=null, currency=null, duration=null)]
2023-11-13 21:33:03.306 15027-15185 [Purchases] - DEBUG     com.moodpixel                        D  ℹ️ Products request finished for moodflow.plus.1month
2023-11-13 21:33:03.306 15027-15185 [Purchases] - DEBUG     com.moodpixel                        D  💰 Retrieved productDetailsList: ProductDetails{jsonString='{"productId":"moodflow.plus.1month","type":"subs","title":"Moodflow Plus 1-Month (Moodflow: Mood Tracker)","name":"Moodflow Plus 1-Month","description":"Get access to Routines, up to 4 Cloud-backed images per entry, Atlas and \nmore!","localizedIn":["en-US"],"skuDetailsToken":"AEuhp4KGJrva5HPTcb5pOzRpfGB5rculzUx87GloslpckrwaVcu_ugXu2CihmKgjt2Uw","subscriptionOfferDetails":[{"offerIdToken":"AUj\/YhgAX5lwuf1JPrc6oEj\/fRJX107vFfPDxMvTANirj13cjIegLIxeW8lWfijPGJ678YVKvQ6YbaPyEtJ4uIwX4t9bDrl4CerzH+r3aw==","basePlanId":"p1m","pricingPhases":[{"priceAmountMicros":3990000,"priceCurrencyCode":"EUR","formattedPrice":"€3.99","billingPeriod":"P1M","recurrenceMode":1}],"offerTags":[]}]}', parsedJson={"productId":"moodflow.plus.1month","type":"subs","title":"Moodflow Plus 1-Month (Moodflow: Mood Tracker)","name":"Moodflow Plus 1-Month","description":"Get access to Routines, up to 4 Cloud-backed images per entry, Atlas and \nmore!","localizedIn":["en-US"],"skuDetailsToken":"AEuhp4KGJrva5HPTcb5pOzRpfGB5rculzUx87GloslpckrwaVcu_ugXu2CihmKgjt2Uw","subscriptionOfferDetails":[{"offerIdToken":"AUj\/YhgAX5lwuf1JPrc6oEj\/fRJX107vFfPDxMvTANirj13cjIegLIxeW8lWfijPGJ678YVKvQ6YbaPyEtJ4uIwX4t9bDrl4CerzH+r3aw==","basePlanId":"p1m","pricingPhases":[{"priceAmountMicros":3990000,"priceCurrencyCode":"EUR","formattedPrice":"€3.99","billingPeriod":"P1M","recurrenceMode":1}],"offerTags":[]}]}, productId='moodflow.plus.1month', productType='subs', title='Moodflow Plus 1-Month (Moodflow: Mood Tracker)', productDetailsToken='AEuhp4KGJrva5HPTcb5pOzRpfGB5rculzUx87GloslpckrwaVcu_ugXu2CihmKgjt2Uw', subscriptionOfferDetails=[com.android.billingclient.api.ProductDetails$SubscriptionOfferDetails@fa0e20b]}
2023-11-13 21:33:03.306 15027-15185 [Purchases] - DEBUG     com.moodpixel                        D  💰 moodflow.plus.1month - ProductDetails{jsonString='{"productId":"moodflow.plus.1month","type":"subs","title":"Moodflow Plus 1-Month (Moodflow: Mood Tracker)","name":"Moodflow Plus 1-Month","description":"Get access to Routines, up to 4 Cloud-backed images per entry, Atlas and \nmore!","localizedIn":["en-US"],"skuDetailsToken":"AEuhp4KGJrva5HPTcb5pOzRpfGB5rculzUx87GloslpckrwaVcu_ugXu2CihmKgjt2Uw","subscriptionOfferDetails":[{"offerIdToken":"AUj\/YhgAX5lwuf1JPrc6oEj\/fRJX107vFfPDxMvTANirj13cjIegLIxeW8lWfijPGJ678YVKvQ6YbaPyEtJ4uIwX4t9bDrl4CerzH+r3aw==","basePlanId":"p1m","pricingPhases":[{"priceAmountMicros":3990000,"priceCurrencyCode":"EUR","formattedPrice":"€3.99","billingPeriod":"P1M","recurrenceMode":1}],"offerTags":[]}]}', parsedJson={"productId":"moodflow.plus.1month","type":"subs","title":"Moodflow Plus 1-Month (Moodflow: Mood Tracker)","name":"Moodflow Plus 1-Month","description":"Get access to Routines, up to 4 Cloud-backed images per entry, Atlas and \nmore!","localizedIn":["en-US"],"skuDetailsToken":"AEuhp4KGJrva5HPTcb5pOzRpfGB5rculzUx87GloslpckrwaVcu_ugXu2CihmKgjt2Uw","subscriptionOfferDetails":[{"offerIdToken":"AUj\/YhgAX5lwuf1JPrc6oEj\/fRJX107vFfPDxMvTANirj13cjIegLIxeW8lWfijPGJ678YVKvQ6YbaPyEtJ4uIwX4t9bDrl4CerzH+r3aw==","basePlanId":"p1m","pricingPhases":[{"priceAmountMicros":3990000,"priceCurrencyCode":"EUR","formattedPrice":"€3.99","billingPeriod":"P1M","recurrenceMode":1}],"offerTags":[]}]}, productId='moodflow.plus.1month', productType='subs', title='Moodflow Plus 1-Month (Moodflow: Mood Tracker)', productDetailsToken='AEuhp4KGJrva5HPTcb5pOzRpfGB5rculzUx87GloslpckrwaVcu_ugXu2CihmKgjt2Uw', subscriptionOfferDetails=[com.android.billingclient.api.ProductDetails$SubscriptionOfferDetails@fa0e20b]}
2023-11-13 21:33:03.307 15027-15185 [Purchases] - DEBUG     com.moodpixel                        D  ℹ️ Found 0 unsynced attributes for App User ID: $RCAnonymousID:2a8e7301c8584e519a547706dfcdd2c8
2023-11-13 21:33:03.308 15027-15185 [Purchases] - DEBUG     com.moodpixel                        D  Same call already in progress, adding to callbacks map with key: [ojlgpkbobljljfekkpemabio.AO-J1Owr_MHE5ciFFZ0WhLh7L200-z7U_G_PhRlt34j45q7VhAt_F33JRovmt3GKYcBYk6BoXeTMk_11-LJHPlwLS5Un1zJJUQ, $RCAnonymousID:2a8e7301c8584e519a547706dfcdd2c8, true, false, {}, ReceiptInfo(productIDs='moodflow.plus.1month', offeringIdentifier=null, storeProduct=null, subscriptionOptionId=null, pricingPhases=null, price=null, currency=null, duration=null)]
2023-11-13 21:33:03.508 15027-15173 [Purchases] - WARN      com.moodpixel                        W  ⚠️ Unable to start a network connection due to a network configuration issue: https://api.revenuecat.com/v1/receipts
2023-11-13 21:33:03.509 15027-15173 [Purchases] - DEBUG     com.moodpixel                        D  API request started: POST /receipts
2023-11-13 21:33:03.510 15027-15173 [Purchases] - DEBUG     com.moodpixel                        D  API request completed with status: POST /receipts 521
2023-11-13 21:33:03.514 15027-15173 [Purchases] - ERROR     com.moodpixel                        E  🤖‼️ PurchasesError(code=InvalidCredentialsError, underlyingErrorMessage=Invalid Play Store credentials., message='There was a credentials issue. Check the underlying error for more details.')
2023-11-13 21:33:03.516 15027-15173 [Purchases] - ERROR     com.moodpixel                        E  Error computing offline CustomerInfo. Will return original error. Creation error: PurchasesError(code=CustomerInfoError, underlyingErrorMessage=Product entitlement mapping is required for offline entitlements. Skipping offline customer info calculation., message='There was a problem related to the customer info.')
2023-11-13 21:33:03.520 15027-15173 [Purchases] - ERROR     com.moodpixel                        E  🤖‼️ PurchasesError(code=InvalidCredentialsError, underlyingErrorMessage=Invalid Play Store credentials., message='There was a credentials issue. Check the underlying error for more details.')
2023-11-13 21:33:03.521 15027-15173 [Purchases] - ERROR     com.moodpixel                        E  Error computing offline CustomerInfo. Will return original error. Creation error: PurchasesError(code=CustomerInfoError, underlyingErrorMessage=Product entitlement mapping is required for offline entitlements. Skipping offline customer info calculation., message='There was a problem related to the customer info.')
2023-11-13 21:33:03.521 15027-15173 [Purchases] - ERROR     com.moodpixel                        E  🤖‼️ PurchasesError(code=InvalidCredentialsError, underlyingErrorMessage=Invalid Play Store credentials., message='There was a credentials issue. Check the underlying error for more details.')
2023-11-13 21:33:03.521 15027-15173 [Purchases] - ERROR     com.moodpixel                        E  Error computing offline CustomerInfo. Will return original error. Creation error: PurchasesError(code=CustomerInfoError, underlyingErrorMessage=Product entitlement mapping is required for offline entitlements. Skipping offline customer info calculation., message='There was a problem related to the customer info.')
2023-11-13 21:33:03.722 15027-15173 [Purchases] - DEBUG     com.moodpixel                        D  API request started: GET /subscribers/%24RCAnonymousID%3A2a8e7301c8584e519a547706dfcdd2c8
2023-11-13 21:33:03.725 15027-15173 [Purchases] - DEBUG     com.moodpixel                        D  API request completed with status: GET /subscribers/%24RCAnonymousID%3A2a8e7301c8584e519a547706dfcdd2c8 201
2023-11-13 21:33:03.741 15027-15173 [Purchases] - DEBUG     com.moodpixel                        D  😻 CustomerInfo updated from network.
2023-11-13 21:33:03.742 15027-15173 [Purchases] - DEBUG     com.moodpixel                        D  ℹ️ Sending latest CustomerInfo to listener.
2023-11-13 21:33:04.355 15027-15148 ReactNativeJS           com.moodpixel                        I  '✨ ------- Purchases.addCustomerInfoUpdateListener - purchases status ------- ✨\n{\n    "isPlus": false,\n    "updatedCustomerInfo": {\n        "nonSubscriptionTransactions": [],\n        "originalPurchaseDate": null,\n        "allPurchaseDatesMillis": {},\n        "managementURL": null,\n        "allPurchaseDates": {},\n        "originalAppUserId": "$RCAnonymousID:2a8e7301c8584e519a547706dfcdd2c8",\n        "allExpirationDates": {},\n        "firstSeen": "2023-11-13T20:33:02.000Z",\n        "originalPurchaseDateMillis": null,\n        "allExpirationDatesMillis": {},\n        "requestDateMillis": 1699907582868,\n        "latestExpirationDate": null,\n        "firstSeenMillis": 1699907582000,\n        "allPurchasedProductIdentifiers": [],\n        "requestDate": "2023-11-13T20:33:02.868Z",\n        "latestExpirationDateMillis": null,\n        "originalApplicationVersion": null,\n        "activeSubscriptions": [],\n        "entitlements": {\n            "active": {},\n            "all": {}\n        }\n    }\n}', '\n', ' '
2023-11-13 21:33:04.355 15027-15148 ReactNativeJS           com.moodpixel                        I  '✨ ------- Purchases.addCustomerInfoUpdateListener - You are a FREE user! ------- ✨\n', '\n', ' '
2023-11-13 21:33:09.010 15027-15173 [Purchases] - DEBUG     com.moodpixel                        D  API request started: GET /product_entitlement_mapping
2023-11-13 21:33:09.011 15027-15173 [Purchases] - DEBUG     com.moodpixel                        D  API request completed with status: GET /product_entitlement_mapping 200
2023-11-13 21:33:09.014 15027-15173 [Purchases] - DEBUG     com.moodpixel                        D  Successfully updated product entitlement mappings.
2023-11-13 21:33:27.035 15027-15149 [Purchases] - DEBUG     com.moodpixel                        D  👤 Logging in from $RCAnonymousID:2a8e7301c8584e519a547706dfcdd2c8 -> vVK29G9nexY1x2XxVcszozM29K62
2023-11-13 21:33:27.036 15027-15149 [Purchases] - DEBUG     com.moodpixel                        D  ℹ️ No subscriber attributes to synchronize.
2023-11-13 21:33:27.042 15027-15149 [Purchases] - DEBUG     com.moodpixel                        D  👤 Logging in from $RCAnonymousID:2a8e7301c8584e519a547706dfcdd2c8 -> vVK29G9nexY1x2XxVcszozM29K62
2023-11-13 21:33:27.042 15027-15149 [Purchases] - DEBUG     com.moodpixel                        D  ℹ️ No subscriber attributes to synchronize.
2023-11-13 21:33:27.042 15027-15149 [Purchases] - DEBUG     com.moodpixel                        D  Same call already in progress, adding to callbacks map with key: [$RCAnonymousID:2a8e7301c8584e519a547706dfcdd2c8, vVK29G9nexY1x2XxVcszozM29K62]
2023-11-13 21:33:27.169 15027-15173 [Purchases] - DEBUG     com.moodpixel                        D  API request started: POST /subscribers/identify
2023-11-13 21:33:27.171 15027-15173 [Purchases] - DEBUG     com.moodpixel                        D  API request completed with status: POST /subscribers/identify 200
2023-11-13 21:33:27.177 15027-15173 [Purchases] - DEBUG     com.moodpixel                        D  👤 Logged in successfully as vVK29G9nexY1x2XxVcszozM29K62. Created: false
2023-11-13 21:33:27.177 15027-15173 [Purchases] - DEBUG     com.moodpixel                        D  ℹ️ Found 0 unsynced attributes for App User ID: $RCAnonymousID:2a8e7301c8584e519a547706dfcdd2c8
2023-11-13 21:33:27.178 15027-15173 [Purchases] - DEBUG     com.moodpixel                        D  ℹ️ Deleting subscriber attributes for $RCAnonymousID:2a8e7301c8584e519a547706dfcdd2c8 from cache
2023-11-13 21:33:27.180 15027-15173 [Purchases] - DEBUG     com.moodpixel                        D  ℹ️ Found 0 unsynced attributes for App User ID: $RCAnonymousID:2a8e7301c8584e519a547706dfcdd2c8
2023-11-13 21:33:27.182 15027-15173 [Purchases] - DEBUG     com.moodpixel                        D  👤 Logged in successfully as vVK29G9nexY1x2XxVcszozM29K62. Created: false
2023-11-13 21:33:27.182 15027-15173 [Purchases] - DEBUG     com.moodpixel                        D  ℹ️ Found 0 unsynced attributes for App User ID: $RCAnonymousID:2a8e7301c8584e519a547706dfcdd2c8
2023-11-13 21:33:27.183 15027-15173 [Purchases] - DEBUG     com.moodpixel                        D  ℹ️ Deleting subscriber attributes for $RCAnonymousID:2a8e7301c8584e519a547706dfcdd2c8 from cache
2023-11-13 21:33:27.183 15027-15027 [Purchases] - DEBUG     com.moodpixel                        D  ℹ️ CustomerInfo updated, sending to listener.
2023-11-13 21:33:27.185 15027-15173 [Purchases] - DEBUG     com.moodpixel                        D  ℹ️ Found 0 unsynced attributes for App User ID: $RCAnonymousID:2a8e7301c8584e519a547706dfcdd2c8
2023-11-13 21:33:27.187 15027-15148 ReactNativeJS           com.moodpixel                        I  '✨ ------- Purchases.addCustomerInfoUpdateListener - purchases status ------- ✨\n{\n    "isPlus": false,\n    "updatedCustomerInfo": {\n        "nonSubscriptionTransactions": [],\n        "originalPurchaseDate": null,\n        "allPurchaseDatesMillis": {},\n        "managementURL": null,\n        "allPurchaseDates": {},\n        "originalAppUserId": "$RCAnonymousID:c6c2514232f9429ab656a49c66100e1d",\n        "allExpirationDates": {},\n        "firstSeen": "2023-11-13T18:28:47.000Z",\n        "originalPurchaseDateMillis": null,\n        "allExpirationDatesMillis": {},\n        "requestDateMillis": 1699907606343,\n        "latestExpirationDate": null,\n        "firstSeenMillis": 1699900127000,\n        "allPurchasedProductIdentifiers": [],\n        "requestDate": "2023-11-13T20:33:26.343Z",\n        "latestExpirationDateMillis": null,\n        "originalApplicationVersion": null,\n        "activeSubscriptions": [],\n        "entitlements": {\n            "active": {},\n            "all": {}\n        }\n    }\n}', '\n', ' '
2023-11-13 21:33:27.188 15027-15148 ReactNativeJS           com.moodpixel                        I  '✨ ------- Purchases.addCustomerInfoUpdateListener - You are a FREE user! ------- ✨\n', '\n', ' '
2023-11-13 21:33:27.197 15027-15173 [Purchases] - DEBUG     com.moodpixel                        D  Same call already in progress, adding to callbacks map with key: /subscribers/vVK29G9nexY1x2XxVcszozM29K62/offerings
2023-11-13 21:33:27.353 15027-15173 [Purchases] - DEBUG     com.moodpixel                        D  API request started: GET /subscribers/vVK29G9nexY1x2XxVcszozM29K62/offerings
2023-11-13 21:33:27.353 15027-15173 [Purchases] - DEBUG     com.moodpixel                        D  API request completed with status: GET /subscribers/vVK29G9nexY1x2XxVcszozM29K62/offerings 200
2023-11-13 21:33:27.357 15027-15173 [Purchases] - DEBUG     com.moodpixel                        D  ℹ️ Requesting products from the store with identifiers: moodflow.plus.1month, moodflow.plus.3months, moodflow.plus.6months
2023-11-13 21:33:27.358 15027-15173 [Purchases] - DEBUG     com.moodpixel                        D  ℹ️ Requesting products from the store with identifiers: moodflow.plus.1month, moodflow.plus.3months, moodflow.plus.6months
2023-11-13 21:33:27.397 15027-15186 [Purchases] - DEBUG     com.moodpixel                        D  ℹ️ Products request finished for moodflow.plus.1month, moodflow.plus.3months, moodflow.plus.6months
2023-11-13 21:33:27.403 15027-15199 [Purchases] - DEBUG     com.moodpixel                        D  ℹ️ Products request finished for moodflow.plus.1month, moodflow.plus.3months, moodflow.plus.6months
2023-11-13 21:33:27.403 15027-15199 [Purchases] - DEBUG     com.moodpixel                        D  💰 Retrieved productDetailsList: ProductDetails{jsonString='{"productId":"moodflow.plus.1month","type":"subs","title":"Moodflow Plus 1-Month (Moodflow: Mood Tracker)","name":"Moodflow Plus 1-Month","description":"Get access to Routines, up to 4 Cloud-backed images per entry, Atlas and \nmore!","localizedIn":["en-US"],"skuDetailsToken":"AEuhp4KGJrva5HPTcb5pOzRpfGB5rculzUx87GloslpckrwaVcu_ugXu2CihmKgjt2Uw","subscriptionOfferDetails":[{"offerIdToken":"AUj\/YhgAX5lwuf1JPrc6oEj\/fRJX107vFfPDxMvTANirj13cjIegLIxeW8lWfijPGJ678YVKvQ6YbaPyEtJ4uIwX4t9bDrl4CerzH+r3aw==","basePlanId":"p1m","pricingPhases":[{"priceAmountMicros":3990000,"priceCurrencyCode":"EUR","formattedPrice":"€3.99","billingPeriod":"P1M","recurrenceMode":1}],"offerTags":[]}]}', parsedJson={"productId":"moodflow.plus.1month","type":"subs","title":"Moodflow Plus 1-Month (Moodflow: Mood Tracker)","name":"Moodflow Plus 1-Month","description":"Get access to Routines, up to 4 Cloud-backed images per entry, Atlas and \nmore!","localizedIn":["en-US"],"skuDetailsToken":"AEuhp4KGJrva5HPTcb5pOzRpfGB5rculzUx87GloslpckrwaVcu_ugXu2CihmKgjt2Uw","subscriptionOfferDetails":[{"offerIdToken":"AUj\/YhgAX5lwuf1JPrc6oEj\/fRJX107vFfPDxMvTANirj13cjIegLIxeW8lWfijPGJ678YVKvQ6YbaPyEtJ4uIwX4t9bDrl4CerzH+r3aw==","basePlanId":"p1m","pricingPhases":[{"priceAmountMicros":3990000,"priceCurrencyCode":"EUR","formattedPrice":"€3.99","billingPeriod":"P1M","recurrenceMode":1}],"offerTags":[]}]}, productId='moodflow.plus.1month', productType='subs', title='Moodflow Plus 1-Month (Moodflow: Mood Tracker)', productDetailsToken='AEuhp4KGJrva5HPTcb5pOzRpfGB5rculzUx87GloslpckrwaVcu_ugXu2CihmKgjt2Uw', subscriptionOfferDetails=[com.android.billingclient.api.ProductDetails$SubscriptionOfferDetails@c4514af]}, ProductDetails{jsonString='{"productId":"moodflow.plus.3months","type":"subs","title":"Moodflow Plus 3-Months (Moodflow: Mood Tracker)","name":"Moodflow Plus 3-Months","description":"Get access to Routines, up to 4 Cloud-backed images per entry, Atlas and \nmore!","localizedIn":["en-US"],"skuDetailsToken":"AEuhp4L-X4bd3Nf-QF_povwXU3Y-DStg1oqeSq34KdjpkYYK4HdUfBGyjk07vq1yv8v-","subscriptionOfferDetails":[{"offerIdToken":"AUj\/Yhh31n7JrHDeUzlUXJDshNpfv3YXpH1EmDqRtnv0bBkP5VaOr\/jrc4l3DaCdQ88ZlKvC3ndYIlXBIQ1BwQlU6x7x1jWcqtzaQREbZg==","basePlanId":"p3m","pricingPhases":[{"priceAmountMicros":10990000,"priceCurrencyCode":"EUR","formattedPrice":"€10.99","billingPeriod":"P3M","recurrenceMode":1}],"offerTags":[]}]}', parsedJson={"productId":"moodflow.plus.3months","type":"subs","title":"Moodflow Plus 3-Months (Moodflow: Mood Tracker)","name":"Moodflow Plus 3-Months","description":"Get access to Routines, up to 4 Cloud-backed images per entry, Atlas and \nmore!","localizedIn":["en-US"],"skuDetailsToken":"AEuhp4L-X4bd3Nf-QF_povwXU3Y-DStg1oqeSq34KdjpkYYK4HdUfBGyjk07vq1yv8v-","subscriptionOfferDetails":[{"offerIdToken":"AUj\/Yhh31n7JrHDeUzlUXJDshNpfv3YXpH1EmDqRtnv0bBkP5VaOr\/jrc4l3DaCdQ88ZlKvC3ndYIlXBIQ1BwQlU6x7x1jWcqtzaQREbZg==","basePlanId":"p3m","pricingPhases":[{"priceAmountMicros":10990000,"priceCurrencyCode":"EUR","formattedPrice":"€10.99","billingPeriod":"P3M","recurrenceMode":1}],"offerTags":[]}]}, productId='moodflow.plus.3months', productType='subs', title='Moodflow Plus 3-Months (Moodflow: Mood Tracker)', productDetailsToken='AEuhp4L-X4bd3Nf-QF_povwXU3Y-DStg1oqeSq34KdjpkYYK4HdUfBGyjk07vq1yv8v-', subscriptionOfferDetails=[com.android.billingclient.api.ProductDetails$SubscriptionOfferDetails@41150bc]}, ProductDetails{jsonString='{"productId":"moodflow.plus.6months","type":"subs","title":"Moodflow Plus 6-Months (Moodflow: Mood Tracker)","name":"Moodflow Plus 6-Months","description":"Get access to Routines, up to 4 Cloud-backed images per entry, Atlas and \nmore!","localizedIn":["en-US"],"skuDetailsToken":"AEuhp4L8sXFC9syA1WawVyd8jAgG799M25nl8VKX4CWc4UB5YKT-7G-YLotJcuQsceFD","subscriptionOfferDetails":[{"offerIdToken":"AUj\/YhhAz4dJ9+1xh+t1uNnXgHVPyLiXnGpEIMJbjv1y2BJP3XVUdTfvqThJ80m62BUJxij7ahNBvgMXaeJygzG0oRZw6PRSAM3sS07bGQ==","basePlanId":"p6m","pricingPh
2023-11-13 21:33:27.404 15027-15199 [Purchases] - DEBUG     com.moodpixel                        D  💰 moodflow.plus.1month - ProductDetails{jsonString='{"productId":"moodflow.plus.1month","type":"subs","title":"Moodflow Plus 1-Month (Moodflow: Mood Tracker)","name":"Moodflow Plus 1-Month","description":"Get access to Routines, up to 4 Cloud-backed images per entry, Atlas and \nmore!","localizedIn":["en-US"],"skuDetailsToken":"AEuhp4KGJrva5HPTcb5pOzRpfGB5rculzUx87GloslpckrwaVcu_ugXu2CihmKgjt2Uw","subscriptionOfferDetails":[{"offerIdToken":"AUj\/YhgAX5lwuf1JPrc6oEj\/fRJX107vFfPDxMvTANirj13cjIegLIxeW8lWfijPGJ678YVKvQ6YbaPyEtJ4uIwX4t9bDrl4CerzH+r3aw==","basePlanId":"p1m","pricingPhases":[{"priceAmountMicros":3990000,"priceCurrencyCode":"EUR","formattedPrice":"€3.99","billingPeriod":"P1M","recurrenceMode":1}],"offerTags":[]}]}', parsedJson={"productId":"moodflow.plus.1month","type":"subs","title":"Moodflow Plus 1-Month (Moodflow: Mood Tracker)","name":"Moodflow Plus 1-Month","description":"Get access to Routines, up to 4 Cloud-backed images per entry, Atlas and \nmore!","localizedIn":["en-US"],"skuDetailsToken":"AEuhp4KGJrva5HPTcb5pOzRpfGB5rculzUx87GloslpckrwaVcu_ugXu2CihmKgjt2Uw","subscriptionOfferDetails":[{"offerIdToken":"AUj\/YhgAX5lwuf1JPrc6oEj\/fRJX107vFfPDxMvTANirj13cjIegLIxeW8lWfijPGJ678YVKvQ6YbaPyEtJ4uIwX4t9bDrl4CerzH+r3aw==","basePlanId":"p1m","pricingPhases":[{"priceAmountMicros":3990000,"priceCurrencyCode":"EUR","formattedPrice":"€3.99","billingPeriod":"P1M","recurrenceMode":1}],"offerTags":[]}]}, productId='moodflow.plus.1month', productType='subs', title='Moodflow Plus 1-Month (Moodflow: Mood Tracker)', productDetailsToken='AEuhp4KGJrva5HPTcb5pOzRpfGB5rculzUx87GloslpckrwaVcu_ugXu2CihmKgjt2Uw', subscriptionOfferDetails=[com.android.billingclient.api.ProductDetails$SubscriptionOfferDetails@c4514af]}
2023-11-13 21:33:27.404 15027-15199 [Purchases] - DEBUG     com.moodpixel                        D  💰 moodflow.plus.3months - ProductDetails{jsonString='{"productId":"moodflow.plus.3months","type":"subs","title":"Moodflow Plus 3-Months (Moodflow: Mood Tracker)","name":"Moodflow Plus 3-Months","description":"Get access to Routines, up to 4 Cloud-backed images per entry, Atlas and \nmore!","localizedIn":["en-US"],"skuDetailsToken":"AEuhp4L-X4bd3Nf-QF_povwXU3Y-DStg1oqeSq34KdjpkYYK4HdUfBGyjk07vq1yv8v-","subscriptionOfferDetails":[{"offerIdToken":"AUj\/Yhh31n7JrHDeUzlUXJDshNpfv3YXpH1EmDqRtnv0bBkP5VaOr\/jrc4l3DaCdQ88ZlKvC3ndYIlXBIQ1BwQlU6x7x1jWcqtzaQREbZg==","basePlanId":"p3m","pricingPhases":[{"priceAmountMicros":10990000,"priceCurrencyCode":"EUR","formattedPrice":"€10.99","billingPeriod":"P3M","recurrenceMode":1}],"offerTags":[]}]}', parsedJson={"productId":"moodflow.plus.3months","type":"subs","title":"Moodflow Plus 3-Months (Moodflow: Mood Tracker)","name":"Moodflow Plus 3-Months","description":"Get access to Routines, up to 4 Cloud-backed images per entry, Atlas and \nmore!","localizedIn":["en-US"],"skuDetailsToken":"AEuhp4L-X4bd3Nf-QF_povwXU3Y-DStg1oqeSq34KdjpkYYK4HdUfBGyjk07vq1yv8v-","subscriptionOfferDetails":[{"offerIdToken":"AUj\/Yhh31n7JrHDeUzlUXJDshNpfv3YXpH1EmDqRtnv0bBkP5VaOr\/jrc4l3DaCdQ88ZlKvC3ndYIlXBIQ1BwQlU6x7x1jWcqtzaQREbZg==","basePlanId":"p3m","pricingPhases":[{"priceAmountMicros":10990000,"priceCurrencyCode":"EUR","formattedPrice":"€10.99","billingPeriod":"P3M","recurrenceMode":1}],"offerTags":[]}]}, productId='moodflow.plus.3months', productType='subs', title='Moodflow Plus 3-Months (Moodflow: Mood Tracker)', productDetailsToken='AEuhp4L-X4bd3Nf-QF_povwXU3Y-DStg1oqeSq34KdjpkYYK4HdUfBGyjk07vq1yv8v-', subscriptionOfferDetails=[com.android.billingclient.api.ProductDetails$SubscriptionOfferDetails@41150bc]}
2023-11-13 21:33:27.404 15027-15199 [Purchases] - DEBUG     com.moodpixel                        D  💰 moodflow.plus.6months - ProductDetails{jsonString='{"productId":"moodflow.plus.6months","type":"subs","title":"Moodflow Plus 6-Months (Moodflow: Mood Tracker)","name":"Moodflow Plus 6-Months","description":"Get access to Routines, up to 4 Cloud-backed images per entry, Atlas and \nmore!","localizedIn":["en-US"],"skuDetailsToken":"AEuhp4L8sXFC9syA1WawVyd8jAgG799M25nl8VKX4CWc4UB5YKT-7G-YLotJcuQsceFD","subscriptionOfferDetails":[{"offerIdToken":"AUj\/YhhAz4dJ9+1xh+t1uNnXgHVPyLiXnGpEIMJbjv1y2BJP3XVUdTfvqThJ80m62BUJxij7ahNBvgMXaeJygzG0oRZw6PRSAM3sS07bGQ==","basePlanId":"p6m","pricingPhases":[{"priceAmountMicros":17990000,"priceCurrencyCode":"EUR","formattedPrice":"€17.99","billingPeriod":"P6M","recurrenceMode":1}],"offerTags":[]}]}', parsedJson={"productId":"moodflow.plus.6months","type":"subs","title":"Moodflow Plus 6-Months (Moodflow: Mood Tracker)","name":"Moodflow Plus 6-Months","description":"Get access to Routines, up to 4 Cloud-backed images per entry, Atlas and \nmore!","localizedIn":["en-US"],"skuDetailsToken":"AEuhp4L8sXFC9syA1WawVyd8jAgG799M25nl8VKX4CWc4UB5YKT-7G-YLotJcuQsceFD","subscriptionOfferDetails":[{"offerIdToken":"AUj\/YhhAz4dJ9+1xh+t1uNnXgHVPyLiXnGpEIMJbjv1y2BJP3XVUdTfvqThJ80m62BUJxij7ahNBvgMXaeJygzG0oRZw6PRSAM3sS07bGQ==","basePlanId":"p6m","pricingPhases":[{"priceAmountMicros":17990000,"priceCurrencyCode":"EUR","formattedPrice":"€17.99","billingPeriod":"P6M","recurrenceMode":1}],"offerTags":[]}]}, productId='moodflow.plus.6months', productType='subs', title='Moodflow Plus 6-Months (Moodflow: Mood Tracker)', productDetailsToken='AEuhp4L8sXFC9syA1WawVyd8jAgG799M25nl8VKX4CWc4UB5YKT-7G-YLotJcuQsceFD', subscriptionOfferDetails=[com.android.billingclient.api.ProductDetails$SubscriptionOfferDetails@f60d845]}
2023-11-13 21:33:27.405 15027-15186 [Purchases] - DEBUG     com.moodpixel                        D  💰 Retrieved productDetailsList: ProductDetails{jsonString='{"productId":"moodflow.plus.1month","type":"subs","title":"Moodflow Plus 1-Month (Moodflow: Mood Tracker)","name":"Moodflow Plus 1-Month","description":"Get access to Routines, up to 4 Cloud-backed images per entry, Atlas and \nmore!","localizedIn":["en-US"],"skuDetailsToken":"AEuhp4KGJrva5HPTcb5pOzRpfGB5rculzUx87GloslpckrwaVcu_ugXu2CihmKgjt2Uw","subscriptionOfferDetails":[{"offerIdToken":"AUj\/YhgAX5lwuf1JPrc6oEj\/fRJX107vFfPDxMvTANirj13cjIegLIxeW8lWfijPGJ678YVKvQ6YbaPyEtJ4uIwX4t9bDrl4CerzH+r3aw==","basePlanId":"p1m","pricingPhases":[{"priceAmountMicros":3990000,"priceCurrencyCode":"EUR","formattedPrice":"€3.99","billingPeriod":"P1M","recurrenceMode":1}],"offerTags":[]}]}', parsedJson={"productId":"moodflow.plus.1month","type":"subs","title":"Moodflow Plus 1-Month (Moodflow: Mood Tracker)","name":"Moodflow Plus 1-Month","description":"Get access to Routines, up to 4 Cloud-backed images per entry, Atlas and \nmore!","localizedIn":["en-US"],"skuDetailsToken":"AEuhp4KGJrva5HPTcb5pOzRpfGB5rculzUx87GloslpckrwaVcu_ugXu2CihmKgjt2Uw","subscriptionOfferDetails":[{"offerIdToken":"AUj\/YhgAX5lwuf1JPrc6oEj\/fRJX107vFfPDxMvTANirj13cjIegLIxeW8lWfijPGJ678YVKvQ6YbaPyEtJ4uIwX4t9bDrl4CerzH+r3aw==","basePlanId":"p1m","pricingPhases":[{"priceAmountMicros":3990000,"priceCurrencyCode":"EUR","formattedPrice":"€3.99","billingPeriod":"P1M","recurrenceMode":1}],"offerTags":[]}]}, productId='moodflow.plus.1month', productType='subs', title='Moodflow Plus 1-Month (Moodflow: Mood Tracker)', productDetailsToken='AEuhp4KGJrva5HPTcb5pOzRpfGB5rculzUx87GloslpckrwaVcu_ugXu2CihmKgjt2Uw', subscriptionOfferDetails=[com.android.billingclient.api.ProductDetails$SubscriptionOfferDetails@79f0b90]}, ProductDetails{jsonString='{"productId":"moodflow.plus.3months","type":"subs","title":"Moodflow Plus 3-Months (Moodflow: Mood Tracker)","name":"Moodflow Plus 3-Months","description":"Get access to Routines, up to 4 Cloud-backed images per entry, Atlas and \nmore!","localizedIn":["en-US"],"skuDetailsToken":"AEuhp4L-X4bd3Nf-QF_povwXU3Y-DStg1oqeSq34KdjpkYYK4HdUfBGyjk07vq1yv8v-","subscriptionOfferDetails":[{"offerIdToken":"AUj\/Yhh31n7JrHDeUzlUXJDshNpfv3YXpH1EmDqRtnv0bBkP5VaOr\/jrc4l3DaCdQ88ZlKvC3ndYIlXBIQ1BwQlU6x7x1jWcqtzaQREbZg==","basePlanId":"p3m","pricingPhases":[{"priceAmountMicros":10990000,"priceCurrencyCode":"EUR","formattedPrice":"€10.99","billingPeriod":"P3M","recurrenceMode":1}],"offerTags":[]}]}', parsedJson={"productId":"moodflow.plus.3months","type":"subs","title":"Moodflow Plus 3-Months (Moodflow: Mood Tracker)","name":"Moodflow Plus 3-Months","description":"Get access to Routines, up to 4 Cloud-backed images per entry, Atlas and \nmore!","localizedIn":["en-US"],"skuDetailsToken":"AEuhp4L-X4bd3Nf-QF_povwXU3Y-DStg1oqeSq34KdjpkYYK4HdUfBGyjk07vq1yv8v-","subscriptionOfferDetails":[{"offerIdToken":"AUj\/Yhh31n7JrHDeUzlUXJDshNpfv3YXpH1EmDqRtnv0bBkP5VaOr\/jrc4l3DaCdQ88ZlKvC3ndYIlXBIQ1BwQlU6x7x1jWcqtzaQREbZg==","basePlanId":"p3m","pricingPhases":[{"priceAmountMicros":10990000,"priceCurrencyCode":"EUR","formattedPrice":"€10.99","billingPeriod":"P3M","recurrenceMode":1}],"offerTags":[]}]}, productId='moodflow.plus.3months', productType='subs', title='Moodflow Plus 3-Months (Moodflow: Mood Tracker)', productDetailsToken='AEuhp4L-X4bd3Nf-QF_povwXU3Y-DStg1oqeSq34KdjpkYYK4HdUfBGyjk07vq1yv8v-', subscriptionOfferDetails=[com.android.billingclient.api.ProductDetails$SubscriptionOfferDetails@59dfc89]}, ProductDetails{jsonString='{"productId":"moodflow.plus.6months","type":"subs","title":"Moodflow Plus 6-Months (Moodflow: Mood Tracker)","name":"Moodflow Plus 6-Months","description":"Get access to Routines, up to 4 Cloud-backed images per entry, Atlas and \nmore!","localizedIn":["en-US"],"skuDetailsToken":"AEuhp4L8sXFC9syA1WawVyd8jAgG799M25nl8VKX4CWc4UB5YKT-7G-YLotJcuQsceFD","subscriptionOfferDetails":[{"offerIdToken":"AUj\/YhhAz4dJ9+1xh+t1uNnXgHVPyLiXnGpEIMJbjv1y2BJP3XVUdTfvqThJ80m62BUJxij7ahNBvgMXaeJygzG0oRZw6PRSAM3sS07bGQ==","basePlanId":"p6m","pricingPh
2023-11-13 21:33:27.406 15027-15186 [Purchases] - DEBUG     com.moodpixel                        D  💰 moodflow.plus.1month - ProductDetails{jsonString='{"productId":"moodflow.plus.1month","type":"subs","title":"Moodflow Plus 1-Month (Moodflow: Mood Tracker)","name":"Moodflow Plus 1-Month","description":"Get access to Routines, up to 4 Cloud-backed images per entry, Atlas and \nmore!","localizedIn":["en-US"],"skuDetailsToken":"AEuhp4KGJrva5HPTcb5pOzRpfGB5rculzUx87GloslpckrwaVcu_ugXu2CihmKgjt2Uw","subscriptionOfferDetails":[{"offerIdToken":"AUj\/YhgAX5lwuf1JPrc6oEj\/fRJX107vFfPDxMvTANirj13cjIegLIxeW8lWfijPGJ678YVKvQ6YbaPyEtJ4uIwX4t9bDrl4CerzH+r3aw==","basePlanId":"p1m","pricingPhases":[{"priceAmountMicros":3990000,"priceCurrencyCode":"EUR","formattedPrice":"€3.99","billingPeriod":"P1M","recurrenceMode":1}],"offerTags":[]}]}', parsedJson={"productId":"moodflow.plus.1month","type":"subs","title":"Moodflow Plus 1-Month (Moodflow: Mood Tracker)","name":"Moodflow Plus 1-Month","description":"Get access to Routines, up to 4 Cloud-backed images per entry, Atlas and \nmore!","localizedIn":["en-US"],"skuDetailsToken":"AEuhp4KGJrva5HPTcb5pOzRpfGB5rculzUx87GloslpckrwaVcu_ugXu2CihmKgjt2Uw","subscriptionOfferDetails":[{"offerIdToken":"AUj\/YhgAX5lwuf1JPrc6oEj\/fRJX107vFfPDxMvTANirj13cjIegLIxeW8lWfijPGJ678YVKvQ6YbaPyEtJ4uIwX4t9bDrl4CerzH+r3aw==","basePlanId":"p1m","pricingPhases":[{"priceAmountMicros":3990000,"priceCurrencyCode":"EUR","formattedPrice":"€3.99","billingPeriod":"P1M","recurrenceMode":1}],"offerTags":[]}]}, productId='moodflow.plus.1month', productType='subs', title='Moodflow Plus 1-Month (Moodflow: Mood Tracker)', productDetailsToken='AEuhp4KGJrva5HPTcb5pOzRpfGB5rculzUx87GloslpckrwaVcu_ugXu2CihmKgjt2Uw', subscriptionOfferDetails=[com.android.billingclient.api.ProductDetails$SubscriptionOfferDetails@79f0b90]}
2023-11-13 21:33:27.407 15027-15186 [Purchases] - DEBUG     com.moodpixel                        D  💰 moodflow.plus.3months - ProductDetails{jsonString='{"productId":"moodflow.plus.3months","type":"subs","title":"Moodflow Plus 3-Months (Moodflow: Mood Tracker)","name":"Moodflow Plus 3-Months","description":"Get access to Routines, up to 4 Cloud-backed images per entry, Atlas and \nmore!","localizedIn":["en-US"],"skuDetailsToken":"AEuhp4L-X4bd3Nf-QF_povwXU3Y-DStg1oqeSq34KdjpkYYK4HdUfBGyjk07vq1yv8v-","subscriptionOfferDetails":[{"offerIdToken":"AUj\/Yhh31n7JrHDeUzlUXJDshNpfv3YXpH1EmDqRtnv0bBkP5VaOr\/jrc4l3DaCdQ88ZlKvC3ndYIlXBIQ1BwQlU6x7x1jWcqtzaQREbZg==","basePlanId":"p3m","pricingPhases":[{"priceAmountMicros":10990000,"priceCurrencyCode":"EUR","formattedPrice":"€10.99","billingPeriod":"P3M","recurrenceMode":1}],"offerTags":[]}]}', parsedJson={"productId":"moodflow.plus.3months","type":"subs","title":"Moodflow Plus 3-Months (Moodflow: Mood Tracker)","name":"Moodflow Plus 3-Months","description":"Get access to Routines, up to 4 Cloud-backed images per entry, Atlas and \nmore!","localizedIn":["en-US"],"skuDetailsToken":"AEuhp4L-X4bd3Nf-QF_povwXU3Y-DStg1oqeSq34KdjpkYYK4HdUfBGyjk07vq1yv8v-","subscriptionOfferDetails":[{"offerIdToken":"AUj\/Yhh31n7JrHDeUzlUXJDshNpfv3YXpH1EmDqRtnv0bBkP5VaOr\/jrc4l3DaCdQ88ZlKvC3ndYIlXBIQ1BwQlU6x7x1jWcqtzaQREbZg==","basePlanId":"p3m","pricingPhases":[{"priceAmountMicros":10990000,"priceCurrencyCode":"EUR","formattedPrice":"€10.99","billingPeriod":"P3M","recurrenceMode":1}],"offerTags":[]}]}, productId='moodflow.plus.3months', productType='subs', title='Moodflow Plus 3-Months (Moodflow: Mood Tracker)', productDetailsToken='AEuhp4L-X4bd3Nf-QF_povwXU3Y-DStg1oqeSq34KdjpkYYK4HdUfBGyjk07vq1yv8v-', subscriptionOfferDetails=[com.android.billingclient.api.ProductDetails$SubscriptionOfferDetails@59dfc89]}
2023-11-13 21:33:27.408 15027-15186 [Purchases] - DEBUG     com.moodpixel                        D  💰 moodflow.plus.6months - ProductDetails{jsonString='{"productId":"moodflow.plus.6months","type":"subs","title":"Moodflow Plus 6-Months (Moodflow: Mood Tracker)","name":"Moodflow Plus 6-Months","description":"Get access to Routines, up to 4 Cloud-backed images per entry, Atlas and \nmore!","localizedIn":["en-US"],"skuDetailsToken":"AEuhp4L8sXFC9syA1WawVyd8jAgG799M25nl8VKX4CWc4UB5YKT-7G-YLotJcuQsceFD","subscriptionOfferDetails":[{"offerIdToken":"","basePlanId":"p6m","pricingPhases":[{"priceAmountMicros":17990000,"priceCurrencyCode":"EUR","formattedPrice":"€17.99","billingPeriod":"P6M","recurrenceMode":1}],"offerTags":[]}]}', parsedJson={"productId":"moodflow.plus.6months","type":"subs","title":"Moodflow Plus 6-Months (Moodflow: Mood Tracker)","name":"Moodflow Plus 6-Months","description":"Get access to Routines, up to 4 Cloud-backed images per entry, Atlas and \nmore!","localizedIn":["en-US"],"skuDetailsToken":"AEuhp4L8sXFC9syA1WawVyd8jAgG799M25nl8VKX4CWc4UB5YKT-7G-YLotJcuQsceFD","subscriptionOfferDetails":[{"offerIdToken":"","basePlanId":"p6m","pricingPhases":[{"priceAmountMicros":17990000,"priceCurrencyCode":"EUR","formattedPrice":"€17.99","billingPeriod":"P6M","recurrenceMode":1}],"offerTags":[]}]}, productId='moodflow.plus.6months', productType='subs', title='Moodflow Plus 6-Months (Moodflow: Mood Tracker)', productDetailsToken='AEuhp4L8sXFC9syA1WawVyd8jAgG799M25nl8VKX4CWc4UB5YKT-7G-YLotJcuQsceFD', subscriptionOfferDetails=[com.android.billingclient.api.ProductDetails$SubscriptionOfferDetails@22c748e]}
2023-11-13 21:33:27.425 15027-15149 [Purchases] - DEBUG     com.moodpixel                        D  Retrieving customer info with policy: CACHED_OR_FETCHED
2023-11-13 21:33:27.426 15027-15149 [Purchases] - DEBUG     com.moodpixel                        D  ℹ️ Vending CustomerInfo from cache.
2023-11-13 21:33:27.426 15027-15149 [Purchases] - DEBUG     com.moodpixel                        D  ℹ️ Checking if cache is stale AppInBackground false

@wmonecke
Copy link
Author

The second time this log appears: ✨ ------- Purchases.addCustomerInfoUpdateListener - purchases status ------- ✨, it is because I logged in with a user that has an active premium subscription but as you can see it's showing as a free user.

If I then kill my app and restart it, then user has the plus access because the listener (Purchases.addCustomerInfoUpdateListener) or user (const user = await Purchases.logIn(currentUser.uid)) have the right info

@NachoSoto
Copy link
Contributor

Thanks a lot! I see that's using a relatively old version. Going through our release notes I see for example one fix that happened on the very next release that could be affecting this.

Could you try to see if you can reproduce this issue with the latest version of react-native-purchases?

@wmonecke
Copy link
Author

Ok will do

@wmonecke
Copy link
Author

@NachoSoto seems like doing yarn add react-native-purchases@latest installs version 4.6.3 which is odd. Which version should I be getting?

@wmonecke
Copy link
Author

@NachoSoto I ended up installing 7.2.0 but there is def something funky going on with @latest.

@NachoSoto
Copy link
Contributor

@wmonecke thanks for letting us know! We just fixed that reference:

$ npm dist-tag ls react-native-purchases
latest: 7.3.0

@wmonecke
Copy link
Author

wmonecke commented Nov 13, 2023

Sadly still happening @NachoSoto on 7.3.0

@NachoSoto
Copy link
Contributor

Ok thanks for verifying! We'll look into it.

In the mean time, we'd love it if you could also provide verbose logs from iOS 🙏🏻

@wmonecke
Copy link
Author

wmonecke commented Nov 13, 2023

Will do so tomorrow morning.

This is my sign-in method just in case you guys see anything weird with it:

export const signInWithEmail = (email: string, password: string) => {
  return async (dispatch: Dispatch) => {
    dispatch({ type: START_REQUEST });

    const { currentUser } = auth();

    if (currentUser) {
      Toast('You are already logged in.');
      return dispatch({ type: REQUEST_FAILED });
    }

    try {
      const credential = await auth().signInWithEmailAndPassword(
        email,
        password,
      );

      const user = await Purchases.logIn(credential.user.uid); // this user has no active entitlements, however he should have

      return dispatch({ type: REQUEST_SUCCESSFUL });
    } catch (error) {
      console.log('Error when signInWithEmailAndPassword: ', error);
      return dispatch({ type: REQUEST_FAILED });
    }
  };
};

@wmonecke
Copy link
Author

wmonecke commented Nov 13, 2023

@NachoSoto it seems that calling

 Purchases.configure({
          apiKey: 'BjAwluMVWZBmYUayqbdYfYLKcufVfiCz',
          appUserID: credential.user.uid,
        })

AGAIN (I already called this in my App.js) right after

const credential = await auth().signInWithEmailAndPassword(
        email,
        password,
      );

does the trick somehow? (i.e. replace login for a second configure)

@wmonecke
Copy link
Author

@NachoSoto Any updates regarding this? I really need to get this fixed soon, still losing subs.

@tonidero
Copy link
Contributor

Hi @wmonecke, trying to understand the issue a bit better.

Sometimes the user within the addCustomerInfoUpdateListener will return a non-subbed user while the user inside the onAuthStateChanged IS subscribed. This is really confusing an non-intuitive.

So the issue you're experiencing is that the customer info listener is sending outdated data. You expect to receive the value received from Purchases.logIn. Is this correct?

A few additional questions:

  • This started happening after upgrading the library. From what version did you upgrade? We want to confirm what changes happened between those versions.
  • I see you're calling addCustomerInfoUpdateListener in the validateSubscription method. Just to make sure, are you calling this method only once early in the process lifetime? (But after calling configure)
  • I see you seem to be calling Purchases.logIn in your onAuthStateChanged method and on the signInWithEmail. Also seems that you're calling the logIn method twice from the Android logs. You should only need to do it once. Is this code modified from your code in production?
  • Could you confirm what differences are between the CustomerInfo returned by the addCustomerInfoUpdateListener and the Purchases.logIn methods? Is it the same user but the entitlements are outdated, or is it a different user altogether? You can try to print them so they are visible in the logs.
  • It would also be great to get the iOS verbose logs if possible, to see if we can gather something from there.

As for calling configure multiple times, that's not really supported and the behavior will be undefined.

We're still looking into it. Will let you know as soon as possible.

@wmonecke
Copy link
Author

wmonecke commented Nov 15, 2023

Hey Toni!

Thanks for reaching out.

So the issue you're experiencing is that the customer info listener is sending outdated data. You expect to receive the value received from Purchases.logIn. Is this correct?

This is exactly what I expect. After logging the user in to RevenueCat I expect the returned value to be a user that tells me if he is subscribed or not. This is correct right?

Today I have removed the multiple .login from my auth actions and this is the only function that calls RevenueCat APIs (except and initial .configure in my App.js):

export const validateSubscription = () => {
  return async (dispatch: Dispatch) => {

    const checkSubscriptionStatus = async () => {
      prettyLog('checkSubscriptionStatus');

      try {
        const customerInfo = await Purchases.getCustomerInfo();

        const isSubscriptionActive =
          typeof customerInfo.entitlements.active.plus !==
          'undefined';

        prettyLog('checkSubscriptionStatus - user', {
          user: customerInfo,
          isSubscriptionActive,
        });

        if (isSubscriptionActive) {
          return dispatch({ type: SUBSCRIPTION_VALIDATED });
        }
      } catch (error) {
        console.log('Error in checkSubscriptionStatus: ', error);
      }
    };

    checkSubscriptionStatus();

    auth().onAuthStateChanged(async (currentUser) => {
      prettyLog('auth().onAuthStateChanged', {
        currentUser,
      });

      if (!currentUser) {
        return;
      }
      
      // If I add this second configure call here it behaves as expected 
      // Purchases.configure({
      //   apiKey: 'BjAwluMVWZBmYUayqbdYfYLKcufVfiCz',
      //   appUserID: currentUser.uid,
      // });

      const customer = await Purchases.logIn(currentUser.uid);
      await Purchases.setEmail(currentUser.email);

      prettyLog('auth().onAuthStateChanged - customer from login', {
        customer,
      });

      checkSubscriptionStatus();
    });

    Purchases.addCustomerInfoUpdateListener(
      async (updatedCustomerInfo) => {
        prettyLog(
          'Purchases.addCustomerInfoUpdateListener - purchases status',
          {
            isPlus:
              typeof updatedCustomerInfo.entitlements.active?.plus !==
              'undefined',
            updatedCustomerInfo,
          },
        );

        if (
          typeof updatedCustomerInfo.entitlements.active?.plus !==
          'undefined'
        ) {
          prettyLog(
            "Purchases.addCustomerInfoUpdateListener - You're a PLUS user!",
          );
          return dispatch({ type: SUBSCRIPTION_VALIDATED });
        }

        prettyLog(
          'Purchases.addCustomerInfoUpdateListener - You are a FREE user!',
        );

        dispatch({ type: SUBSCRIPTION_EXPIRED });
      },
    );
  };
};

This started happening after upgrading the library. From what version did you upgrade? We want to confirm what changes happened between those versions.

I was on this version before the bugs started happening: "react-native-purchases": "^5.13.3",

I see you're calling addCustomerInfoUpdateListener in the validateSubscription method. Just to make sure, are you calling this method only once early in the process lifetime? (But after calling configure)

This is correct. addCustomerInfoUpdateListener is being called once after the configure call outside my App.js component.

I see you seem to be calling Purchases.logIn in your onAuthStateChanged method and on the signInWithEmail. Also seems that you're calling the logIn method twice from the Android logs. You should only need to do it once. Is this code modified from your code in production?

This is the same code as in prod at the moment.

Could you confirm what differences are between the CustomerInfo returned by the addCustomerInfoUpdateListener and the Purchases.logIn methods? Is it the same user but the entitlements are outdated, or is it a different user altogether? You can try to print them so they are visible in the logs.

These are the logs for when I dont call .configure a second time:

1st) Firebase -> auth().onAuthStateChanged

 LOG   ------- auth().onAuthStateChanged ------- 
{
    "currentUser": {
        "multiFactor": {
            "enrolledFactors": []
        },
        "metadata": {
            "lastSignInTime": 1700045360970,
            "creationTime": 1699900209442
        },
        "photoURL": null,
        "phoneNumber": null,
        "tenantId": null,
        "displayName": null,
        "emailVerified": true,
        "isAnonymous": false,
        "uid": "vVK29G9nexY1x2XxVcszozM29K62",
        "email": "[email protected]",
        "providerData": [
            {
                "email": "[email protected]",
                "providerId": "google.com",
                "photoURL": "https://lh3.googleusercontent.com/a/ACg8ocKPNjbxGTATU-37I3h5gkSWaPrs0W1ulKaNv30BItEylK0=s96-c",
                "phoneNumber": null,
                "displayName": "Walter Monecke",
                "uid": "101933804402094068765"
            },
            {
                "email": "[email protected]",
                "providerId": "password",
                "photoURL": null,
                "phoneNumber": null,
                "displayName": null,
                "uid": "[email protected]"
            }
        ],
        "providerId": "firebase"
    }
}

onAuthStateChanged gets called first since I logged in with one of my auth functions.

2nd) As I call and await Purchases.login inside onAuthStateChanged, Purchases.addCustomerInfoUpdateListener gets triggered with the following user:

 LOG   ------- Purchases.addCustomerInfoUpdateListener - purchases status ------- 
{
    "isPlus": false,
    "updatedCustomerInfo": {
        "nonSubscriptionTransactions": [],
        "originalPurchaseDate": null,
        "allPurchaseDatesMillis": {},
        "managementURL": null,
        "allPurchaseDates": {},
        "originalAppUserId": "$RCAnonymousID:c6c2514232f9429ab656a49c66100e1d",
        "allExpirationDates": {},
        "firstSeen": "2023-11-13T18:28:47.000Z",
        "originalPurchaseDateMillis": null,
        "allExpirationDatesMillis": {},
        "requestDateMillis": 1700045361505,
        "latestExpirationDate": null,
        "firstSeenMillis": 1699900127000,
        "allPurchasedProductIdentifiers": [],
        "requestDate": "2023-11-15T10:49:21.505Z",
        "latestExpirationDateMillis": null,
        "originalApplicationVersion": null,
        "activeSubscriptions": [],
        "entitlements": {
            "active": {},
            "all": {}
        }
    }
}

3rd) At this point the awaited Purchases.login inside onAuthStateChange resolves with the following non-premium user:

 LOG   ------- auth().onAuthStateChanged - customer from Purchases.login ------- 
{
    "customer": {
        "created": false,
        "customerInfo": {
            "nonSubscriptionTransactions": [],
            "originalPurchaseDate": null,
            "allPurchaseDatesMillis": {},
            "managementURL": null,
            "allPurchaseDates": {},
            "originalAppUserId": "$RCAnonymousID:c6c2514232f9429ab656a49c66100e1d",
            "allExpirationDates": {},
            "firstSeen": "2023-11-13T18:28:47.000Z",
            "originalPurchaseDateMillis": null,
            "allExpirationDatesMillis": {},
            "requestDateMillis": 1700045361505,
            "latestExpirationDate": null,
            "firstSeenMillis": 1699900127000,
            "allPurchasedProductIdentifiers": [],
            "requestDate": "2023-11-15T10:49:21.505Z",
            "latestExpirationDateMillis": null,
            "originalApplicationVersion": null,
            "activeSubscriptions": [],
            "entitlements": {
                "active": {},
                "all": {}
            }
        }
    }
}

4th) Finally checkSubscriptionStatus get called at the end of onAuthStateChanged with the following user:

 LOG   ------- checkSubscriptionStatus - user ------- 
{
    "user": {
        "nonSubscriptionTransactions": [],
        "originalPurchaseDate": null,
        "allPurchaseDatesMillis": {},
        "managementURL": null,
        "allPurchaseDates": {},
        "originalAppUserId": "$RCAnonymousID:c6c2514232f9429ab656a49c66100e1d",
        "allExpirationDates": {},
        "firstSeen": "2023-11-13T18:28:47.000Z",
        "originalPurchaseDateMillis": null,
        "allExpirationDatesMillis": {},
        "requestDateMillis": 1700045361505,
        "latestExpirationDate": null,
        "firstSeenMillis": 1699900127000,
        "allPurchasedProductIdentifiers": [],
        "requestDate": "2023-11-15T10:49:21.505Z",
        "latestExpirationDateMillis": null,
        "originalApplicationVersion": null,
        "activeSubscriptions": [],
        "entitlements": {
            "active": {},
            "all": {}
        }
    },
    "isSubscriptionActive": false
}

It would also be great to get the iOS verbose logs if possible, to see if we can gather something from there.

I actually think this is only happening on android. This issue is also quite hard for me to reproduce.

One last thing: These are the 2 IDs that my user (me) has

Original App User ID:
$RCAnonymousID:c6c2514232f9429ab656a49c66100e1d

Alias #1 (Firebase UID)
vVK29G9nexY1x2XxVcszozM29K62

I have an active subscription in production but it is not showing in the RevenueCat dashboard (live-subscription was bought over 2 days ago).

image

@hatem-72
Copy link

Thank you @wmonecke for investigating this matter. For several months, we have been grappling with issues related to "lost in translation" Android purchasers. Either their subscriptions are not visible in Revenue Cat, or the subscriptions we do see are linked to an anonymous user whom we cannot associate with a properly logged-in user. After reading this thread, I believe we might be facing a similar problem. I was almost on the verge of giving up on this issue, so your efforts in delving into it are greatly appreciated.

@wmonecke
Copy link
Author

@hatem-72 No problem! I will probably be releasing a new version with what is working "for me" at the moment (i.e. calling configure a second time since it doesn't really hurt calling it a second time I guess).

If you guys need more info or would like to jump on a call to debug further I am open for it.

@hatem-72
Copy link

Up to this point, I've been trying to manage the issue by forwarding every single Anonymous RevenueCat ID caught on the client side to our backend, and then attempting to reconcile it with one of our users on the server side. This approach hasn't always been successful and felt more like a temporary fix, as I believe it's not really our server's responsibility to handle this.

@wmonecke
Copy link
Author

Seems that this is still happening after refactoring the above code to the following:

export const validateSubscription = () => {
  return async (dispatch: Dispatch) => {
 
    const checkSubscriptionStatus = async () => { 
      try {
        const customerInfo = await Purchases.getCustomerInfo();

        const isSubscriptionActive =
          typeof customerInfo.entitlements.active.plus !==
          'undefined';

        if (!isSubscriptionActive) {
          return dispatch({ type: SUBSCRIPTION_EXPIRED });
        }

        return dispatch({ type: SUBSCRIPTION_VALIDATED });
      } catch (error) {
        console.log('Error in checkSubscriptionStatus: ', error);
      }
    };

    auth().onAuthStateChanged(async (currentUser) => {
      Purchases.configure({
        apiKey: RevenueCatApiKey,
        appUserID: currentUser?.uid,
      });

      checkSubscriptionStatus();
    });
  };
};

Basically removed Purchases.addCustomerInfoUpdateListener in case some race condition was causing the SUBSCRIPTION_EXPIRED payload to be dispatched after a SUBSCRIPTION_VALIDATED.

This does work for me right now but I do have many older users (users that purchased before I upgraded the SDK) that are complaining they are getting charged without being able to access the premium features.

Could we by any chance have some sort of call / email exchange to further see what could be happening?

At this point I wouldnt know what else to do.

@tonidero
Copy link
Contributor

Tried to schedule a call but didn't happen. If you prefer, please contact [email protected] referencing this issue and we can try to make it happen again.

@RohovDmytro
Copy link

Same issue. Feels critical to me. Is it a recognized issue and what is its status?

My best guess is that if there is addCustomerInfoUpdateListener then the successful purchase returns a user info without entitlements.

@tonidero
Copy link
Contributor

Hi @RohovDmytro, we currently haven't been able to repro this issue. Please, let us know if you have repro steps. Also a code sample with this happening to you would be helpful. Additionally, can you let us know exactly what you're experiencing to make sure it's the same issue?

@NachoSoto NachoSoto added the status: needs-additional-info Issues that are missing steps from bug template label Jan 17, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working status: needs-additional-info Issues that are missing steps from bug template
Projects
None yet
Development

No branches or pull requests

6 participants