revenuecat / purchases-unity Goto Github PK
View Code? Open in Web Editor NEWUnity in-app purchases and subscriptions made easy.
Home Page: https://www.revenuecat.com/
License: MIT License
Unity in-app purchases and subscriptions made easy.
Home Page: https://www.revenuecat.com/
License: MIT License
Describe the bug
RevenueCat doesn't get initialized because it can't find com/revenuecat/purchases/google/BillingWrapper class
2022/02/03 15:02:44.221 9309 14594 Error Unity java.lang.NoClassDefFoundError: Failed resolution of: Lcom/revenuecat/purchases/google/BillingWrapper;
2022/02/03 15:02:44.221 9309 14594 Error Unity at com.revenuecat.purchases.BillingFactory.createBilling(BillingFactory.kt:22)
2022/02/03 15:02:44.221 9309 14594 Error Unity at com.revenuecat.purchases.Purchases$Companion.configure$purchases_release(Purchases.kt:1874)
2022/02/03 15:02:44.221 9309 14594 Error Unity at com.revenuecat.purchases.Purchases$Companion.configure(Purchases.kt:1828)
2022/02/03 15:02:44.221 9309 14594 Error Unity at com.revenuecat.purchases.Purchases$Companion.configure$default(Purchases.kt:1821)
2022/02/03 15:02:44.221 9309 14594 Error Unity at com.revenuecat.purchases.hybridcommon.CommonKt.configure(common.kt:329)
2022/02/03 15:02:44.221 9309 14594 Error Unity at com.revenuecat.purchasesunity.PurchasesWrapper.setup(PurchasesWrapper.java:66)
2022/02/03 15:02:44.221 9309 14594 Error Unity at com.unity3d.player.UnityPlayer.nativeRender(Native Method)
2022/02/03 15:02:44.221 9309 14594 Error Unity at com.unity3d.player.UnityPlayer.access$300(Unknown Source:0)
2022/02/03 15:02:44.221 9309 14594 Error Unity at com.unity3d.player.UnityPlayer$e$1.handleMessage(Unknown Source:95)
2022/02/03 15:02:44.221 9309 14594 Error Unity at android.os.Handler.dispatchMessage(Handler.java:102)
2022/02/03 15:02:44.221 9309 14594 Error Unity at android.os.Looper.loopOnce(Looper.ja
2022/02/03 15:02:44.229 9309 14594 Error Unity AndroidJavaException: kotlin.UninitializedPropertyAccessException: There is no singleton instance. Make sure you configure Purchases before trying to get the default instance. More info here: https://errors.rev.cat/configuring-sdk
2022/02/03 15:02:44.229 9309 14594 Error Unity kotlin.UninitializedPropertyAccessException: There is no singleton instance. Make sure you configure Purchases before trying to get the default instance. More info here: https://errors.rev.cat/configuring-sdk
2022/02/03 15:02:44.229 9309 14594 Error Unity at com.revenuecat.purchases.Purchases$Companion.getSharedInstance(Purchases.kt:1775)
2022/02/03 15:02:44.229 9309 14594 Error Unity at com.revenuecat.purchases.hybridcommon.CommonKt.getOfferings(common.kt:44)
2022/02/03 15:02:44.229 9309 14594 Error Unity at com.revenuecat.purchasesunity.PurchasesWrapper.getOfferings(PurchasesWrapper.java:199)
2022/02/03 15:02:44.229 9309 14594 Error Unity at com.unity3d.player.UnityPlayer.nativeRender(Native Method)
2022/02/03 15:02:44.229 9309 14594 Error Unity at com.unity3d.player.UnityPlayer.access$300(Unknown Source:0)
2022/02/03 15:02:44.229 9309 14594 Error Unity at com.unity3d.player.UnityPlayer$e$1.handleMessage(Unknown Source:95)
2022/02/03 15:02:44.229 9309 14594 Error Unity at android.os.Handler.dispatchMessage(Handler.java:102)
2022/02/03 15:02:44.229 9309 14594 Error Unity at android.os.Looper.loopOnce(Looper.java:226)
2022/02/03 15:02:44.229 9309 14594 Error Unity at android.os.Looper.lo
Steps to reproduce, with a description of expected vs. actual behavior
Just install the SDK and build for an Android device.
Other information (e.g. stacktraces, related issues, suggestions how to fix, links for us to have context, eg. stackoverflow, etc.)
We don't use Unity IAP package. Only RevenueCat is on the project currently.
Additional context
Add any other context about the problem here.
Hello
I would like to use RevenueCat in observer mode, so I don't want to stop using Unity IAP for processing purchases.
But once I build to Android, I got this issue:
Duplicate class com.android.vending.billing.IInAppBillingService found in modules classes.jar (:GoogleAIDL:) and classes.jar (com.android.billingclient:billing:2.0.3)
Duplicate class com.android.vending.billing.IInAppBillingService$Stub found in modules classes.jar (:GoogleAIDL:) and classes.jar (com.android.billingclient:billing:2.0.3)
Duplicate class com.android.vending.billing.IInAppBillingService$Stub$Proxy found in modules classes.jar (:GoogleAIDL:) and classes.jar (com.android.billingclient:billing:2.0.3)
due to a duplicate class: com.android.billingclient
I think it can be easily fixed by editing the Gradle file, but if there is an option to do it from RevenueCat itself, it will be much cleaner.
Thanks
namespace Editor
from RevenueCatPostInstall may collide with UnityEditor Editor
This code snippet from Unity official doc won't compile with latest RevenueCat for Unity version. The Editor
base class, without specifying the namespace UnitEditor
, collides with RevenueCat namespace:
We don't have issue templates in this repo, we should create them to match the others
Describe the bug
(Also posted in the community: https://community.revenuecat.com/sdks-51/unable-to-resubscribe-after-expiration-in-testflight-sandbox-environment-many-related-posts-before-without-a-solution-2006)
Hi,
I have searched and read many posts regarding my problem.
A
Unable to re-purchase a subscription in sandbox.
T
Guidance on handling expired subscriptions
P
Unable to re purchase subscription in sandbox environment of IOS.
R
resubscribes is not currently working for me
Many users encountered the same issue as mine. However, none of them received a solution or clear confirmation about this issue.
A new sandbox user works fine with the first purchase of a subscription item. But after expiration, if we want to resubscribe, it sometimes just fails.
More specifically, we are using https://github.com/RevenueCat/purchases-unity/releases/download/4.1.0/Purchases-UnityIAP.unitypackage with a Unity app.
When we click on a subscription button for a resubscription, the function PurchasePackage works fine without an error, but in the callback, we check customerInfo.Entitlements.Active.ContainsKey(entitlementId) and it is still false.
I think at least there should be a confirmation whether it only happens in TestFlight/sandbox environment or not?
Thanks!
Do not remove any of the steps from the template below. If a step is not applicable to your issue, please leave that step empty.
Environment
Debug logs that reproduce the issue
Got all offerings!
RevenueCatPurchaseManager:InitializePurchases()
2022-09-02 15:02:10.691183+0800 PreteethAIPro[8527:584505] [Purchases] - DEBUG: ℹ️ Vending Offerings from cache
2022-09-02 15:02:10.691597+0800 PreteethAIPro[8527:584505] [Purchases] - WARN: ⚠️ This StoreProduct represents an SK1 product, the type of product cannot be determined, the value will be undefined. Use `StoreProduct.productCategory` instead.
2022-09-02 15:02:10.691896+0800 PreteethAIPro[8527:584505] [Purchases] - WARN: ⚠️ This StoreProduct represents an SK1 product, the type of product cannot be determined, the value will be undefined. Use `StoreProduct.productCategory` instead.
2022-09-02 15:02:10.692098+0800 PreteethAIPro[8527:584505] [Purchases] - WARN: ⚠️ This StoreProduct represents an SK1 product, the type of product cannot be determined, the value will be undefined. Use `StoreProduct.productCategory` instead.
2022-09-02 15:02:10.692281+0800 PreteethAIPro[8527:584505] [Purchases] - WARN: ⚠️ This StoreProduct represents an SK1 product, the type of product cannot be determined, the value will be undefined. Use `StoreProduct.productCategory` instead.
2022-09-02 15:02:10.692493+0800 PreteethAIPro[8527:584505] [Purchases] - WARN: ⚠️ This StoreProduct represents an SK1 product, the type of product cannot be determined, the value will be undefined. Use `StoreProduct.productCategory` instead.
2022-09-02 15:02:10.692675+0800 PreteethAIPro[8527:584505] [Purchases] - WARN: ⚠️ This StoreProduct represents an SK1 product, the type of product cannot be determined, the value will be undefined. Use `StoreProduct.productCategory` instead.
2022-09-02 15:02:10.692832+0800 PreteethAIPro[8527:584505] [Purchases] - WARN: ⚠️ This StoreProduct represents an SK1 product, the type of product cannot be determined, the value will be undefined. Use `StoreProduct.productCategory` instead.
2022-09-02 15:02:10.692987+0800 PreteethAIPro[8527:584505] [Purchases] - WARN: ⚠️ This StoreProduct represents an SK1 product, the type of product cannot be determined, the value will be undefined. Use `StoreProduct.productCategory` instead.
2022-09-02 15:02:10.693484+0800 PreteethAIPro[8527:584505] json = {"offerings":{"current":{"availablePackages":[{"identifier":"$rc_annual","offeringIdentifier":"default","packageType":"ANNUAL","product":{"title":"Preteeth AI Pro Annual","introPrice":{"cycles":1,"price":0,"periodUnit":"MONTH","priceString":"$0.00","periodNumberOfUnits":1,"period":"P1M"},"priceString":"$15,900.00","identifier":"com.preteethai.dentist.subscription.annual","productCategory":"SUBSCRIPTION","price":15900,"currencyCode":"TWD","discounts":[],"productType":"NON_CONSUMABLE","description":"Preteeth AI Pro Annual"}},{"packageType":"MONTHLY","product":{"discounts":[],"priceString":"$3,290.00","productType":"NON_CONSUMABLE","introPrice":{"periodUnit":"MONTH","price":0,"periodNumberOfUnits":1,"cycles":1,"priceString":"$0.00","period":"P1M"},"productCategory":"SUBSCRIPTION","price":3290,"description":"Preteeth AI Pro Monthly","identifier":"com.preteethai.dentist.subscription.monthly","currencyCode":"TWD","title":"Preteeth AI Pro Monthly"},"offeringIdentifier":"default","identifier":"$rc_monthly"}],"annual":{"offeringIdentifier":"default","identifier":"$rc_annual","product":{"discounts":[],"description":"Preteeth AI Pro Annual","productType":"NON_CONSUMABLE","currencyCode":"TWD","identifier":"com.preteethai.dentist.subscription.annual","title":"Preteeth AI Pro Annual","productCategory":"SUBSCRIPTION","price":15900,"introPrice":{"price":0,"periodUnit":"MONTH","cycles":1,"period":"P1M","priceString":"$0.00","periodNumberOfUnits":1},"priceString":"$15,900.00"},"packageType":"ANNUAL"},"serverDescription":"The standard set of packages","identifier":"default","monthly":{"product":{"description":"Preteeth AI Pro Monthly","introPrice":{"period":"P1M","price":0,"periodUnit":"MONTH","periodNumberOfUnits":1,"priceString":"$0.00","cycles":1},"discounts":[],"price":3290,"priceString":"$3,290.00","productType":"NON_CONSUMABLE","title":"Preteeth AI Pro Monthly","productCategory":"SUBSCRIPTION","currencyCode":"TWD","identifier":"com.preteethai.dentist.subscription.monthly"},"packageType":"MONTHLY","identifier":"$rc_monthly","offeringIdentifier":"default"}},"all":{"default":{"annual":{"product":{"introPrice":{"period":"P1M","cycles":1,"periodUnit":"MONTH","priceString":"$0.00","periodNumberOfUnits":1,"price":0},"priceString":"$15,900.00","currencyCode":"TWD","discounts":[],"description":"Preteeth AI Pro Annual","identifier":"com.preteethai.dentist.subscription.annual","productCategory":"SUBSCRIPTION","productType":"NON_CONSUMABLE","title":"Preteeth AI Pro Annual","price":15900},"identifier":"$rc_annual","packageType":"ANNUAL","offeringIdentifier":"default"},"availablePackages":[{"identifier":"$rc_annual","packageType":"ANNUAL","offeringIdentifier":"default","product":{"introPrice":{"priceString":"$0.00","period":"P1M","periodUnit":"MONTH","cycles":1,"price":0,"periodNumberOfUnits":1},"price":15900,"productCategory":"SUBSCRIPTION","priceString":"$15,900.00","title":"Preteeth AI Pro Annual","description":"Preteeth AI Pro Annual","productType":"NON_CONSUMABLE","discounts":[],"identifier":"com.preteethai.dentist.subscription.annual","currencyCode":"TWD"}},{"identifier":"$rc_monthly","product":{"productType":"NON_CONSUMABLE","identifier":"com.preteethai.dentist.subscription.monthly","title":"Preteeth AI Pro Monthly","discounts":[],"price":3290,"currencyCode":"TWD","productCategory":"SUBSCRIPTION","priceString":"$3,290.00","description":"Preteeth AI Pro Monthly","introPrice":{"cycles":1,"priceString":"$0.00","price":0,"period":"P1M","periodUnit":"MONTH","periodNumberOfUnits":1}},"packageType":"MONTHLY","offeringIdentifier":"default"}],"identifier":"default","serverDescription":"The standard set of packages","monthly":{"packageType":"MONTHLY","offeringIdentifier":"default","identifier":"$rc_monthly","product":{"productType":"NON_CONSUMABLE","price":3290,"identifier":"com.preteethai.dentist.subscription.monthly","introPrice":{"cycles":1,"period":"P1M","periodUnit":"MONTH","price":0,"periodNumberOfUnits":1,"priceString":"$0.00"},"title":"Preteeth AI Pro Monthly","currencyCode":"TWD","description":"Preteeth AI Pro Monthly","priceString":"$3,290.00","discounts":[],"productCategory":"SUBSCRIPTION"}}}}}}
_getOfferings {"offerings":{"current":{"availablePackages":[{"identifier":"$rc_annual","offeringIdentifier":"default","packageType":"ANNUAL","product":{"title":"Preteeth AI Pro Annual","introPrice":{"cycles":1,"price":0,"periodUnit":"MONTH","priceString":"$0.00","periodNumberOfUnits":1,"period":"P1M"},"priceString":"$15,900.00","identifier":"com.preteethai.dentist.subscription.annual","productCategory":"SUBSCRIPTION","price":15900,"currencyCode":"TWD","discounts":[],"productType":"NON_CONSUMABLE","description":"Preteeth AI Pro Annual"}},{"packageType":"MONTHLY","product":{"discounts":[],"priceString":"$3,290.00","productType":"NON_CONSUMABLE","introPrice":{"periodUnit":"MONTH","price":0,"periodNumberOfUnits":1,"cycles":1,"priceString":"$0.00","period":"P1M"},"productCategory":"SUBSCRIPTION","price":3290,"description":"Preteeth AI Pro Monthly","identifier":"com.preteethai.dentist.subscription.monthly","currencyCode":"TWD","title":"Preteeth AI Pro Monthly"},"offeringIdentifier":"default","identifier":"$rc_monthly"}],"annual":{"offeringIdentifier":"default","identifier":"$rc_annual","product":{"discounts":[],"description":"Preteeth AI Pro Annual","productType":"NON_CONSUMABLE","currencyCode":"TWD","identifier":"com.preteethai.dentist.subscription.annual","title":"Preteeth AI Pro Annual","productCategory":"SUBSCRIPTION","price":15900,"introPrice":{"price":0,"periodUnit":"MONTH","cycles":1,"period":"P1M","priceString":"$0.00","periodNumberOfUnits":1},"priceString":"$15,900.00"},"packageType":"ANNUAL"},"serverDescription":"The standard set of packages","identifier":"default","monthly":{"product":{"description":"Preteeth AI Pro Monthly","introPrice":{"period":"P1M","price":0,"periodUnit":"MONTH","periodNumberOfUnits":1,"priceString":"$0.00","cycles":1},"discounts":[],"price":3290,"priceString":"$3,290.00","productType":"NON_CONSUMABLE","title":"Preteeth AI Pro Monthly","productCategory":"SUBSCRIPTION","currencyCode":"TWD","identifier":"com.preteethai.dentist.subscription.monthly"},"packageType":"MONTHLY","identifier":"$rc_monthly","offeringIdentifier":"default"}},"all":{"default":{"annual":{"product":{"introPrice":{"period":"P1M","cycles":1,"periodUnit":"MONTH","priceString":"$0.00","periodNumberOfUnits":1,"price":0},"priceString":"$15,900.00","currencyCode":"TWD","discounts":[],"description":"Preteeth AI Pro Annual","identifier":"com.preteethai.dentist.subscription.annual","productCategory":"SUBSCRIPTION","productType":"NON_CONSUMABLE","title":"Preteeth AI Pro Annual","price":15900},"identifier":"$rc_annual","packageType":"ANNUAL","offeringIdentifier":"default"},"availablePackages":[{"identifier":"$rc_annual","packageType":"ANNUAL","offeringIdentifier":"default","product":{"introPrice":{"priceString":"$0.00","period":"P1M","periodUnit":"MONTH","cycles":1,"price":0,"periodNumberOfUnits":1},"price":15900,"productCategory":"SUBSCRIPTION","priceString":"$15,900.00","title":"Preteeth AI Pro Annual","description":"Preteeth AI Pro Annual","productType":"NON_CONSUMABLE","discounts":[],"identifier":"com.preteethai.dentist.subscription.annual","currencyCode":"TWD"}},{"identifier":"$rc_monthly","product":{"productType":"NON_CONSUMABLE","identifier":"com.preteethai.dentist.subscription.monthly","title":"Preteeth AI Pro Monthly","discounts":[],"price":3290,"currencyCode":"TWD","productCategory":"SUBSCRIPTION","priceString":"$3,290.00","description":"Preteeth AI Pro Monthly","introPrice":{"cycles":1,"priceString":"$0.00","price":0,"period":"P1M","periodUnit":"MONTH","periodNumberOfUnits":1}},"packageType":"MONTHLY","offeringIdentifier":"default"}],"identifier":"default","serverDescription":"The standard set of packages","monthly":{"packageType":"MONTHLY","offeringIdentifier":"default","identifier":"$rc_monthly","product":{"productType":"NON_CONSUMABLE","price":3290,"identifier":"com.preteethai.dentist.subscription.monthly","introPrice":{"cycles":1,"period":"P1M","periodUnit":"MONTH","price":0,"periodNumberOfUnits":1,"priceString":"$0.00"},"title":"Preteeth AI Pro Monthly","currencyCode":"TWD","description":"Preteeth AI Pro Monthly","priceString":"$3,290.00","discounts":[],"productCategory":"SUBSCRIPTION"}}}}}}
Purchases:_getOfferings(String)
Purchases GetOfferings succeeded!
RevenueCatPurchaseManager:<GetOfferingsAndSetIsSubscribedAndLogIn>b__17_0(Offerings, Error)
GetOfferingsFunc:Invoke(Offerings, Error)
Purchases:_getOfferings(String)
2022-09-02 15:02:10.703620+0800 PreteethAIPro[8527:584505] [Purchases] - DEBUG: ℹ️ Vending CustomerInfo from cache.
2022-09-02 15:02:10.704570+0800 PreteethAIPro[8527:584505] json = {"customerInfo":{"originalPurchaseDate":null,"latestExpirationDateMillis":null,"nonSubscriptionTransactions":[],"managementURL":null,"activeSubscriptions":[],"allPurchasedProductIdentifiers":[],"firstSeen":"2022-09-02T07:01:49Z","entitlements":{"active":{},"all":{}},"latestExpirationDate":null,"allExpirationDates":{},"allExpirationDatesMillis":{},"originalPurchaseDateMillis":null,"originalAppUserId":"$RCAnonymousID:63972c9ae6bd42ccb8ca9be1222ae775","requestDateMillis":1662102109000,"originalApplicationVersion":null,"requestDate":"2022-09-02T07:01:49Z","firstSeenMillis":1662102109000,"allPurchaseDates":{},"allPurchaseDatesMillis":{}}}
_getCustomerInfo {"customerInfo":{"originalPurchaseDate":null,"latestExpirationDateMillis":null,"nonSubscriptionTransactions":[],"managementURL":null,"activeSubscriptions":[],"allPurchasedProductIdentifiers":[],"firstSeen":"2022-09-02T07:01:49Z","entitlements":{"active":{},"all":{}},"latestExpirationDate":null,"allExpirationDates":{},"allExpirationDatesMillis":{},"originalPurchaseDateMillis":null,"originalAppUserId":"$RCAnonymousID:63972c9ae6bd42ccb8ca9be1222ae775","requestDateMillis":1662102109000,"originalApplicationVersion":null,"requestDate":"2022-09-02T07:01:49Z","firstSeenMillis":1662102109000,"allPurchaseDates":{},"allPurchaseDatesMillis":{}}}
Purchases:_getCustomerInfo(String)
2022-09-02 15:02:10.709135+0800 PreteethAIPro[8527:585089] [Purchases] - DEBUG: ℹ️ LogInOperation: Started
2022-09-02 15:02:10.709239+0800 PreteethAIPro[8527:585089] [Purchases] - DEBUG: ℹ️ There are no requests currently running, starting request POST subscribers/identify
2022-09-02 15:02:10.710162+0800 PreteethAIPro[8527:585089] [Purchases] - DEBUG: ℹ️ API request started: POST /v1/subscribers/identify
2022-09-02 15:02:11.379985+0800 PreteethAIPro[8527:585089] [Purchases] - DEBUG: ℹ️ API request completed: POST /v1/subscribers/identify 200
2022-09-02 15:02:11.405508+0800 PreteethAIPro[8527:585089] [Purchases] - DEBUG: 👤 Log in successful
2022-09-02 15:02:11.414482+0800 PreteethAIPro[8527:585089] [Purchases] - DEBUG: ℹ️ Sending updated CustomerInfo to delegate.
2022-09-02 15:02:11.414654+0800 PreteethAIPro[8527:585089] [Purchases] - DEBUG: ℹ️ LogInOperation: Finished
2022-09-02 15:02:11.414788+0800 PreteethAIPro[8527:585089] [Purchases] - DEBUG: ℹ️ Serial request done: POST subscribers/identify, 0 requests left in the queue
2022-09-02 15:02:11.415137+0800 PreteethAIPro[8527:584505] json = {"created":false,"customerInfo":{"allExpirationDatesMillis":{"com.preteethai.dentist.subscription.monthly":1662065629000,"com.preteethai.dentist.subscription.pro":1660673681000,"com.preteethai.dentist.subscription.month":1661325054000},"allPurchaseDates":{"com.preteethai.dentist.subscription.pro":"2022-08-16T18:09:41Z","com.preteethai.dentist.subscription.month":"2022-08-24T07:05:54Z","com.preteethai.dentist.subscription.monthly":"2022-09-01T20:48:49Z"},"firstSeen":"2022-09-01T04:16:22Z","requestDateMillis":1662102131000,"originalPurchaseDate":"2013-08-01T07:00:00Z","requestDate":"2022-09-02T07:02:11Z","originalApplicationVersion":"1.0","allPurchasedProductIdentifiers":["com.preteethai.dentist.subscription.pro","com.preteethai.dentist.subscription.monthly","com.preteethai.dentist.subscription.month"],"originalAppUserId":"$RCAnonymousID:e3b37ae862c941febc374494917cc0b0","latestExpirationDate":"2022-09-01T20:53:49Z","allPurchaseDatesMillis":{"com.preteethai.dentist.subscription.pro":1660673381000,"com.preteethai.dentist.subscription.monthly":1662065329000,"com.preteethai.dentist.subscription.month":1661324754000},"latestExpirationDateMillis":1662065629000,"entitlements":{"all":{"pro":{"originalPurchaseDate":"2022-08-31T14:01:28Z","latestPurchaseDateMillis":1662065329000,"expirationDate":"2022-09-01T20:53:49Z","store":"APP_STORE","billingIssueDetectedAtMillis":null,"productIdentifier":"com.preteethai.dentist.subscription.monthly","identifier":"pro","latestPurchaseDate":"2022-09-01T20:48:49Z","isActive":false,"periodType":"NORMAL","isSandbox":true,"billingIssueDetectedAt":null,"willRenew":false,"expirationDateMillis":1662065629000,"unsubscribedDetectedAt":"2022-09-01T20:54:01Z","ownershipType":"PURCHASED","unsubscribedDetectedAtMillis":1662065641000,"originalPurchaseDateMillis":1661954488000}},"active":{}},"activeSubscriptions":[],"firstSeenMillis":1662005782000,"originalPurchaseDateMillis":1375340400000,"nonSubscriptionTransactions":[],"allExpirationDates":{"com.preteethai.dentist.subscription.monthly":"2022-09-01T20:53:49Z","com.preteethai.dentist.subscription.pro":"2022-08-16T18:14:41Z","com.preteethai.dentist.subscription.month":"2022-08-24T07:10:54Z"},"managementURL":null}}
2022-09-02 15:02:11.415963+0800 PreteethAIPro[8527:585089] [Purchases] - DEBUG: ℹ️ GetOfferingsOperation: Started
2022-09-02 15:02:11.416045+0800 PreteethAIPro[8527:585089] [Purchases] - DEBUG: ℹ️ There are no requests currently running, starting request GET subscribers/v0kpCeNMD0UsHZIFNyDZW5uUc0x1/offerings
2022-09-02 15:02:11.417677+0800 PreteethAIPro[8527:585089] [Purchases] - DEBUG: ℹ️ API request started: GET /v1/subscribers/v0kpCeNMD0UsHZIFNyDZW5uUc0x1/offerings
_logIn {"created":false,"customerInfo":{"allExpirationDatesMillis":{"com.preteethai.dentist.subscription.monthly":1662065629000,"com.preteethai.dentist.subscription.pro":1660673681000,"com.preteethai.dentist.subscription.month":1661325054000},"allPurchaseDates":{"com.preteethai.dentist.subscription.pro":"2022-08-16T18:09:41Z","com.preteethai.dentist.subscription.month":"2022-08-24T07:05:54Z","com.preteethai.dentist.subscription.monthly":"2022-09-01T20:48:49Z"},"firstSeen":"2022-09-01T04:16:22Z","requestDateMillis":1662102131000,"originalPurchaseDate":"2013-08-01T07:00:00Z","requestDate":"2022-09-02T07:02:11Z","originalApplicationVersion":"1.0","allPurchasedProductIdentifiers":["com.preteethai.dentist.subscription.pro","com.preteethai.dentist.subscription.monthly","com.preteethai.dentist.subscription.month"],"originalAppUserId":"$RCAnonymousID:e3b37ae862c941febc374494917cc0b0","latestExpirationDate":"2022-09-01T20:53:49Z","allPurchaseDatesMillis":{"com.preteethai.dentist.subscription.pro":1660673381000,"com.preteethai.dentist.subscription.monthly":1662065329000,"com.preteethai.dentist.subscription.month":1661324754000},"latestExpirationDateMillis":1662065629000,"entitlements":{"all":{"pro":{"originalPurchaseDate":"2022-08-31T14:01:28Z","latestPurchaseDateMillis":1662065329000,"expirationDate":"2022-09-01T20:53:49Z","store":"APP_STORE","billingIssueDetectedAtMillis":null,"productIdentifier":"com.preteethai.dentist.subscription.monthly","identifier":"pro","latestPurchaseDate":"2022-09-01T20:48:49Z","isActive":false,"periodType":"NORMAL","isSandbox":true,"billingIssueDetectedAt":null,"willRenew":false,"expirationDateMillis":1662065629000,"unsubscribedDetectedAt":"2022-09-01T20:54:01Z","ownershipType":"PURCHASED","unsubscribedDetectedAtMillis":1662065641000,"originalPurchaseDateMillis":1661954488000}},"active":{}},"activeSubscriptions":[],"firstSeenMillis":1662005782000,"originalPurchaseDateMillis":1375340400000,"nonSubscriptionTransactions":[],"allExpirationDates":{"com.preteethai.dentist.subscription.monthly":"2022-09-01T20:53:49Z","com.preteethai.dentist.subscription.pro":"2022-08-16T18:14:41Z","com.preteethai.dentist.subscription.month":"2022-08-24T07:10:54Z"},"managementURL":null}}
Purchases:_logIn(String)
Updated UI: isSubscribed = false
RevenueCatPurchaseManager:UpdateUI()
RevenueCatPurchaseManager:<LogIn>b__19_0(CustomerInfo, Boolean, Error)
LogInFunc:Invoke(CustomerInfo, Boolean, Error)
Purchases:_logIn(String)
2022-09-02 15:02:11.685750+0800 PreteethAIPro[8527:585090] [Purchases] - DEBUG: ℹ️ API request completed: GET /v1/subscribers/v0kpCeNMD0UsHZIFNyDZW5uUc0x1/offerings 200
2022-09-02 15:02:11.693256+0800 PreteethAIPro[8527:585090] [Purchases] - DEBUG: ℹ️ GetOfferingsOperation: Finished
2022-09-02 15:02:11.693660+0800 PreteethAIPro[8527:584991] [Purchases] - DEBUG: ℹ️ Skipping products request because products were already cached. products: ["com.preteethai.dentist.subscription.monthly", "com.preteethai.dentist.subscription.annual"]
2022-09-02 15:02:11.693850+0800 PreteethAIPro[8527:585090] [Purchases] - DEBUG: ℹ️ Serial request done: GET subscribers/v0kpCeNMD0UsHZIFNyDZW5uUc0x1/offerings, 0 requests left in the queue
2022-09-02 15:02:30.014053+0800 PreteethAIPro[8527:584505] Could not signal service com.apple.WebKit.WebContent: 113: Could not find specified service
2022-09-02 15:02:39.338844+0800 PreteethAIPro[8527:584505] [Purchases] - DEBUG: ℹ️ Vending Offerings from cache
2022-09-02 15:02:39.339170+0800 PreteethAIPro[8527:584505] [Purchases] - INFO: 💰 Purchasing Product 'com.preteethai.dentist.subscription.monthly' from package in Offering 'default'
2022-09-02 15:02:39.356072+0800 PreteethAIPro[8527:584505] [Purchases] - DEBUG: ℹ️ PaymentQueue updatedTransaction: com.preteethai.dentist.subscription.monthly 0
2022-09-02 15:02:39.356276+0800 PreteethAIPro[8527:584505] [Purchases] - WARN: 🍎‼️ There is a problem with the SKPaymentTransaction missing a transaction date - this is an issue with the App Store. Unix Epoch will be used instead.
Transactions in the backend and in webhooks are unaffected and will have the correct timestamps. This is a bug in StoreKit 1. To prevent running into this issue on devices running iOS 15+, watchOS 8+, macOS 12+, and tvOS 15+, you can set `usesStoreKit2IfAvailable` to true when calling `configure`.
2022-09-02 15:02:39.356392+0800 PreteethAIPro[8527:584505] [Purchases] - WARN: 🍎‼️ There is a problem with the SKPaymentTransaction missing a transaction identifier - this is an issue with the App Store.Transactions in the backend and in webhooks are unaffected and will have the correct identifier. This is a bug in StoreKit 1. To prevent running into this issue on devices running iOS 15+, watchOS 8+, macOS 12+, and tvOS 15+, you can set `usesStoreKit2IfAvailable` to true when calling `configure`.
2022-09-02 15:02:41.991024+0800 PreteethAIPro[8527:585090] [tcp] tcp_input [C2.1.1:3] flags=[R] seq=770651323, ack=0, win=0 state=LAST_ACK rcv_nxt=770651323, snd_una=145395136
2022-09-02 15:02:41.992037+0800 PreteethAIPro[8527:585090] [tcp] tcp_input [C2.1.1:3] flags=[R] seq=770651323, ack=0, win=0 state=CLOSED rcv_nxt=770651323, snd_una=145395136
-> applicationWillResignActive()
-> applicationDidBecomeActive()
2022-09-02 15:03:08.034896+0800 PreteethAIPro[8527:584505] [Purchases] - DEBUG: ℹ️ applicationDidBecomeActive
-> applicationWillResignActive()
-> applicationDidBecomeActive()
2022-09-02 15:03:20.394589+0800 PreteethAIPro[8527:584505] [Purchases] - DEBUG: ℹ️ applicationDidBecomeActive
2022-09-02 15:03:20.558321+0800 PreteethAIPro[8527:584505] [Purchases] - DEBUG: ℹ️ PaymentQueue updatedTransaction: com.preteethai.dentist.subscription.monthly 2000000144938720 2000000143341334 1
2022-09-02 15:03:20.559361+0800 PreteethAIPro[8527:584505] [Purchases] - DEBUG: ℹ️ Force refreshing the receipt to get latest transactions from Apple.
2022-09-02 15:03:22.177476+0800 PreteethAIPro[8527:585552] [Purchases] - DEBUG: ℹ️ Loaded receipt from url file:///private/var/mobile/Containers/Data/Application/DED4A1FD-D7DC-439E-B212-40B66F9BB70B/StoreKit/sandboxReceipt
2022-09-02 15:03:22.177612+0800 PreteethAIPro[8527:585344] [Purchases] - DEBUG: ℹ️ Skipping products request because products were already cached. products: ["com.preteethai.dentist.subscription.monthly"]
2022-09-02 15:03:22.177876+0800 PreteethAIPro[8527:584505] [Purchases] - DEBUG: ℹ️ Found 0 unsynced attributes for App User ID: v0kpCeNMD0UsHZIFNyDZW5uUc0x1
2022-09-02 15:03:22.188387+0800 PreteethAIPro[8527:585344] [Purchases] - DEBUG: ℹ️ PostReceiptDataOperation: Started
2022-09-02 15:03:22.188455+0800 PreteethAIPro[8527:585344] [Purchases] - DEBUG: ℹ️ There are no requests currently running, starting request POST receipts
2022-09-02 15:03:22.190839+0800 PreteethAIPro[8527:585344] [Purchases] - DEBUG: ℹ️ API request started: POST /v1/receipts
2022-09-02 15:03:24.999318+0800 PreteethAIPro[8527:585344] [Purchases] - DEBUG: ℹ️ API request completed: POST /v1/receipts 200
2022-09-02 15:03:25.024815+0800 PreteethAIPro[8527:585344] [Purchases] - DEBUG: ℹ️ PostReceiptDataOperation: Finished
2022-09-02 15:03:25.025304+0800 PreteethAIPro[8527:585344] [Purchases] - DEBUG: ℹ️ Serial request done: POST receipts, 0 requests left in the queue
2022-09-02 15:03:25.030774+0800 PreteethAIPro[8527:584505] [Purchases] - DEBUG: ℹ️ Sending updated CustomerInfo to delegate.
2022-09-02 15:03:25.031144+0800 PreteethAIPro[8527:584505] [Purchases] - INFO: 😻💰 Purchased product - 'com.preteethai.dentist.subscription.monthly'
2022-09-02 15:03:25.031974+0800 PreteethAIPro[8527:584505] json = {"productIdentifier":"com.preteethai.dentist.subscription.monthly","userCancelled":false,"customerInfo":{"originalPurchaseDateMillis":1375340400000,"latestExpirationDate":"2022-09-02T07:08:11Z","activeSubscriptions":["com.preteethai.dentist.subscription.monthly"],"firstSeen":"2022-09-01T04:16:22Z","allExpirationDates":{"com.preteethai.dentist.subscription.month":"2022-08-24T07:10:54Z","com.preteethai.dentist.subscription.pro":"2022-08-16T18:14:41Z","com.preteethai.dentist.subscription.monthly":"2022-09-02T07:08:11Z"},"managementURL":"https:\/\/apps.apple.com\/account\/subscriptions","requestDate":"2022-09-02T07:03:24Z","originalApplicationVersion":"1.0","allPurchaseDates":{"com.preteethai.dentist.subscription.pro":"2022-08-16T18:09:41Z","com.preteethai.dentist.subscription.month":"2022-08-24T07:05:54Z","com.preteethai.dentist.subscription.monthly":"2022-09-02T07:03:11Z"},"allPurchasedProductIdentifiers":["com.preteethai.dentist.subscription.monthly","com.preteethai.dentist.subscription.pro","com.preteethai.dentist.subscription.month"],"allPurchaseDatesMillis":{"com.preteethai.dentist.subscription.month":1661324754000,"com.preteethai.dentist.subscription.monthly":1662102191000,"com.preteethai.dentist.subscription.pro":1660673381000},"nonSubscriptionTransactions":[],"requestDateMillis":1662102204000,"entitlements":{"all":{"pro":{"productIdentifier":"com.preteethai.dentist.subscription.monthly","periodType":"NORMAL","latestPurchaseDate":"2022-09-02T07:03:11Z","originalPurchaseDate":"2022-08-31T14:01:28Z","store":"APP_STORE","unsubscribedDetectedAt":null,"originalPurchaseDateMillis":1661954488000,"latestPurchaseDateMillis":1662102191000,"expirationDateMillis":1662102491000,"willRenew":true,"expirationDate":"2022-09-02T07:08:11Z","billingIssueDetectedAt":null,"isSandbox":true,"unsubscribedDetectedAtMillis":null,"billingIssueDetectedAtMillis":null,"ownershipType":"PURCHASED","identifier":"pro","isActive":true}},"active":{"pro":{"isActive":true,"latestPurchaseDateMillis":1662102191000,"periodType":"NORMAL","willRenew":true,"unsubscribedDetectedAtMillis":null,"originalPurchaseDateMillis":1661954488000,"expirationDateMillis":1662102491000,"identifier":"pro","productIdentifier":"com.preteethai.dentist.subscription.monthly","unsubscribedDetectedAt":null,"ownershipType":"PURCHASED","originalPurchaseDate":"2022-08-31T14:01:28Z","store":"APP_STORE","isSandbox":true,"latestPurchaseDate":"2022-09-02T07:03:11Z","billingIssueDetectedAt":null,"billingIssueDetectedAtMillis":null,"expirationDate":"2022-09-02T07:08:11Z"}}},"firstSeenMillis":1662005782000,"originalPurchaseDate":"2013-08-01T07:00:00Z","latestExpirationDateMillis":1662102491000,"originalAppUserId":"$RCAnonymousID:e3b37ae862c941febc374494917cc0b0","allExpirationDatesMillis":{"com.preteethai.dentist.subscription.monthly":1662102491000,"com.preteethai.dentist.subscription.pro":1660673681000,"com.preteethai.dentist.subscription.month":1661325054000}}}
2022-09-02 15:03:25.032486+0800 PreteethAIPro[8527:584505] [Purchases] - INFO: 💰 Finishing transaction com.preteethai.dentist.subscription.monthly 2000000144938720 (2000000143341334)
_makePurchase {"productIdentifier":"com.preteethai.dentist.subscription.monthly","userCancelled":false,"customerInfo":{"originalPurchaseDateMillis":1375340400000,"latestExpirationDate":"2022-09-02T07:08:11Z","activeSubscriptions":["com.preteethai.dentist.subscription.monthly"],"firstSeen":"2022-09-01T04:16:22Z","allExpirationDates":{"com.preteethai.dentist.subscription.month":"2022-08-24T07:10:54Z","com.preteethai.dentist.subscription.pro":"2022-08-16T18:14:41Z","com.preteethai.dentist.subscription.monthly":"2022-09-02T07:08:11Z"},"managementURL":"https:\/\/apps.apple.com\/account\/subscriptions","requestDate":"2022-09-02T07:03:24Z","originalApplicationVersion":"1.0","allPurchaseDates":{"com.preteethai.dentist.subscription.pro":"2022-08-16T18:09:41Z","com.preteethai.dentist.subscription.month":"2022-08-24T07:05:54Z","com.preteethai.dentist.subscription.monthly":"2022-09-02T07:03:11Z"},"allPurchasedProductIdentifiers":["com.preteethai.dentist.subscription.monthly","com.preteethai.dentist.subscription.pro","com.preteethai.dentist.subscription.month"],"allPurchaseDatesMillis":{"com.preteethai.dentist.subscription.month":1661324754000,"com.preteethai.dentist.subscription.monthly":1662102191000,"com.preteethai.dentist.subscription.pro":1660673381000},"nonSubscriptionTransactions":[],"requestDateMillis":1662102204000,"entitlements":{"all":{"pro":{"productIdentifier":"com.preteethai.dentist.subscription.monthly","periodType":"NORMAL","latestPurchaseDate":"2022-09-02T07:03:11Z","originalPurchaseDate":"2022-08-31T14:01:28Z","store":"APP_STORE","unsubscribedDetectedAt":null,"originalPurchaseDateMillis":1661954488000,"latestPurchaseDateMillis":1662102191000,"expirationDateMillis":1662102491000,"willRenew":true,"expirationDate":"2022-09-02T07:08:11Z","billingIssueDetectedAt":null,"isSandbox":true,"unsubscribedDetectedAtMillis":null,"billingIssueDetectedAtMillis":null,"ownershipType":"PURCHASED","identifier":"pro","isActive":true}},"active":{"pro":{"isActive":true,"latestPurchaseDateMillis":1662102191000,"periodType":"NORMAL","willRenew":true,"unsubscribedDetectedAtMillis":null,"originalPurchaseDateMillis":1661954488000,"expirationDateMillis":1662102491000,"identifier":"pro","productIdentifier":"com.preteethai.dentist.subscription.monthly","unsubscribedDetectedAt":null,"ownershipType":"PURCHASED","originalPurchaseDate":"2022-08-31T14:01:28Z","store":"APP_STORE","isSandbox":true,"latestPurchaseDate":"2022-09-02T07:03:11Z","billingIssueDetectedAt":null,"billingIssueDetectedAtMillis":null,"expirationDate":"2022-09-02T07:08:11Z"}}},"firstSeenMillis":1662005782000,"originalPurchaseDate":"2013-08-01T07:00:00Z","latestExpirationDateMillis":1662102491000,"originalAppUserId":"$RCAnonymousID:e3b37ae862c941febc374494917cc0b0","allExpirationDatesMillis":{"com.preteethai.dentist.subscription.monthly":1662102491000,"com.preteethai.dentist.subscription.pro":1660673681000,"com.preteethai.dentist.subscription.month":1661325054000}}}
Purchases:_makePurchase(String)
Finished purchase com.preteethai.dentist.subscription.monthly!
RevenueCatPurchaseManager:<BeginPurchase>b__25_0(String, CustomerInfo, Boolean, Error)
MakePurchaseFunc:Invoke(String, CustomerInfo, Boolean, Error)
Purchases:_makePurchase(String)
Updated UI: isSubscribed = true
RevenueCatPurchaseManager:UpdateUI()
MakePurchaseFunc:Invoke(String, CustomerInfo, Boolean, Error)
Purchases:_makePurchase(String)
2022-09-02 15:03:26.352222+0800 PreteethAIPro[8527:584505] [Purchases] - DEBUG: ℹ️ PaymentQueue removedTransaction: com.preteethai.dentist.subscription.monthly 2000000144938720 2000000143341334 1
Got all offerings!
RevenueCatPurchaseManager:InitializePurchases()
2022-09-02 15:51:09.439711+0800 PreteethAIPro[8912:601870] [Purchases] - DEBUG: ℹ️ Vending Offerings from cache
2022-09-02 15:51:09.440008+0800 PreteethAIPro[8912:601870] [Purchases] - WARN: ⚠️ This StoreProduct represents an SK1 product, the type of product cannot be determined, the value will be undefined. Use `StoreProduct.productCategory` instead.
2022-09-02 15:51:09.440218+0800 PreteethAIPro[8912:601870] [Purchases] - WARN: ⚠️ This StoreProduct represents an SK1 product, the type of product cannot be determined, the value will be undefined. Use `StoreProduct.productCategory` instead.
2022-09-02 15:51:09.440379+0800 PreteethAIPro[8912:601870] [Purchases] - WARN: ⚠️ This StoreProduct represents an SK1 product, the type of product cannot be determined, the value will be undefined. Use `StoreProduct.productCategory` instead.
2022-09-02 15:51:09.440506+0800 PreteethAIPro[8912:601870] [Purchases] - WARN: ⚠️ This StoreProduct represents an SK1 product, the type of product cannot be determined, the value will be undefined. Use `StoreProduct.productCategory` instead.
2022-09-02 15:51:09.440649+0800 PreteethAIPro[8912:601870] [Purchases] - WARN: ⚠️ This StoreProduct represents an SK1 product, the type of product cannot be determined, the value will be undefined. Use `StoreProduct.productCategory` instead.
2022-09-02 15:51:09.440776+0800 PreteethAIPro[8912:601870] [Purchases] - WARN: ⚠️ This StoreProduct represents an SK1 product, the type of product cannot be determined, the value will be undefined. Use `StoreProduct.productCategory` instead.
2022-09-02 15:51:09.440884+0800 PreteethAIPro[8912:601870] [Purchases] - WARN: ⚠️ This StoreProduct represents an SK1 product, the type of product cannot be determined, the value will be undefined. Use `StoreProduct.productCategory` instead.
2022-09-02 15:51:09.440993+0800 PreteethAIPro[8912:601870] [Purchases] - WARN: ⚠️ This StoreProduct represents an SK1 product, the type of product cannot be determined, the value will be undefined. Use `StoreProduct.productCategory` instead.
2022-09-02 15:51:09.441342+0800 PreteethAIPro[8912:601870] json = {"offerings":{"current":{"annual":{"identifier":"$rc_annual","packageType":"ANNUAL","offeringIdentifier":"default","product":{"currencyCode":"TWD","identifier":"com.preteethai.dentist.subscription.annual","productCategory":"SUBSCRIPTION","introPrice":{"cycles":1,"price":0,"periodNumberOfUnits":1,"periodUnit":"MONTH","priceString":"$0.00","period":"P1M"},"description":"Preteeth AI Pro Annual","price":15900,"productType":"NON_CONSUMABLE","discounts":[],"priceString":"$15,900.00","title":"Preteeth AI Pro Annual"}},"serverDescription":"The standard set of packages","availablePackages":[{"identifier":"$rc_annual","product":{"price":15900,"priceString":"$15,900.00","currencyCode":"TWD","discounts":[],"identifier":"com.preteethai.dentist.subscription.annual","description":"Preteeth AI Pro Annual","productCategory":"SUBSCRIPTION","productType":"NON_CONSUMABLE","title":"Preteeth AI Pro Annual","introPrice":{"priceString":"$0.00","cycles":1,"period":"P1M","price":0,"periodUnit":"MONTH","periodNumberOfUnits":1}},"offeringIdentifier":"default","packageType":"ANNUAL"},{"offeringIdentifier":"default","packageType":"MONTHLY","identifier":"$rc_monthly","product":{"title":"Preteeth AI Pro Monthly","productType":"NON_CONSUMABLE","identifier":"com.preteethai.dentist.subscription.monthly","priceString":"$3,290.00","description":"Preteeth AI Pro Monthly","currencyCode":"TWD","productCategory":"SUBSCRIPTION","discounts":[],"introPrice":{"periodNumberOfUnits":1,"cycles":1,"priceString":"$0.00","price":0,"period":"P1M","periodUnit":"MONTH"},"price":3290}}],"identifier":"default","monthly":{"identifier":"$rc_monthly","product":{"price":3290,"productType":"NON_CONSUMABLE","title":"Preteeth AI Pro Monthly","discounts":[],"description":"Preteeth AI Pro Monthly","introPrice":{"priceString":"$0.00","period":"P1M","periodUnit":"MONTH","price":0,"periodNumberOfUnits":1,"cycles":1},"priceString":"$3,290.00","currencyCode":"TWD","productCategory":"SUBSCRIPTION","identifier":"com.preteethai.dentist.subscription.monthly"},"offeringIdentifier":"default","packageType":"MONTHLY"}},"all":{"default":{"annual":{"product":{"title":"Preteeth AI Pro Annual","productCategory":"SUBSCRIPTION","currencyCode":"TWD","description":"Preteeth AI Pro Annual","introPrice":{"period":"P1M","cycles":1,"price":0,"periodUnit":"MONTH","periodNumberOfUnits":1,"priceString":"$0.00"},"productType":"NON_CONSUMABLE","price":15900,"identifier":"com.preteethai.dentist.subscription.annual","discounts":[],"priceString":"$15,900.00"},"offeringIdentifier":"default","packageType":"ANNUAL","identifier":"$rc_annual"},"identifier":"default","availablePackages":[{"identifier":"$rc_annual","packageType":"ANNUAL","offeringIdentifier":"default","product":{"identifier":"com.preteethai.dentist.subscription.annual","introPrice":{"priceString":"$0.00","periodNumberOfUnits":1,"periodUnit":"MONTH","period":"P1M","cycles":1,"price":0},"price":15900,"description":"Preteeth AI Pro Annual","productType":"NON_CONSUMABLE","title":"Preteeth AI Pro Annual","productCategory":"SUBSCRIPTION","priceString":"$15,900.00","currencyCode":"TWD","discounts":[]}},{"packageType":"MONTHLY","product":{"productType":"NON_CONSUMABLE","priceString":"$3,290.00","currencyCode":"TWD","introPrice":{"cycles":1,"period":"P1M","periodNumberOfUnits":1,"periodUnit":"MONTH","price":0,"priceString":"$0.00"},"productCategory":"SUBSCRIPTION","title":"Preteeth AI Pro Monthly","identifier":"com.preteethai.dentist.subscription.monthly","description":"Preteeth AI Pro Monthly","price":3290,"discounts":[]},"identifier":"$rc_monthly","offeringIdentifier":"default"}],"monthly":{"identifier":"$rc_monthly","packageType":"MONTHLY","product":{"title":"Preteeth AI Pro Monthly","discounts":[],"identifier":"com.preteethai.dentist.subscription.monthly","priceString":"$3,290.00","price":3290,"introPrice":{"price":0,"periodNumberOfUnits":1,"periodUnit":"MONTH","priceString":"$0.00","period":"P1M","cycles":1},"productCategory":"SUBSCRIPTION","currencyCode":"TWD","description":"Preteeth AI Pro Monthly","productType":"NON_CONSUMABLE"},"offeringIdentifier":"default"},"serverDescription":"The standard set of packages"}}}}
_getOfferings {"offerings":{"current":{"annual":{"identifier":"$rc_annual","packageType":"ANNUAL","offeringIdentifier":"default","product":{"currencyCode":"TWD","identifier":"com.preteethai.dentist.subscription.annual","productCategory":"SUBSCRIPTION","introPrice":{"cycles":1,"price":0,"periodNumberOfUnits":1,"periodUnit":"MONTH","priceString":"$0.00","period":"P1M"},"description":"Preteeth AI Pro Annual","price":15900,"productType":"NON_CONSUMABLE","discounts":[],"priceString":"$15,900.00","title":"Preteeth AI Pro Annual"}},"serverDescription":"The standard set of packages","availablePackages":[{"identifier":"$rc_annual","product":{"price":15900,"priceString":"$15,900.00","currencyCode":"TWD","discounts":[],"identifier":"com.preteethai.dentist.subscription.annual","description":"Preteeth AI Pro Annual","productCategory":"SUBSCRIPTION","productType":"NON_CONSUMABLE","title":"Preteeth AI Pro Annual","introPrice":{"priceString":"$0.00","cycles":1,"period":"P1M","price":0,"periodUnit":"MONTH","periodNumberOfUnits":1}},"offeringIdentifier":"default","packageType":"ANNUAL"},{"offeringIdentifier":"default","packageType":"MONTHLY","identifier":"$rc_monthly","product":{"title":"Preteeth AI Pro Monthly","productType":"NON_CONSUMABLE","identifier":"com.preteethai.dentist.subscription.monthly","priceString":"$3,290.00","description":"Preteeth AI Pro Monthly","currencyCode":"TWD","productCategory":"SUBSCRIPTION","discounts":[],"introPrice":{"periodNumberOfUnits":1,"cycles":1,"priceString":"$0.00","price":0,"period":"P1M","periodUnit":"MONTH"},"price":3290}}],"identifier":"default","monthly":{"identifier":"$rc_monthly","product":{"price":3290,"productType":"NON_CONSUMABLE","title":"Preteeth AI Pro Monthly","discounts":[],"description":"Preteeth AI Pro Monthly","introPrice":{"priceString":"$0.00","period":"P1M","periodUnit":"MONTH","price":0,"periodNumberOfUnits":1,"cycles":1},"priceString":"$3,290.00","currencyCode":"TWD","productCategory":"SUBSCRIPTION","identifier":"com.preteethai.dentist.subscription.monthly"},"offeringIdentifier":"default","packageType":"MONTHLY"}},"all":{"default":{"annual":{"product":{"title":"Preteeth AI Pro Annual","productCategory":"SUBSCRIPTION","currencyCode":"TWD","description":"Preteeth AI Pro Annual","introPrice":{"period":"P1M","cycles":1,"price":0,"periodUnit":"MONTH","periodNumberOfUnits":1,"priceString":"$0.00"},"productType":"NON_CONSUMABLE","price":15900,"identifier":"com.preteethai.dentist.subscription.annual","discounts":[],"priceString":"$15,900.00"},"offeringIdentifier":"default","packageType":"ANNUAL","identifier":"$rc_annual"},"identifier":"default","availablePackages":[{"identifier":"$rc_annual","packageType":"ANNUAL","offeringIdentifier":"default","product":{"identifier":"com.preteethai.dentist.subscription.annual","introPrice":{"priceString":"$0.00","periodNumberOfUnits":1,"periodUnit":"MONTH","period":"P1M","cycles":1,"price":0},"price":15900,"description":"Preteeth AI Pro Annual","productType":"NON_CONSUMABLE","title":"Preteeth AI Pro Annual","productCategory":"SUBSCRIPTION","priceString":"$15,900.00","currencyCode":"TWD","discounts":[]}},{"packageType":"MONTHLY","product":{"productType":"NON_CONSUMABLE","priceString":"$3,290.00","currencyCode":"TWD","introPrice":{"cycles":1,"period":"P1M","periodNumberOfUnits":1,"periodUnit":"MONTH","price":0,"priceString":"$0.00"},"productCategory":"SUBSCRIPTION","title":"Preteeth AI Pro Monthly","identifier":"com.preteethai.dentist.subscription.monthly","description":"Preteeth AI Pro Monthly","price":3290,"discounts":[]},"identifier":"$rc_monthly","offeringIdentifier":"default"}],"monthly":{"identifier":"$rc_monthly","packageType":"MONTHLY","product":{"title":"Preteeth AI Pro Monthly","discounts":[],"identifier":"com.preteethai.dentist.subscription.monthly","priceString":"$3,290.00","price":3290,"introPrice":{"price":0,"periodNumberOfUnits":1,"periodUnit":"MONTH","priceString":"$0.00","period":"P1M","cycles":1},"productCategory":"SUBSCRIPTION","currencyCode":"TWD","description":"Preteeth AI Pro Monthly","productType":"NON_CONSUMABLE"},"offeringIdentifier":"default"},"serverDescription":"The standard set of packages"}}}}
Purchases:_getOfferings(String)
Purchases GetOfferings succeeded!
RevenueCatPurchaseManager:<GetOfferingsAndSetIsSubscribedAndLogIn>b__17_0(Offerings, Error)
GetOfferingsFunc:Invoke(Offerings, Error)
Purchases:_getOfferings(String)
2022-09-02 15:51:09.449966+0800 PreteethAIPro[8912:601870] [Purchases] - DEBUG: ℹ️ Vending CustomerInfo from cache.
2022-09-02 15:51:09.450790+0800 PreteethAIPro[8912:601870] json = {"customerInfo":{"firstSeen":"2022-09-01T04:16:22Z","originalPurchaseDate":"2013-08-01T07:00:00Z","originalApplicationVersion":"1.0","nonSubscriptionTransactions":[],"requestDate":"2022-09-02T07:50:21Z","allExpirationDatesMillis":{"com.preteethai.dentist.subscription.monthly":1662105008000,"com.preteethai.dentist.subscription.month":1661325054000,"com.preteethai.dentist.subscription.pro":1660673681000},"allPurchasedProductIdentifiers":["com.preteethai.dentist.subscription.month","com.preteethai.dentist.subscription.monthly","com.preteethai.dentist.subscription.pro"],"originalAppUserId":"$RCAnonymousID:e3b37ae862c941febc374494917cc0b0","activeSubscriptions":[],"allPurchaseDates":{"com.preteethai.dentist.subscription.month":"2022-08-24T07:05:54Z","com.preteethai.dentist.subscription.monthly":"2022-09-02T07:45:08Z","com.preteethai.dentist.subscription.pro":"2022-08-16T18:09:41Z"},"firstSeenMillis":1662005782000,"originalPurchaseDateMillis":1375340400000,"requestDateMillis":1662105021000,"latestExpirationDateMillis":1662105008000,"entitlements":{"active":{},"all":{"pro":{"expirationDate":"2022-09-02T07:50:08Z","expirationDateMillis":1662105008000,"originalPurchaseDateMillis":1661954488000,"ownershipType":"PURCHASED","latestPurchaseDate":"2022-09-02T07:45:08Z","unsubscribedDetectedAt":"2022-09-02T07:45:00Z","billingIssueDetectedAtMillis":null,"billingIssueDetectedAt":null,"productIdentifier":"com.preteethai.dentist.subscription.monthly","willRenew":false,"store":"APP_STORE","isSandbox":true,"latestPurchaseDateMillis":1662104708000,"periodType":"NORMAL","isActive":false,"unsubscribedDetectedAtMillis":1662104700000,"identifier":"pro","originalPurchaseDate":"2022-08-31T14:01:28Z"}}},"latestExpirationDate":"2022-09-02T07:50:08Z","allExpirationDates":{"com.preteethai.dentist.subscription.monthly":"2022-09-02T07:50:08Z","com.preteethai.dentist.subscription.month":"2022-08-24T07:10:54Z","com.preteethai.dentist.subscription.pro":"2022-08-16T18:14:41Z"},"allPurchaseDatesMillis":{"com.preteethai.dentist.subscription.month":1661324754000,"com.preteethai.dentist.subscription.monthly":1662104708000,"com.preteethai.dentist.subscription.pro":1660673381000},"managementURL":null}}
_getCustomerInfo {"customerInfo":{"firstSeen":"2022-09-01T04:16:22Z","originalPurchaseDate":"2013-08-01T07:00:00Z","originalApplicationVersion":"1.0","nonSubscriptionTransactions":[],"requestDate":"2022-09-02T07:50:21Z","allExpirationDatesMillis":{"com.preteethai.dentist.subscription.monthly":1662105008000,"com.preteethai.dentist.subscription.month":1661325054000,"com.preteethai.dentist.subscription.pro":1660673681000},"allPurchasedProductIdentifiers":["com.preteethai.dentist.subscription.month","com.preteethai.dentist.subscription.monthly","com.preteethai.dentist.subscription.pro"],"originalAppUserId":"$RCAnonymousID:e3b37ae862c941febc374494917cc0b0","activeSubscriptions":[],"allPurchaseDates":{"com.preteethai.dentist.subscription.month":"2022-08-24T07:05:54Z","com.preteethai.dentist.subscription.monthly":"2022-09-02T07:45:08Z","com.preteethai.dentist.subscription.pro":"2022-08-16T18:09:41Z"},"firstSeenMillis":1662005782000,"originalPurchaseDateMillis":1375340400000,"requestDateMillis":1662105021000,"latestExpirationDateMillis":1662105008000,"entitlements":{"active":{},"all":{"pro":{"expirationDate":"2022-09-02T07:50:08Z","expirationDateMillis":1662105008000,"originalPurchaseDateMillis":1661954488000,"ownershipType":"PURCHASED","latestPurchaseDate":"2022-09-02T07:45:08Z","unsubscribedDetectedAt":"2022-09-02T07:45:00Z","billingIssueDetectedAtMillis":null,"billingIssueDetectedAt":null,"productIdentifier":"com.preteethai.dentist.subscription.monthly","willRenew":false,"store":"APP_STORE","isSandbox":true,"latestPurchaseDateMillis":1662104708000,"periodType":"NORMAL","isActive":false,"unsubscribedDetectedAtMillis":1662104700000,"identifier":"pro","originalPurchaseDate":"2022-08-31T14:01:28Z"}}},"latestExpirationDate":"2022-09-02T07:50:08Z","allExpirationDates":{"com.preteethai.dentist.subscription.monthly":"2022-09-02T07:50:08Z","com.preteethai.dentist.subscription.month":"2022-08-24T07:10:54Z","com.preteethai.dentist.subscription.pro":"2022-08-16T18:14:41Z"},"allPurchaseDatesMillis":{"com.preteethai.dentist.subscription.month":1661324754000,"com.preteethai.dentist.subscription.monthly":1662104708000,"com.preteethai.dentist.subscription.pro":1660673381000},"managementURL":null}}
Purchases:_getCustomerInfo(String)
2022-09-02 15:51:09.455865+0800 PreteethAIPro[8912:602178] [Purchases] - WARN: ⚠️ The appUserID passed to logIn is the same as the one already cached. No action will be taken.
2022-09-02 15:51:09.458551+0800 PreteethAIPro[8912:602178] [Purchases] - DEBUG: ℹ️ Vending CustomerInfo from cache.
2022-09-02 15:51:09.458830+0800 PreteethAIPro[8912:601870] json = {"created":false,"customerInfo":{"latestExpirationDateMillis":1662105008000,"allPurchaseDates":{"com.preteethai.dentist.subscription.pro":"2022-08-16T18:09:41Z","com.preteethai.dentist.subscription.monthly":"2022-09-02T07:45:08Z","com.preteethai.dentist.subscription.month":"2022-08-24T07:05:54Z"},"originalPurchaseDate":"2013-08-01T07:00:00Z","entitlements":{"all":{"pro":{"periodType":"NORMAL","latestPurchaseDate":"2022-09-02T07:45:08Z","originalPurchaseDateMillis":1661954488000,"ownershipType":"PURCHASED","store":"APP_STORE","isSandbox":true,"unsubscribedDetectedAt":"2022-09-02T07:45:00Z","billingIssueDetectedAt":null,"unsubscribedDetectedAtMillis":1662104700000,"expirationDate":"2022-09-02T07:50:08Z","billingIssueDetectedAtMillis":null,"willRenew":false,"latestPurchaseDateMillis":1662104708000,"originalPurchaseDate":"2022-08-31T14:01:28Z","expirationDateMillis":1662105008000,"identifier":"pro","productIdentifier":"com.preteethai.dentist.subscription.monthly","isActive":false}},"active":{}},"originalPurchaseDateMillis":1375340400000,"nonSubscriptionTransactions":[],"firstSeenMillis":1662005782000,"originalAppUserId":"$RCAnonymousID:e3b37ae862c941febc374494917cc0b0","activeSubscriptions":[],"managementURL":null,"requestDate":"2022-09-02T07:50:21Z","allPurchasedProductIdentifiers":["com.preteethai.dentist.subscription.month","com.preteethai.dentist.subscription.monthly","com.preteethai.dentist.subscription.pro"],"latestExpirationDate":"2022-09-02T07:50:08Z","firstSeen":"2022-09-01T04:16:22Z","allPurchaseDatesMillis":{"com.preteethai.dentist.subscription.pro":1660673381000,"com.preteethai.dentist.subscription.month":1661324754000,"com.preteethai.dentist.subscription.monthly":1662104708000},"originalApplicationVersion":"1.0","allExpirationDatesMillis":{"com.preteethai.dentist.subscription.pro":1660673681000,"com.preteethai.dentist.subscription.monthly":1662105008000,"com.preteethai.dentist.subscription.month":1661325054000},"requestDateMillis":1662105021000,"allExpirationDates":{"com.preteethai.dentist.subscription.month":"2022-08-24T07:10:54Z","com.preteethai.dentist.subscription.pro":"2022-08-16T18:14:41Z","com.preteethai.dentist.subscription.monthly":"2022-09-02T07:50:08Z"}}}
2022-09-02 15:51:09.459761+0800 PreteethAIPro[8912:602178] [Purchases] - DEBUG: ℹ️ GetOfferingsOperation: Started
2022-09-02 15:51:09.459816+0800 PreteethAIPro[8912:602178] [Purchases] - DEBUG: ℹ️ There are no requests currently running, starting request GET subscribers/v0kpCeNMD0UsHZIFNyDZW5uUc0x1/offerings
2022-09-02 15:51:09.460579+0800 PreteethAIPro[8912:602178] [Purchases] - DEBUG: ℹ️ API request started: GET /v1/subscribers/v0kpCeNMD0UsHZIFNyDZW5uUc0x1/offerings
_logIn {"created":false,"customerInfo":{"latestExpirationDateMillis":1662105008000,"allPurchaseDates":{"com.preteethai.dentist.subscription.pro":"2022-08-16T18:09:41Z","com.preteethai.dentist.subscription.monthly":"2022-09-02T07:45:08Z","com.preteethai.dentist.subscription.month":"2022-08-24T07:05:54Z"},"originalPurchaseDate":"2013-08-01T07:00:00Z","entitlements":{"all":{"pro":{"periodType":"NORMAL","latestPurchaseDate":"2022-09-02T07:45:08Z","originalPurchaseDateMillis":1661954488000,"ownershipType":"PURCHASED","store":"APP_STORE","isSandbox":true,"unsubscribedDetectedAt":"2022-09-02T07:45:00Z","billingIssueDetectedAt":null,"unsubscribedDetectedAtMillis":1662104700000,"expirationDate":"2022-09-02T07:50:08Z","billingIssueDetectedAtMillis":null,"willRenew":false,"latestPurchaseDateMillis":1662104708000,"originalPurchaseDate":"2022-08-31T14:01:28Z","expirationDateMillis":1662105008000,"identifier":"pro","productIdentifier":"com.preteethai.dentist.subscription.monthly","isActive":false}},"active":{}},"originalPurchaseDateMillis":1375340400000,"nonSubscriptionTransactions":[],"firstSeenMillis":1662005782000,"originalAppUserId":"$RCAnonymousID:e3b37ae862c941febc374494917cc0b0","activeSubscriptions":[],"managementURL":null,"requestDate":"2022-09-02T07:50:21Z","allPurchasedProductIdentifiers":["com.preteethai.dentist.subscription.month","com.preteethai.dentist.subscription.monthly","com.preteethai.dentist.subscription.pro"],"latestExpirationDate":"2022-09-02T07:50:08Z","firstSeen":"2022-09-01T04:16:22Z","allPurchaseDatesMillis":{"com.preteethai.dentist.subscription.pro":1660673381000,"com.preteethai.dentist.subscription.month":1661324754000,"com.preteethai.dentist.subscription.monthly":1662104708000},"originalApplicationVersion":"1.0","allExpirationDatesMillis":{"com.preteethai.dentist.subscription.pro":1660673681000,"com.preteethai.dentist.subscription.monthly":1662105008000,"com.preteethai.dentist.subscription.month":1661325054000},"requestDateMillis":1662105021000,"allExpirationDates":{"com.preteethai.dentist.subscription.month":"2022-08-24T07:10:54Z","com.preteethai.dentist.subscription.pro":"2022-08-16T18:14:41Z","com.preteethai.dentist.subscription.monthly":"2022-09-02T07:50:08Z"}}}
Purchases:_logIn(String)
Successfully set user id v0kpCeNMD0UsHZIFNyDZW5uUc0x1 for revenue cat purchase manager!
RevenueCatPurchaseManager:<LogIn>b__19_0(CustomerInfo, Boolean, Error)
LogInFunc:Invoke(CustomerInfo, Boolean, Error)
Purchases:_logIn(String)
Updated UI: isSubscribed = false
RevenueCatPurchaseManager:UpdateUI()
RevenueCatPurchaseManager:<LogIn>b__19_0(CustomerInfo, Boolean, Error)
LogInFunc:Invoke(CustomerInfo, Boolean, Error)
Purchases:_logIn(String)
2022-09-02 15:51:10.129313+0800 PreteethAIPro[8912:602179] [Purchases] - DEBUG: ℹ️ API request completed: GET /v1/subscribers/v0kpCeNMD0UsHZIFNyDZW5uUc0x1/offerings 304
2022-09-02 15:51:10.131973+0800 PreteethAIPro[8912:602179] [Purchases] - DEBUG: ℹ️ GetOfferingsOperation: Finished
2022-09-02 15:51:10.132483+0800 PreteethAIPro[8912:602229] [Purchases] - DEBUG: ℹ️ Skipping products request because products were already cached. products: ["com.preteethai.dentist.subscription.monthly", "com.preteethai.dentist.subscription.annual"]
2022-09-02 15:51:10.132772+0800 PreteethAIPro[8912:602179] [Purchases] - DEBUG: ℹ️ Serial request done: GET subscribers/v0kpCeNMD0UsHZIFNyDZW5uUc0x1/offerings, 0 requests left in the queue
2022-09-02 15:51:18.396275+0800 PreteethAIPro[8912:601870] [Purchases] - DEBUG: ℹ️ Vending Offerings from cache
2022-09-02 15:51:18.396772+0800 PreteethAIPro[8912:601870] [Purchases] - INFO: 💰 Purchasing Product 'com.preteethai.dentist.subscription.monthly' from package in Offering 'default'
2022-09-02 15:51:18.412241+0800 PreteethAIPro[8912:601870] [Purchases] - DEBUG: ℹ️ PaymentQueue updatedTransaction: com.preteethai.dentist.subscription.monthly 2000000144947383 2000000143341334 1
2022-09-02 15:51:18.413108+0800 PreteethAIPro[8912:601870] [Purchases] - DEBUG: ℹ️ Force refreshing the receipt to get latest transactions from Apple.
2022-09-02 15:51:20.456394+0800 PreteethAIPro[8912:602312] [Purchases] - DEBUG: ℹ️ Loaded receipt from url file:///private/var/mobile/Containers/Data/Application/6BAFF1CD-B58D-43A9-8330-629F3CD38B18/StoreKit/sandboxReceipt
2022-09-02 15:51:20.456510+0800 PreteethAIPro[8912:602227] [Purchases] - DEBUG: ℹ️ Skipping products request because products were already cached. products: ["com.preteethai.dentist.subscription.monthly"]
2022-09-02 15:51:20.456812+0800 PreteethAIPro[8912:601870] [Purchases] - DEBUG: ℹ️ Found 0 unsynced attributes for App User ID: v0kpCeNMD0UsHZIFNyDZW5uUc0x1
2022-09-02 15:51:20.466014+0800 PreteethAIPro[8912:602227] [Purchases] - DEBUG: ℹ️ PostReceiptDataOperation: Started
2022-09-02 15:51:20.466090+0800 PreteethAIPro[8912:602227] [Purchases] - DEBUG: ℹ️ There are no requests currently running, starting request POST receipts
2022-09-02 15:51:20.468089+0800 PreteethAIPro[8912:602227] [Purchases] - DEBUG: ℹ️ API request started: POST /v1/receipts
2022-09-02 15:51:22.626768+0800 PreteethAIPro[8912:602312] [Purchases] - DEBUG: ℹ️ API request completed: POST /v1/receipts 200
2022-09-02 15:51:22.650127+0800 PreteethAIPro[8912:602312] [Purchases] - DEBUG: ℹ️ PostReceiptDataOperation: Finished
2022-09-02 15:51:22.650682+0800 PreteethAIPro[8912:602312] [Purchases] - DEBUG: ℹ️ Serial request done: POST receipts, 0 requests left in the queue
2022-09-02 15:51:22.655195+0800 PreteethAIPro[8912:601870] [Purchases] - INFO: 😻💰 Purchased product - 'com.preteethai.dentist.subscription.monthly'
2022-09-02 15:51:22.656296+0800 PreteethAIPro[8912:601870] json = {"productIdentifier":"com.preteethai.dentist.subscription.monthly","userCancelled":false,"customerInfo":{"latestExpirationDate":"2022-09-02T07:50:08Z","firstSeenMillis":1662005782000,"originalAppUserId":"$RCAnonymousID:e3b37ae862c941febc374494917cc0b0","allPurchaseDatesMillis":{"com.preteethai.dentist.subscription.pro":1660673381000,"com.preteethai.dentist.subscription.monthly":1662104708000,"com.preteethai.dentist.subscription.month":1661324754000},"firstSeen":"2022-09-01T04:16:22Z","allPurchasedProductIdentifiers":["com.preteethai.dentist.subscription.pro","com.preteethai.dentist.subscription.month","com.preteethai.dentist.subscription.monthly"],"originalPurchaseDateMillis":1375340400000,"nonSubscriptionTransactions":[],"entitlements":{"active":{},"all":{"pro":{"originalPurchaseDateMillis":1661954488000,"expirationDate":"2022-09-02T07:50:08Z","originalPurchaseDate":"2022-08-31T14:01:28Z","productIdentifier":"com.preteethai.dentist.subscription.monthly","unsubscribedDetectedAtMillis":1662104700000,"ownershipType":"PURCHASED","identifier":"pro","isActive":false,"latestPurchaseDateMillis":1662104708000,"periodType":"NORMAL","billingIssueDetectedAt":null,"unsubscribedDetectedAt":"2022-09-02T07:45:00Z","store":"APP_STORE","isSandbox":true,"billingIssueDetectedAtMillis":null,"expirationDateMillis":1662105008000,"willRenew":false,"latestPurchaseDate":"2022-09-02T07:45:08Z"}}},"originalApplicationVersion":"1.0","latestExpirationDateMillis":1662105008000,"originalPurchaseDate":"2013-08-01T07:00:00Z","allPurchaseDates":{"com.preteethai.dentist.subscription.monthly":"2022-09-02T07:45:08Z","com.preteethai.dentist.subscription.month":"2022-08-24T07:05:54Z","com.preteethai.dentist.subscription.pro":"2022-08-16T18:09:41Z"},"requestDateMillis":1662105082000,"activeSubscriptions":[],"allExpirationDatesMillis":{"com.preteethai.dentist.subscription.month":1661325054000,"com.preteethai.dentist.subscription.monthly":1662105008000,"com.preteethai.dentist.subscription.pro":1660673681000},"allExpirationDates":{"com.preteethai.dentist.subscription.monthly":"2022-09-02T07:50:08Z","com.preteethai.dentist.subscription.pro":"2022-08-16T18:14:41Z","com.preteethai.dentist.subscription.month":"2022-08-24T07:10:54Z"},"managementURL":null,"requestDate":"2022-09-02T07:51:22Z"}}
2022-09-02 15:51:22.657282+0800 PreteethAIPro[8912:601870] [Purchases] - INFO: 💰 Finishing transaction com.preteethai.dentist.subscription.monthly 2000000144947383 (2000000143341334)
_makePurchase {"productIdentifier":"com.preteethai.dentist.subscription.monthly","userCancelled":false,"customerInfo":{"latestExpirationDate":"2022-09-02T07:50:08Z","firstSeenMillis":1662005782000,"originalAppUserId":"$RCAnonymousID:e3b37ae862c941febc374494917cc0b0","allPurchaseDatesMillis":{"com.preteethai.dentist.subscription.pro":1660673381000,"com.preteethai.dentist.subscription.monthly":1662104708000,"com.preteethai.dentist.subscription.month":1661324754000},"firstSeen":"2022-09-01T04:16:22Z","allPurchasedProductIdentifiers":["com.preteethai.dentist.subscription.pro","com.preteethai.dentist.subscription.month","com.preteethai.dentist.subscription.monthly"],"originalPurchaseDateMillis":1375340400000,"nonSubscriptionTransactions":[],"entitlements":{"active":{},"all":{"pro":{"originalPurchaseDateMillis":1661954488000,"expirationDate":"2022-09-02T07:50:08Z","originalPurchaseDate":"2022-08-31T14:01:28Z","productIdentifier":"com.preteethai.dentist.subscription.monthly","unsubscribedDetectedAtMillis":1662104700000,"ownershipType":"PURCHASED","identifier":"pro","isActive":false,"latestPurchaseDateMillis":1662104708000,"periodType":"NORMAL","billingIssueDetectedAt":null,"unsubscribedDetectedAt":"2022-09-02T07:45:00Z","store":"APP_STORE","isSandbox":true,"billingIssueDetectedAtMillis":null,"expirationDateMillis":1662105008000,"willRenew":false,"latestPurchaseDate":"2022-09-02T07:45:08Z"}}},"originalApplicationVersion":"1.0","latestExpirationDateMillis":1662105008000,"originalPurchaseDate":"2013-08-01T07:00:00Z","allPurchaseDates":{"com.preteethai.dentist.subscription.monthly":"2022-09-02T07:45:08Z","com.preteethai.dentist.subscription.month":"2022-08-24T07:05:54Z","com.preteethai.dentist.subscription.pro":"2022-08-16T18:09:41Z"},"requestDateMillis":1662105082000,"activeSubscriptions":[],"allExpirationDatesMillis":{"com.preteethai.dentist.subscription.month":1661325054000,"com.preteethai.dentist.subscription.monthly":1662105008000,"com.preteethai.dentist.subscription.pro":1660673681000},"allExpirationDates":{"com.preteethai.dentist.subscription.monthly":"2022-09-02T07:50:08Z","com.preteethai.dentist.subscription.pro":"2022-08-16T18:14:41Z","com.preteethai.dentist.subscription.month":"2022-08-24T07:10:54Z"},"managementURL":null,"requestDate":"2022-09-02T07:51:22Z"}}
Purchases:_makePurchase(String)
Finished purchase com.preteethai.dentist.subscription.monthly!
RevenueCatPurchaseManager:<BeginPurchase>b__25_0(String, CustomerInfo, Boolean, Error)
MakePurchaseFunc:Invoke(String, CustomerInfo, Boolean, Error)
Purchases:_makePurchase(String)
Updated UI: isSubscribed = false
RevenueCatPurchaseManager:UpdateUI()
MakePurchaseFunc:Invoke(String, CustomerInfo, Boolean, Error)
Purchases:_makePurchase(String)
2022-09-02 15:51:24.192104+0800 PreteethAIPro[8912:601870] [Purchases] - DEBUG: ℹ️ PaymentQueue removedTransaction: com.preteethai.dentist.subscription.monthly 2000000144947383 2000000143341334 1
Steps to reproduce, with a description of expected vs. actual behavior
Described above.
Other information (e.g. stacktraces, related issues, suggestions how to fix, links for us to have context, eg. stackoverflow, etc.)
https://community.revenuecat.com/sdks-51/unable-to-resubscribe-after-expiration-in-testflight-sandbox-environment-many-related-posts-before-without-a-solution-2006
Additional context
Add any other context about the problem here.
Starting from 2020x, Unity introduced a new standard for Unity's iOS builds wherein plugins and files are contained within UnityFramework.framework (which is where I see RevenueCat’s generated code and other files). That's why when we try to upload our binary with RevenueCat to Apple Store Connect through Xcode, we get the error: ERROR ITMS-90206: "Invalid Bundle. The bundle at 'APPNAME.app/Frameworks/UnityFramework.framework' contains disallowed file 'Frameworks'.". Before installing RevenueCat, there wasn't any problem.
Environment
Debug logs that reproduce the issue
None
Steps to reproduce, with a description of expected vs. actual behavior
Other information (e.g. stacktraces, related issues, suggestions how to fix, links for us to have context, eg. stackoverflow, etc.)
As a workaround, one may follow the steps below:
cd "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Frameworks/UnityFramework.framework/" if [[ -d "Frameworks" ]]; then rm -fr Frameworks fi
Additional context
These additional steps prevent us to use our CI/CD pipeline, that’s why an immediate fix is required.
References:
https://developer.apple.com/forums/thread/654980
https://support.wikitude.com/support/discussions/topics/5000096581
Hello,
Trying to get RevenueCat up and running in the Unity Editor on MacOS 10.15.
I'm running the sample files exactly as described in the Documentation, on two singleton GameObjects - with all my API key and identifiers correctly entered in Properties.
When I look over in PurchasesListener, I can see that the GetOfferings() function being called on MacOS is inside PurchasesWrapperNoop, and it is an empty function - Line 151. (So it makes some sense that nothing is happening.)
How can I get this to work? Does the GetOfferings() function inside the wrapper in Purchases.cs need to be filled out?
Thank you
1. Platform: iOS
2. SDK version: 2.3.0
3. OS version: not specific - iOS 12-14
4. Xcode version: 11.7
5. More then 300 users in 2 days
Recently released on iOS with updated RevenueCat version. I was not using attribution v2 and left deprecated methods usage for the next release to upgrade.
Crashlytic reported a lot of crashes.
Fatal Exception: NSInvalidArgumentException
Attempt to insert non-property list object { adgroup = ""; "adgroup_id" = ""; adset = ""; "adset_id" = ""; "af_click_lookback" = 7d; "af_cpi" = ""; "af_siteid" = ""; "af_status" = "Non-organic"; "af_sub1" = ""; "af_sub2" = ""; "af_sub3" = ""; "af_sub4" = ""; "af_sub5" = ""; agency = ""; campaign = None; "campaign_id" = ""; "click_time" = "2020-11-11 17:12:29.165"; clickid = "{{{all_params}}}"; "cost_cents_USD" = 0; "engmnt_source" = ""; "esp_name" = ""; "http_referrer" = ""; "install_time" = "2020-11-11 17:16:00.987"; "is_branded_link" = ""; "is_first_launch" = 0; "is_universal_link" = ""; iscache = 1; "match_type" = probabilistic; "media_source" = "replaced"; "orig_cost" = "0.0"; "rc_attribution_network_id" = "replaced"; "rc_idfa" = "replaced"; "rc_idfv" = "replaced"; "redirect_response_data" = ""; "retargeting_conversion_type" = none; }
for key com.revenuecat.userdefaults.attribution.71C3B32B-E61E-4B7F-AD5D-E6B39BA0A285
Fatal Exception: NSInvalidArgumentException
0 CoreFoundation __exceptionPreprocess
1 libobjc.A.dylib objc_exception_throw
2 CoreFoundation -[__NSCFString characterAtIndex:].cold.1
3 CoreFoundation _CFPrefsValidateValueForKey
4 CoreFoundation createDeepCopyOfValueForKey
5 CoreFoundation -[CFPrefsSource setValues:forKeys:count:copyValues:removeValuesForKeys:count:from:]
6 CoreFoundation -[CFPrefsSource setValues:forKeys:count:copyValues:from:]
7 CoreFoundation -[CFPrefsSource setValue:forKey:from:]
8 CoreFoundation __76-[_CFXPreferences setValue:forKey:appIdentifier:container:configurationURL:]_block_invoke
9 CoreFoundation __108-[_CFXPreferences(SearchListAdditions) withSearchListForIdentifier:container:cloudConfigurationURL:perform:]_block_invoke
10 CoreFoundation normalizeQuintuplet
11 CoreFoundation -[_CFXPreferences withSearchListForIdentifier:container:cloudConfigurationURL:perform:]
12 CoreFoundation -[_CFXPreferences setValue:forKey:appIdentifier:container:configurationURL:]
13 CoreFoundation _CFPreferencesSetAppValueWithContainerAndConfiguration
14 Foundation -[NSUserDefaults(NSUserDefaults) setObject:forKey:]
15 my_app -[RCDeviceCache setLatestNetworkAndAdvertisingIdsSent:forAppUserID:] + 388 (RCDeviceCache.m:388)
16 my_app (Missing)
17 my_app (Missing)
18 my_app __69-[RCBackend postAttributionData:fromNetwork:forAppUserID:completion:]_block_invoke + 346 (RCBackend.m:346)
19 my_app (Missing)
20 my_app (Missing)
21 CFNetwork CFNetServiceBrowserSearchForServices
22 CFNetwork _CFHTTPMessageSetResponseProxyURL
23 libdispatch.dylib _dispatch_call_block_and_release
24 libdispatch.dylib _dispatch_client_callout
25 libdispatch.dylib _dispatch_lane_serial_drain$VARIANT$mp
26 libdispatch.dylib _dispatch_lane_invoke$VARIANT$mp
27 libdispatch.dylib _dispatch_workloop_worker_thread
28 libsystem_pthread.dylib _pthread_wqthread
29 libsystem_pthread.dylib start_wqthread
Sorry, do not have steps, please let me know if the pasted call stack is not enough for the issue.
I assume that deprecated logic is broken.
Describe the bug
SetMixpanelDistinctID
sets $appsflyerId
instead of setting $mixpanelDistinctId
, on iOS.
The buggy method: https://github.com/RevenueCat/purchases-unity/blob/main/RevenueCat/Plugins/iOS/PurchasesUnityHelper.m#L356-L358
Looks like the integration with Unity IAP 2.2.5 is broken and/or cannot be fixed by just following the instructions here: https://docs.revenuecat.com/v3.0/docs/unity#installation-with-unity-iap-side-by-side
After I setup the project as suggested, modifying the gradle file, I get the following:
Gradle Error: Colliding Attributes
The attribute meta-data#com.google.android.play.billingclient.version@value=3.0.1 in :com.android.billingclient.billing-no-service: collides with another value
(See the Console for details)
Attribute meta-data#com.google.android.play.billingclient.version@value value=(3.0.1) from [:billing-3.0.1:] AndroidManifest.xml:15:13-34 is also present at [:com.android.billingclient.billing-no-service:] AndroidManifest.xml:15:13-34 value=(2.0.3). Suggestion: add 'tools:replace="android:value"' to element at AndroidManifest.xml:13:9-15:37 to override.
Among other 186+ errors that might just be cascading from this one.
Did something change with the latest Unity IAP and or Android billing libraries that made your guide for Unity IAP and RevenueCat integration obsolete?
This additional step can be omitted with Unity PostProcessBuild scripts "On iOS, add StoreKit.framework to Linked Frameworks and Libraries in Xcode."
👋 Hello, RevenueCat community!
We've just recently released a new site to assist you all getting better and faster answers to your questions.
Head over to https://community.revenuecat.com to get started!
GitHub issues are great for bug reports specific to an SDK but might not be the best place to look for answers to support questions. Our new community site puts all the questions and answers in one place. This is great if you have a question that spans multiple platforms so you won't have to search multiple GitHub repositories.
✅ Search for already asked and answered questions
✅ Ask a new question about one or multiple platforms
✅ Get responses from dedicated support engineers
✅ Find hand-picked content that highlight new features or common questions
FATAL EXCEPTION: Thread-8
Process: MY_PACKAGE_NAME, PID: 30996
java.lang.Error: FATAL EXCEPTION [Thread-8]
Unity version : 2020.3.11f1
Device model : samsung SM-G973N
Device fingerprint: samsung/beyond1qlteue/beyond1q:7.1.2/PPR1.190810.011/700210126:user/release-keys
Build Type : Release
Scripting Backend : Mono
ABI : armeabi-v7a
Strip Engine Code : false
Caused by: java.lang.NoSuchMethodError: No virtual method getSkus()Ljava/util/ArrayList; in class Lcom/android/billingclient/api/Purchase; or its super classes (declaration of 'com.android.billingclient.api.Purchase' appears in /data/app/MY_PACKAGE_NAME-1/base.apk)
at com.revenuecat.purchases.google.PurchaseDetailsConversionsKt.toRevenueCatPurchaseDetails(purchaseDetailsConversions.kt:16)
at com.revenuecat.purchases.google.BillingWrapper.toMapOfGooglePurchaseWrapper(BillingWrapper.kt:404)
at com.revenuecat.purchases.google.BillingWrapper.access$toMapOfGooglePurchaseWrapper(BillingWrapper.kt:51)
at com.revenuecat.purchases.google.BillingWrapper$queryPurchases$1.invoke(BillingWrapper.kt:393)
at com.revenuecat.purchases.google.BillingWrapper$queryPurchases$1.invoke(BillingWrapper.kt:51)
at com.revenuecat.purchases.google.BillingWrapper.withConnectedClient(BillingWrapper.kt:567)
at com.revenuecat.purchases.google.BillingWrapper.queryPurchases(BillingWrapper.kt:366)
at com.revenuecat.purchases.Purchases$updatePendingPurchaseQueue$1.run(Purchases.kt:1692)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:428)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:272)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
at java.lang.Thread.run(Thread.java:761)
I tried to integrate it into an empty project - only the Purchases
component on scene with my Revenue Cat API Key
and custom App User ID
. The result is the same - fatal error. Interesting observation - I don't have this issue when I use incorrect android package name (anything else but not my real package name).
Not sure, but probably it is related to RevenueCat/purchases-android#302
Describe the bug
I followed all steps from your documentation to integrate revenuecat with amazon but when I launched my build on amazon fire device and the callback of Purchase.GetOfferings method is called, an error is showed:
"There as a problem with store. Code 2, UnderlyiningErrorMessage: Failed to get user data. Make sure sandbox mode is enabled if using App Tester. https://www.rev.cat/enter-amazon-sandbox, ReadableErrorCode: StoreProblemError"
I've same error when I called the method Purchases.GetProducts
I've already tried to enable sandbox on device amazon and have install amazon test app but the error is always showing.
Anyway the sdk works correctly on ios and google play.
You can download this repository to reproduce my issue. I have created a scene test and I included my api amazon key revenuecat for testing purposes only:
https://github.com/gtoto007/amazon-revenuecat-issue
Below are the various steps I have performed
Environment
My steps
3.I linked iap in sections Entitlements,Offerings,Products of Revenuecat Dashboard
"There as a problem with store. Code 2, UnderlyiningErrorMessage: Failed to get user data. Make sure sandbox mode is enabled if using App Tester. https://www.rev.cat/enter-amazon-sandbox, ReadableErrorCode: StoreProblemError"
Debug Log
08-10 16:29:58.418 5104 5326 E AmazonAppstore.CheckSecurityAction: Content metadata not available for package name: com.marshmallowgames.amaztest
08-10 16:29:58.423 12194 12267 D Kiwi : CommandServiceClient: Blocking for result from service
08-10 16:29:58.423 12194 12267 D Kiwi : CommandServiceClient: Received result from service
08-10 16:29:58.423 12194 12267 D Kiwi : AbstractCommandTask: Received result from CommandService: CommandResult: [CallingUid: 10070, SuccessResult: null, FailureResult: com.amazon.d.a.h$a$a@8f9484f, DecisionResult: null, ExceptionResult: null]
08-10 16:29:58.423 12194 12267 D Kiwi : CommandResultVerifier: Verifying auth token: com.marshmallowgames.amaztest
08-10 16:29:58.440 12194 12267 D Kiwi : DataAuthenticationKeyLoaderV3: Loading data authentication key...
08-10 16:29:58.440 12194 12267 D Kiwi : DataAuthenticationKeyLoaderV3: Checking KiwiDataStore for key...
08-10 16:29:58.440 12194 12267 D Kiwi : ExpirableValueDataStore: Fetching value: DATA_AUTHENTICATION_KEY
08-10 16:29:58.440 12194 12267 D Kiwi : DataAuthenticationKeyLoaderV3: Key was cached: true
08-10 16:29:58.440 12194 12267 D Kiwi : SignatureVerifier: Verifying signature of data: 'UMnMxqPqVAul56Dpcj4ektTiUO3TKzO1azQAubOpZIwqgw35kEAibdIj1k9oCIGSGI95DgpE2zIfSHd08RnOn3JSjlezhFaxfe86WTUyEfo+NRBQA1nnh+B1AH9S7fOaRc03anuJiJEOvvubCcKmrOVFJqVAq1C6xFflpF4/F6zCfC/3vu1pfEA/3KZDlgV+TDeA4h/0fNuhy3V573KsbAkX2NrRMIPWZIukKhr43FF2JY6iZfeqJVc4pCnqakNjypMYX7iuF3RoTDYzpnYrIvBYL4RPz0y2/iZuuYairAKOX3/Iz5nZGsNqVWpL6eolD6RAqVjixPmgU4ezM7lHrnpA4Qeo2d0osyfFZF9eX73RFPA3cJcPbCiLt8TOaQIJscROaDnEM8LDzOubKjLJijMUTtPTI6dJ3sHQ7Nc+DxvcN//8uJ7iwZtBP4RCrq8qqqInL1TOiGU73NXIEHPzLQeQd1DudbCSRMO7sWUwIVdCiRB/s5q+IiJ7iCXLT75Gm3rKAHtJ4/V3FsyW8PiXcCVCM8tO+Gs8nXanngQBgW7ZaVxbRyi+LfOEVQUAkaMYKWi/AqfNen0WmVokYxFsK3bqciy1UIZBRsUr6+qjnZrTKi2hVW3FTnnXxqPRZ1a/JsfrSZ5uNpFwtzLGfS7iN3044Vf0QOfGNkLVgepl3R4=', signature: 'com.marshmallowgames.amaztest', with key: 'OpenSSLRSAPublicKey{modulus=e2861e68c541b8977605122eceba2ba09d949be5ae4930086497d98eff1ec50cfc9ced54c66628d8142438a1d8fd049605be738e119367a8ae6a27993df32bd04832acba04651842037f08cac97bf37f390e64be9d224152dfd9fc0f60e4cc13d0e387f17254f1f94b2a0804917b1be0f1faf08d17643bedaebb0ef2c3c36eaccaae93202df8e7ec80a2f79ae2816f506221debcf50f7a840ae09493c60f483c0caa65db5d30e7f14f6dfbf8521af8423e0daea7690cc5ad5ea2296a00429973907ea1936eb549361d21e3ae295e5b0b2464cb9c2fd86b8aaf02e43e5fe47b7048559fa48ea42bd9abbe3436ff5d0300f2d8cfac55910d60c0cad9b30216407b,publicExponent=10001}
08-10 16:29:58.441 12194 12267 D Kiwi : AbstractCommandTask: Exception occurred while processing task: com.amazon.a.a.n.a.a.a: AUTH_TOKEN_VERIFICATION_FAILURE: null: null
08-10 16:29:58.441 12194 12267 D Kiwi : com.amazon.a.a.n.a.a.a: AUTH_TOKEN_VERIFICATION_FAILURE: null: null
08-10 16:29:58.441 12194 12267 D Kiwi : at com.amazon.a.a.n.a.b.a(AuthenticationTokenVerifier.java:94)
08-10 16:29:58.441 12194 12267 D Kiwi : at com.amazon.a.a.n.a.a.a(AbstractCommandTask.java:204)
08-10 16:29:58.441 12194 12267 D Kiwi : at com.amazon.a.a.n.a.a.a(AbstractCommandTask.java:131)
08-10 16:29:58.441 12194 12267 D Kiwi : at com.amazon.a.a.n.b.b$1.run(SimpleTaskPipeline.java:179)
08-10 16:29:58.441 12194 12267 D Kiwi : at android.os.Handler.handleCallback(Handler.java:873)
08-10 16:29:58.441 12194 12267 D Kiwi : at android.os.Handler.dispatchMessage(Handler.java:99)
08-10 16:29:58.441 12194 12267 D Kiwi : at android.os.Looper.loop(Looper.java:211)
08-10 16:29:58.441 12194 12267 D Kiwi : at android.os.HandlerThread.run(HandlerThread.java:65)
08-10 16:29:58.445 12194 12267 D Kiwi : Prompt: Creating Prompt: 1013129288
08-10 16:29:58.445 12194 12267 D Kiwi : SimplePrompt: created SimplePrompt with mode LEGACY
08-10 16:29:58.446 12194 12267 D Kiwi : PromptManagerImpl: Scheduling presentation: a
08-10 16:29:58.446 12194 12267 D Kiwi : ResourceManagerImpl: Populating: a
08-10 16:29:58.446 12194 12267 D Kiwi : RelativeExpirable: RelativeExpiration duration: 31536000, expirable: a
08-10 16:29:58.446 12194 12267 D Kiwi : RelativeExpirable: Expiration should occur at time: Thu Aug 10 16:29:58 GMT+02:00 2023
08-10 16:29:58.447 12194 12267 D Kiwi : TaskManagerImpl: Populating Task: Expire: a
08-10 16:29:58.447 12194 12267 D Kiwi : ResourceManagerImpl: Populating: Expire: a
08-10 16:29:58.447 12194 12267 D Kiwi : SimpleTaskPipeline: KIWI_BACKGROUND: Scheduling task: Expire: a, at time: Thu Aug 10 16:29:58 GMT+02:00 2023, System uptimeMillis: 1660141798447, uptimeMillis: 31548329427
08-10 16:29:58.447 12194 12267 D Kiwi : TaskManagerImpl: Enqueue task on pipeline id: FOREGROUND
08-10 16:29:58.447 12194 12267 D Kiwi : RelativeExpirable: RelativeExpiration duration: 31536000, expirable: a
08-10 16:29:58.447 12194 12267 D Kiwi : RelativeExpirable: Expiration should occur at time: Thu Aug 10 16:29:58 GMT+02:00 2023
08-10 16:29:58.448 12194 12267 D Kiwi : TaskManagerImpl: Populating Task: Prompt Presentation on Main Thread: a, Thu Aug 10 16:29:58 GMT+02:00 2023
08-10 16:29:58.448 12194 12267 D Kiwi : RelativeExpirable: RelativeExpiration duration: 31536000, expirable: a
08-10 16:29:58.448 12194 12267 D Kiwi : RelativeExpirable: Expiration should occur at time: Thu Aug 10 16:29:58 GMT+02:00 2023
08-10 16:29:58.448 12194 12267 D Kiwi : ResourceManagerImpl: Populating: Prompt Presentation on Main Thread: a, Thu Aug 10 16:29:58 GMT+02:00 2023
08-10 16:29:58.448 12194 12267 D Kiwi : RelativeExpirable: RelativeExpiration duration: 31536000, expirable: a
08-10 16:29:58.448 12194 12267 D Kiwi : RelativeExpirable: Expiration should occur at time: Thu Aug 10 16:29:58 GMT+02:00 2023
08-10 16:29:58.448 12194 12267 D Kiwi : ForegroundTaskPipeline: No UI visible to execute task: Prompt Presentation on Main Thread: a, Thu Aug 10 16:29:58 GMT+02:00 2023, placing into pending queue until task is visible
08-10 16:29:58.449 12194 12267 D Kiwi : MetricsManagerImpl: Recording Metric: Metric: [{reason=null, name=get_userId_failure, context=null, subType=AUTH_TOKEN_VERIFICATION_FAILURE, time=1660141798449}]
08-10 16:29:58.449 12194 12194 D [Purchases] - DEBUG: ℹ️ User data request finished with result FAILED
08-10 16:29:58.449 12194 12267 D Kiwi : AbstractCommandTask: Task finished
08-10 16:29:58.449 12194 12267 D Kiwi : CommandServiceClient: Finishing CommandServiceClient, unbinding service: true
08-10 16:29:58.449 12194 12194 E [Purchases] - ERROR: 🤖‼️ Error fetching offerings - PurchasesError(code=StoreProblemError, underlyingErrorMessage=Failed to get user data. Make sure sandbox mode is enabled if using App Tester. https://rev.cat/enter-amazon-sandbox, message='There was a problem with the store.')
08-10 16:29:58.450 12194 12194 E Purchases: {"error":{"code":2,"message":"There was a problem with the store.","readableErrorCode":"StoreProblemError","readable_error_code":"StoreProblemError","underlyingErrorMessage":"Failed to get user data. Make sure sandbox mode is enabled if using App Tester. https:\/\/rev.cat\/enter-amazon-sandbox"}}
08-10 16:29:58.458 12194 12267 D Kiwi : SimpleTaskPipeline: KIWI_COMMAND: Task finished executing: com.amazon.device.iap.internal.a.c.d@79f1c7b
08-10 16:29:58.467 12194 12210 I Unity : _getOfferings {"error":{"code":2,"message":"There was a problem with the store.","readableErrorCode":"StoreProblemError","readable_error_code":"StoreProblemError","underlyingErrorMessage":"Failed to get user data. Make sure sandbox mode is enabled if using App Tester. https:\/\/rev.cat\/enter-amazon-sandbox"}}
08-10 16:29:58.467 12194 12210 I Unity :
08-10 16:29:58.483 12194 12210 I Unity : Subtester: Message: There was a problem with the store., Code: 2, UnderlyingErrorMessage: Failed to get user data. Make sure sandbox mode is enabled if using App Tester. https://rev.cat/enter-amazon-sandbox, ReadableErrorCode: StoreProblemError
08-10 16:29:58.483 12194 12210 I Unity :
Hi, do you have plans to support MacOS and TVOS?
I am asking because https://github.com/RevenueCat/purchases-ios supported it and Unity plugin based on native purchases-ios SDK
Hello, we have a trouble with the latest version 3.5.0 when starting app
Unity version
Can u help ? :)
Thanks
Google Issue Tracker 👉 https://issuetracker.google.com/issues/219799769?pli=1
There is currently an ongoing issue within BillingClient 4.0 where freeTrialPeriod
is null which could cause issues within RevenueCat's Purchases Android.
This does appear to be inconsistent and fairly rare but could still happen.
We are actively working on getting finding somebody that can address this issue 💪
All updates on our end will be made here 👉 RevenueCat/purchases-android#498
After update to the latest RevenuCat SDK (2.3.0) started receiving a warning on the XCode project opening and build error.
Value for swift_version cannot be empty
Since the only swift file used in the project is Dummy.swift, assume this inconvenience is connected with the last update.
Build Platform: iOS
SDK version: 2.3.0
Xcode version: 11.7
The workaround for that is to specify Swift Compiler - Language -> Swift Language Version in Build Settings of the XCode project. But it's required to be done with each new build.
I had issues to receive Customer info from the CustomerInfoReceived listener. Never got any information on, e.g start up and applicationDidBecomeActive().
Did some digging and realized that _receiveCustomerInfo(string customerInfoJson) in Purchases.cs never was called from the pluggin.
Continued to trace into the native code and found that PurchasesUnityHelper.m does not implement the optional protocol method receivedUpdatedCustomerInfo from protocol PurchasesDelegate. Instead it implements the method didReceiveUpdatedCustomerInfo which is never called.
If we update the method name from didReceiveUpdatedCustomerInfo to receivedUpdatedCustomerInfo (to match the protocol) it works as expected.
Suggestions how to fix:
In line 211: Assets/RevenueCat/Plugins/iOS/PurchasesUnityHelper.m:
didReceiveUpdatedCustomerInfo -> receivedUpdatedCustomerInfo.
Additional context
Add any other context about the problem here.
Describe the bug
SDK version 3.3 and 3.4 returns null or an empty string for productIdentifier
in the Purchases.PurchasePackage
callback.
Version 3.2 is working as expected.
Additional context
Add any other context about the problem here.
I have this compile error with the Release 4.0.0-rc.2
Assets/RevenueCat/Example/PurchasesListener.cs(340,80): error CS1525: Invalid expression term '>'
I'am using Unity 2020.3.8f1 on Macbook pro m1 with Rider.
Describe the bug
Game crashes on start with the following exception:
2021/09/14 12:18:14.984 27870 28344 Error AndroidRuntime Process: com.veloxia.spacecolonyidle, PID: 27870
2021/09/14 12:18:14.984 27870 28344 Error AndroidRuntime java.lang.NoSuchMethodError: No virtual method getSkus()Ljava/util/ArrayList; in class Lcom/android/billingclient/api/Purchase; or its super classes (declaration of 'com.android.billingclient.api.Purchase' appears in /data/app/~~fnfgVdGI4x2J-NcOPxLRew==/com.veloxia.spacecolonyidle-mj2NueCnx7pHNpxdwK-Xuw==/base.apk)
2021/09/14 12:18:14.984 27870 28344 Error AndroidRuntime at com.revenuecat.purchases.google.PurchaseDetailsConversionsKt.toRevenueCatPurchaseDetails(purchaseDetailsConversions.kt:16)
2021/09/14 12:18:14.984 27870 28344 Error AndroidRuntime at com.revenuecat.purchases.google.BillingWrapper.toMapOfGooglePurchaseWrapper(BillingWrapper.kt:404)
2021/09/14 12:18:14.984 27870 28344 Error AndroidRuntime at com.revenuecat.purchases.google.BillingWrapper.access$toMapOfGooglePurchaseWrapper(BillingWrapper.kt:51)
2021/09/14 12:18:14.984 27870 28344 Error AndroidRuntime at com.revenuecat.purchases.google.BillingWrapper$queryPurchases$1.invoke(BillingWrapper.kt:393)
2021/09/14 12:18:14.984 27870 28344 Error AndroidRuntime at com.revenuecat.purchases.google.BillingWrapper$queryPurchases$1.invoke(BillingWrapper.kt:51)
2021/09/14 12:18:14.984 27870 28344 Error AndroidRuntime at com.revenuecat.purchases.google.BillingWrapper.withConnectedClient(BillingWrapper.kt:571)
2021/09/14 12:18:14.984 27870 28344 Error AndroidRuntime at com.revenuecat.purchases.google.BillingWrapper.queryPurchases(BillingWrapper.kt:366)
2021/09/14 12:18:14.984 27870 28344 Error AndroidRuntime at com.revenuecat.purchases.Purchases$updatePendingPurchaseQueue$1.run(Purchases.kt:1692)
2021/09/14 12:18:14.984 27870 28344 Error AndroidRuntime at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:462)
2021/09/14 12:18:14.984 27870 28344 Error AndroidRuntime at java.util.concurrent.FutureTask.run(FutureTask.java:266)
2021/09/14 12:18:14.984 27870 28344 Error AndroidRuntime at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301)
2021/09/14 12:18:14.984 27870 28344 Error AndroidRuntime at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
2021/09/14 12:18:14.984 27870 28344 Error AndroidRuntime at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
2021/09/14 12:18:14.984 27870 28344 Error AndroidRuntime at java.lang.Thread.run(Thread.java:923)
We are using Unity Purchases with RevenueCat. RevenueCat will only be used for logging purposes.
Related:
https://community.revenuecat.com/sdks-51/android-subscription-crashes-after-test-purchase-363
I am setting the app user id by calling the login function from the purchaser class. It gives me a null exception. I am attaching the screenshot of the error as well as the code I am calling .
I made sure purchases variable is not null
On 3.5.0 and 3.5.1 versions of purchases-unity, if you test using the simulator, the app will crash with a confusing message saying "Unity error: "NullReferenceException: Object reference not set to an instance of an object".
The issue stems from this logic in setup
, which checks for iOS and Android physical devices, but apparently simulators don't pass the checks.
few of users are getting login errors on different devices and platforms. if there a way to avoid that or get more information about the error
So we are facing a weird edge case in the app.
Two months ago I created an entitlement "monthlysub" and assigned two products "monthlysub" from apple and "monthysub" from google play store (I know the naming convention is not ideal).
So a user purchased the subscription "monthlysub" and cancelled it later on.
Now we decided to create a new product for specific users with 30 days trial. We decided to name the new product "amplimontlysub" on both apple and google platforms.
Next, I decided to add these products under the already exiting "monthlysub" entitlement. So now " monthlysub" entitlement has a total of four products.
Now when an old user who purchased two months ago but cancelled it decide to subscribe to "amplimontlysub" product and the transactions from the apple side go thru, the transaction is done I see a pop from apple "you are all set" then I get an error from revenuecat that "there is already another active subscriber using the same receipt".
How do I handle this? we want to offer a different subscription to a few specific users who signup for the app using a promocode.
Is it because the entitlement is same for all 4 products?
I am attempting to implement promotional offers on iOS, however I have found a blocking bug. When tracking the native code in Xcode, the constructor for StoreProduct.cs will never reach the code to parse Discounts, as it will return early when attempting to parse SubscriptionOptions, which will never exist on iOS. As a result, Discounts will never be received in the SDK, even when being visible in the _receivedProducts JSONString Debug.Log().
Suggestions how to fix:
In StoreProduct.cs, avoid returning from the function early when failing to parse "subscriptionOptions". Additional logic to parse the "subscriptionOptions" should be inside the null check for "subscriptionOptionsResponse" or excluding parsing "subscriptionOptions" entirely when on iOS.
Describe the bug
When there is a billing problem with the card or user is asked for a confirmation with a password, the purchase ends up outside of the game. userCancelled
becomes false but as STORE_ERROR
is returned, purchase process returns on client. At the end of the process, user gets charged without having the rewards. Not reproducible on sandbox environment.
Do not remove any of the steps from the template below. If a step is not applicable to your issue, please leave that step empty.
Additional context
Add any other context about the problem here.
Describe the bug
We had recently updated this framework from 2.0.1 to version 4.14.1. However, we've started getting crashes on older iOS devices. The crash happens right after our splash screen is finished displaying -- right when our first scene is loaded in. The stack trace for this issue is here:
Date/Time: 2023-04-26 21:45:28.2987 -0500
Launch Time: 2023-04-26 21:45:15.3798 -0500
OS Version: iPhone OS 12.5.7 (16H81)
Baseband Version: 10.80.02
Report Version: 104
Exception Type: EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Exception Note: EXC_CORPSE_NOTIFY
Triggered by Thread: 0
Thread 0 name:
Thread 0 Crashed:
0 dyld 0x00000001001ae418 __abort_with_payload + 8
1 dyld 0x00000001001ada58 abort_with_payload_wrapper_internal + 100 (terminate_with_reason.c:72)
2 dyld 0x00000001001ada88 abort_with_payload + 12 (terminate_with_reason.c:94)
3 dyld 0x00000001001708f8 dyld::halt(char const*) + 304 (dyld.cpp:4024)
4 dyld 0x0000000100170a14 dyld::fastBindLazySymbol(ImageLoader**, unsigned long) + 284 (dyld.cpp:4112)
5 libdyld.dylib 0x00000001d7353848 dyld_stub_binder + 60
6 UnityFramework 0x0000000102346a38 type metadata completion function for SK2StoreProduct + 24 (<compiler-generated>:0)
7 libswiftCore.dylib 0x0000000205128820 swift_getSingletonMetadata + 636 (MetadataCache.h:920)
8 UnityFramework 0x0000000102346a18 type metadata accessor for SK2StoreProduct + 48 (<compiler-generated>:0)
9 libswiftCore.dylib 0x000000020513f098 swift_conformsToSwiftProtocolImpl(swift::TargetMetadata<swift::InProcess> const*, swift::TargetProtocolDescriptor<swift::InProcess> const*, llvm::StringRef) + 312 (ProtocolConformance.cpp:478)
10 libswiftCore.dylib 0x000000020513ee38 swift_conformsToProtocol + 188 (CompatibilityOverride.def:137)
11 libswiftCore.dylib 0x0000000205118a58 swift::_conformsToProtocol(swift::OpaqueValue const*, swift::TargetMetadata<swift::InProcess> const*, swift::TargetProtocolDescriptorRef<swift::InProcess>, swift::TargetWitnessTable<swift::InProces... + 44 (Casting.cpp:320)
12 libswiftCore.dylib 0x000000020513e6fc swift::_checkGenericRequirements(llvm::ArrayRef<swift::TargetGenericRequirementDescriptor<swift::InProcess> >, std::__1::vector<void const*, std::__1::allocator<void const*> >&, std::__1::function<... + 1160 (ProtocolConformance.cpp:648)
13 libswiftCore.dylib 0x000000020513b740 (anonymous namespace)::DecodedMetadataBuilder::createBoundGenericType(swift::TargetContextDescriptor<swift::InProcess> const*, llvm::ArrayRef<swift::TargetMetadata<swift::InProcess> const*>, swift:... + 584 (MetadataLookup.cpp:1083)
14 libswiftCore.dylib 0x000000020513adec swift::Demangle::TypeDecoder<(anonymous namespace)::DecodedMetadataBuilder>::decodeMangledType(swift::Demangle::Node* const&) + 2832 (TypeDecoder.h:201)
15 libswiftCore.dylib 0x000000020513a428 swift::Demangle::TypeDecoder<(anonymous namespace)::DecodedMetadataBuilder>::decodeMangledType(swift::Demangle::Node* const&) + 332 (Demangle.h:0)
16 libswiftCore.dylib 0x0000000205139d10 swift_getTypeByMangledNodeImpl(swift::MetadataRequest, swift::Demangle::Demangler&, swift::Demangle::Node*, std::__1::function<swift::TargetMetadata<swift::InProcess> const* (unsigned int, unsigned... + 460 (TypeDecoder.h:700)
17 libswiftCore.dylib 0x0000000205139ad0 swift::swift_getTypeByMangledNode(swift::MetadataRequest, swift::Demangle::Demangler&, swift::Demangle::Node*, std::__1::function<swift::TargetMetadata<swift::InProcess> const* (unsigned int, unsig... + 520 (CompatibilityOverride.def:148)
18 libswiftCore.dylib 0x000000020513a044 swift_getTypeByMangledNameImpl(swift::MetadataRequest, llvm::StringRef, std::__1::function<swift::TargetMetadata<swift::InProcess> const* (unsigned int, unsigned int)>, std::__1::function<swift::Ta... + 652 (MetadataLookup.cpp:1300)
19 libswiftCore.dylib 0x0000000205138450 swift::swift_getTypeByMangledName(swift::MetadataRequest, llvm::StringRef, std::__1::function<swift::TargetMetadata<swift::InProcess> const* (unsigned int, unsigned int)>, std::__1::function<swift:... + 520 (CompatibilityOverride.def:155)
20 libswiftCore.dylib 0x000000020513859c swift_getTypeByMangledNameInContext + 216 (MetadataLookup.cpp:1326)
21 UnityFramework 0x0000000102112694 __swift_instantiateConcreteTypeFromMangledName + 52 (<compiler-generated>:0)
22 UnityFramework 0x00000001022d14d0 specialized _NativeDictionary.resize(capacity:) + 12 (<compiler-generated>:0)
23 UnityFramework 0x00000001022d14d0 specialized _NativeDictionary.ensureUnique(isUnique:capacity:) + 24 (<compiler-generated>:0)
24 UnityFramework 0x00000001022d14d0 specialized _NativeDictionary.mutatingFind(_:isUnique:) + 64 (<compiler-generated>:0)
25 UnityFramework 0x00000001022d14d0 specialized _NativeDictionary.merge<A>(_:isUnique:uniquingKeysWith:) + 196
26 UnityFramework 0x00000001022d1368 specialized protocol witness for Sequence.underestimatedCount.getter in conformance LazyMapSequence<A, B> + 32 (<compiler-generated>:0)
27 UnityFramework 0x00000001022d1368 specialized Dictionary.init<A>(uniqueKeysWithValues:) + 32 (Logger.swift:267)
28 UnityFramework 0x00000001022d1368 one-time initialization function for order + 108
29 libdispatch.dylib 0x00000001d73407d4 _dispatch_client_callout + 16 (object.m:511)
30 libdispatch.dylib 0x00000001d72e3eb8 _dispatch_once_callout + 28 (once.c:52)
31 libswiftCore.dylib 0x000000020513de40 swift_once + 40 (once.h:111)
32 UnityFramework 0x00000001022da794 specialized static Logger.log(level:intent:message:fileName:functionName:line:) + 700
33 UnityFramework 0x00000001022d9888 specialized static Logger.log(level:intent:message:fileName:functionName:line:) + 64
34 UnityFramework 0x000000010231b630 specialized static Logger.log(level:intent:message:fileName:functionName:line:) + 60 (Logger.swift:127)
35 UnityFramework 0x000000010231b630 static Logger.debug(_:fileName:functionName:line:) + 60 (Purchases.swift:0)
36 UnityFramework 0x000000010231b630 specialized Purchases.__allocating_init(apiKey:appUserID:userDefaults:observerMode:platformInfo:responseVerificationLevel:storeKit2Setting:storeKitTimeout:networkTimeout:dangerousSettings:) + 172
37 UnityFramework 0x000000010231dd0c Purchases.__allocating_init(apiKey:appUserID:userDefaults:observerMode:platformInfo:responseVerificationLevel:storeKit2Setting:storeKitTimeout:networkTimeout:dangerousSettings:) + 52 (<compiler-generated>:1038)
38 UnityFramework 0x000000010231dd0c implicit closure #1 in static Purchases.configure(withAPIKey:appUserID:observerMode:userDefaults:platformInfo:responseVerificationLevel:storeKit2Setting:storeKitTimeout:networkTimeout:dangerousSett... + 104 (<compiler-generated>:0)
39 UnityFramework 0x000000010231dd0c partial apply for implicit closure #1 in static Purchases.configure(withAPIKey:appUserID:observerMode:userDefaults:platformInfo:responseVerificationLevel:storeKit2Setting:storeKitTimeout:networkTim... + 172
40 UnityFramework 0x00000001023191d4 closure #1 in static Purchases.setDefaultInstance(_:) + 4 (Purchases.swift:517)
41 UnityFramework 0x00000001023191d4 specialized closure #1 in Atomic.modify<A>(_:) + 4 (Atomic.swift:64)
42 UnityFramework 0x00000001023191d4 specialized closure #1 in Atomic.modify<A>(_:) + 4 (<compiler-generated>:0)
43 UnityFramework 0x00000001023191d4 specialized Lock.perform<A>(_:) + 4 (Lock.swift:49)
44 UnityFramework 0x00000001023191d4 specialized Atomic.modify<A>(_:) + 4 (Atomic.swift:63)
45 UnityFramework 0x00000001023191d4 specialized static Purchases.setDefaultInstance(_:) + 192 (Purchases.swift:504)
46 UnityFramework 0x000000010231d340 static Purchases.setDefaultInstance(_:) + 16 (<compiler-generated>:0)
47 UnityFramework 0x000000010231d340 static Purchases.configure(withAPIKey:appUserID:observerMode:userDefaults:platformInfo:responseVerificationLevel:storeKit2Setting:storeKitTimeout:networkTimeout:dangerousSettings:) + 48 (Purchases.swift:909)
48 UnityFramework 0x000000010231d340 specialized static Purchases.configure(with:) + 224
49 UnityFramework 0x0000000102248750 static Purchases.configure(apiKey:appUserID:observerMode:userDefaultsSuiteName:platformFlavor:platformFlavorVersion:usesStoreKit2IfAvailable:dangerousSettings:) + 880 (Purchases+HybridAdditions.swift:49)
50 UnityFramework 0x0000000102248914 @objc static Purchases.configure(apiKey:appUserID:observerMode:userDefaultsSuiteName:platformFlavor:platformFlavorVersion:usesStoreKit2IfAvailable:dangerousSettings:) + 304 (<compiler-generated>:0)
51 UnityFramework 0x00000001020fae2c -[RCUnityHelperDelegate setupPurchases:appUserID:gameObject:observerMode:usesStoreKit2IfAvailable:userDefaultsSuiteName:dangerousSettingsJson:] + 448 (PurchasesUnityHelper.m:83)
52 UnityFramework 0x00000001020fc22c _RCSetupPurchases + 208 (PurchasesUnityHelper.m:454)
53 UnityFramework 0x0000000104bb2c00 PurchasesWrapperiOS__RCSetupPurchases_mD3D94F7356E6ACB5DC9D4144B05271890B674AC9 + 136 (revenuecat.purchases-unity.cpp:12676)
54 UnityFramework 0x0000000104ba6b14 InterfaceActionInvoker8<String_t*, String_t*, String_t*, bool, bool, String_t*, bool, String_t*>::Invoke(unsigned short, Il2CppClass*, Il2CppObject*, String_t*, String_t*, String_t*, bool, bool, St... + 32 (revenuecat.purchases-unity.cpp:186)
55 UnityFramework 0x0000000104ba6b14 Purchases_Configure_mB6B15274DFB7B7FFCB1D96E626D7C6DE2A9A3FF0 + 304 (revenuecat.purchases-unity.cpp:4534)
56 UnityFramework 0x0000000104ba63d8 Purchases_Start_m879CBCF4317AB1B0233FBD048C48D5B99E5C382B + 316 (revenuecat.purchases-unity.cpp:4297)
57 UnityFramework 0x00000001030975f8 il2cpp::vm::Runtime::InvokeWithThrow(MethodInfo const*, void*, void**) + 100 (Runtime.cpp:567)
58 UnityFramework 0x0000000103097458 il2cpp::vm::Runtime::Invoke(MethodInfo const*, void*, void**, Il2CppException**) + 84 (Runtime.cpp:553)
59 UnityFramework 0x00000001025e2094 scripting_method_invoke(ScriptingMethodPtr, ScriptingObjectPtr, ScriptingArguments&, ScriptingExceptionPtr*, bool) + 112 (ScriptingApi_Il2Cpp.cpp:292)
60 UnityFramework 0x00000001025ede3c ScriptingInvocation::Invoke(ScriptingExceptionPtr*, bool) + 120 (ScriptingInvocation.cpp:298)
61 UnityFramework 0x00000001025fdf14 MonoBehaviour::InvokeMethodOrCoroutineChecked(ScriptingMethodPtr, ScriptingObjectPtr, ScriptingExceptionPtr*) + 2012 (MonoBehaviour.cpp:0)
62 UnityFramework 0x00000001025fe098 MonoBehaviour::InvokeMethodOrCoroutineChecked(ScriptingMethodPtr, ScriptingObjectPtr) + 84 (MonoBehaviour.cpp:860)
63 UnityFramework 0x00000001025fe880 Start + 40 (MonoBehaviour.cpp:465)
64 UnityFramework 0x00000001025fe880 MonoBehaviour::DelayedStartCall(Object*, void*) + 56 (MonoBehaviour.cpp:1239)
65 UnityFramework 0x0000000102448f54 DelayedCallManager::Update(int) + 536 (CallDelayed.cpp:185)
66 UnityFramework 0x000000010250b34c ExecutePlayerLoop(NativePlayerLoopSystem*) + 100 (PlayerLoop.cpp:383)
67 UnityFramework 0x000000010250b38c ExecutePlayerLoop(NativePlayerLoopSystem*) + 164 (PlayerLoop.cpp:404)
68 UnityFramework 0x000000010250b5e8 PlayerLoop() + 272 (PlayerLoop.cpp:508)
69 UnityFramework 0x0000000102af5fc4 UnityPlayerLoopImpl(bool) + 112 (LibEntryPoint.mm:327)
70 UnityFramework 0x0000000101ebfdb4 UnityRepaint + 12 (UnityAppController+Rendering.mm:236)
71 UnityFramework 0x0000000101ebfdb4 -[UnityAppController(Rendering) repaint] + 84 (UnityAppController+Rendering.mm:90)
72 UnityFramework 0x0000000101ebfd44 -[UnityAppController(Rendering) repaintDisplayLink] + 76 (UnityAppController+Rendering.mm:71)
73 QuartzCore 0x00000001dbd13ff0 CA::Display::DisplayLink::dispatch_items(unsigned long long, unsigned long long, unsigned long long) + 636 (CADisplay.mm:2349)
74 IOKit 0x00000001d7b5f4b0 IODispatchCalloutFromCFMessage + 488 (IOKitLib.c:1216)
75 CoreFoundation 0x00000001d786d990 __CFMachPortPerform + 188 (CFMachPort.c:522)
76 CoreFoundation 0x00000001d7894594 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 56 (CFRunLoop.c:1996)
77 CoreFoundation 0x00000001d7893ce0 __CFRunLoopDoSource1 + 440 (CFRunLoop.c:2133)
78 CoreFoundation 0x00000001d788eb04 __CFRunLoopRun + 2096 (CFRunLoop.c:3152)
79 CoreFoundation 0x00000001d788dfb4 CFRunLoopRunSpecific + 436 (CFRunLoop.c:3247)
80 GraphicsServices 0x00000001d9a9079c GSEventRunModal + 104 (GSEvent.c:2245)
81 UIKitCore 0x0000000203d56c38 UIApplicationMain + 212 (UIApplication.m:4353)
82 UnityFramework 0x0000000101ebf8ec -[UnityFramework runUIApplicationMainWithArgc:argv:] + 92 (main.mm:96)
83 JoonPetGame 0x00000001000bb978 main + 744 (main.mm:34)
84 libdyld.dylib 0x00000001d73518e0 start + 4
Here's a Sentry error of what's happening:
Do not remove any of the steps from the template below. If a step is not applicable to your issue, please leave that step empty.
Additional context
Here is our UpdatedCustomerInfoListener
class:
using System.Collections.Generic;
using UnityEngine;
// TODO: Since the parent class is not utilized in anyway. I figured it would be safe to just make this a standard
// TODO: Singleton. If there are any issues, I can happily revert it.
public class SubscriptionManager : Purchases.UpdatedCustomerInfoListener
{
public static SubscriptionManager Instance;
public delegate void SubscriptionStatusCallback(bool isSubscribed, bool isInTrialMode);
private Purchases Purchases => transform.parent.GetComponentInChildren<Purchases>();
public void UserLoggedIn(Parent parent)
{
// TODO: Created and error are never used. Should we make a use case for them or remove them?
Purchases.LogIn(appUserId: $"{parent.FamilyId}", callback: (info, _, _) =>
{
Purchases.SetEmail(email: parent.Email);
Purchases.SetAttributes(attributes: new Dictionary<string, string>
{
{ JoonConsts.PARENT_ID, $"{parent.Id}" },
{ JoonConsts.NAME, parent.Name },
{ JoonConsts.EMAIL, parent.Email }
});
});
}
public void UserLoggedOut()
{
Purchases.LogOut(callback: null);
}
public void SubscriptionStatus(SubscriptionStatusCallback callback)
{
// Purchases will only return a callback if it actually is on Android or iOS. This check allows us to
// callback the caller of this function when running on Unity.
if (Application.platform is RuntimePlatform.Android or RuntimePlatform.IPhonePlayer)
{
Purchases.GetCustomerInfo(callback: (info, error) =>
{
if (error != null)
{
callback(isSubscribed: false, isInTrialMode: false);
return;
}
bool isUserSubscribed = info.Entitlements.Active.Count > 0;
Parent parent = AuthenticationManager.GetParent();
bool isInTrialMode = parent.NumQuestsVerified < parent.MaxFreeVerified;
callback(isUserSubscribed, isInTrialMode);
});
}
else
{
// Default callback if it isn't iOS or Android.
callback(true, true);
}
}
// Old Singleton set up for now since this uses an inherited class.
private void Awake()
{
if (Instance != null && Instance != this)
{
Destroy(transform.root.gameObject);
}
else
{
Instance = this;
DontDestroyOnLoad(transform.root.gameObject);
}
}
// No-op
public override void CustomerInfoReceived(Purchases.CustomerInfo customerInfo) { }
}
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.