mobileraker icon indicating copy to clipboard operation
mobileraker copied to clipboard

Account and supporter status lost few times a day

Open devbranch-vadym opened this issue 5 months ago • 23 comments

Bug Report

Description

Running Mobileraker version on a new Pixel 10 Pro, app restored from Android backup after switching from the old phone.

Sometimes when I open the app, the popup appears asking me to delete extra printers or support the app, even though I have lifetime supporter status. I have to log in to the account and click Restore Purchases. It works fine for some time, and then resets again when I open the app in a few hours.

Steps to Reproduce

  1. Open the app, having supporter status.

Expected: the purchase status remains. Actual: the printer removal / supporter status purchase message is displayed.

Expected Behavior

The supporter status and account info should remain and shouldn't be re-entered a few times a day.

Screenshots

N/A

Version Information

  • Device-OS (Android/iOS): Pixel 10 Pro, latest update, Android 16.
  • Mobileraker: 2.9.4
  • Klipper: n/a, multiple printers
  • Moonraker: n/a, multiple printers

Debug Logs

The debug logs contains sensible information like my printers URLs, happy to share it with dev privately if needed. I haven't seen any messages regarding the account or supporter status though.

Additional Context

Add any other relevant context about the problem here.


Checklist

To help us diagnose the issue, please ensure you've completed the following steps:

  • [x] Provided a clear bug description.
  • [x] Listed detailed steps to reproduce the issue.
  • [x] Described the expected behavior.
  • [x] Included the Mobileraker version you are using.
  • [x] Attached Mobileraker's debug log files.
  • [x] Specified the version numbers of Klipper and Moonraker if applicable.

devbranch-vadym avatar Nov 06 '25 11:11 devbranch-vadym

Update: the issue is reproduces by closing ("swiping") the app.

Image

devbranch-vadym avatar Nov 06 '25 11:11 devbranch-vadym

Hey, since you mention that you migrated to a new phone, did you try to completely remove and reinstall the app?

It seems like your phone is blocking mobileraker from storing your user id on the device. Which forces the app to always assign you a new anonymous id?

Clon1998 avatar Nov 06 '25 12:11 Clon1998

Hi @Clon1998 , Thanks for a quick response! Is there any option to backup my printers settings? I couldn't find anything.

devbranch-vadym avatar Nov 06 '25 12:11 devbranch-vadym

Hi @Clon1998 , Thanks for a quick response! Is there any option to backup my printers settings? I couldn't find anything.

Sadly not at the moment. I can have a look during the weekend to see if I can quickly add an export for those settings.

Clon1998 avatar Nov 06 '25 14:11 Clon1998

I just made an interesting observation. I've changed the settings of one of my printers (simply pre-ordered macros, if that matters), closed the app, and then re-opened it.

The app opened just fine at first, the change I made retained, there was no ad or supporter status message, and then after a few seconds the application theme have changed to the default one (I use the supporter theme) and the message appeared.

Does this mean the user ID is stored separately from the app settings? Or, it seems like there's something happening shortly after starting the app which resets the user ID. I'm not a mobile developer, but since the app data was transferred from the old phone, maybe it's Firebase device ID mismatch or something that causes the user ID to be invalidated? Just guessing.

As an option, I'll be happy to install the custom version of the app with verbose logging if you'd like to investigate.

devbranch-vadym avatar Nov 06 '25 17:11 devbranch-vadym

I just made an interesting observation. I've changed the settings of one of my printers (simply pre-ordered macros, if that matters), closed the app, and then re-opened it.

The app opened just fine at first, the change I made retained, there was no ad or supporter status message, and then after a few seconds the application theme have changed to the default one (I use the supporter theme) and the message appeared.

Does this mean the user ID is stored separately from the app settings? Or, it seems like there's something happening shortly after starting the app which resets the user ID. I'm not a mobile developer, but since the app data was transferred from the old phone, maybe it's Firebase device ID mismatch or something that causes the user ID to be invalidated? Just guessing.

As an option, I'll be happy to install the custom version of the app with verbose logging if you'd like to investigate.

If I remember it correctly both my app settings and the firebase/revenueCat userid are stored in the shared preferences on android. However, it's likely that the phone migration corrupted some data or similar.

Regarding the backup functionality. I tried to add something really quickly yesterday but ran into a few problems. I hope I can get something that's more reliable done during the weekend and let you know.

Clon1998 avatar Nov 07 '25 23:11 Clon1998

If I remember it correctly both my app settings and the firebase/revenueCat userid are stored in the shared preferences on android. However, it's likely that the phone migration corrupted some data or similar.

That's what confused me. App settings seem to survive closing the app, but not the revenue / user ID. There's likely an old phone ID stored somewhere or similar.

devbranch-vadym avatar Nov 08 '25 12:11 devbranch-vadym

If I remember it correctly both my app settings and the firebase/revenueCat userid are stored in the shared preferences on android. However, it's likely that the phone migration corrupted some data or similar.

That's what confused me. App settings seem to survive closing the app, but not the revenue / user ID. There's likely an old phone ID stored somewhere or similar.

I wanted to let you know that I didn’t finish the export functionality today. I got a bit lost in refactoring some old code. I’ll let you know once I’m done.

Clon1998 avatar Nov 09 '25 22:11 Clon1998

Hey, sorry for the delay. I finally finished the import and export in the most basic form.

I pushed a beta version (2.9.5-678) to google play open beta. However, you can try if the APK also works.

Clon1998 avatar Nov 16 '25 14:11 Clon1998

FWIW, I'm having exactly the same issue as the OP - migrated to a Pixel 10 Pro and now no matter how many times I login and/or restore purchases, the app eventually "forgets" about this. I've removed and reinstalled the app to no effect. I'll try the beta version so I can do an export/delete/import and see if that works.

kamermans avatar Nov 16 '25 14:11 kamermans

FWIW, I'm having exactly the same issue as the OP - migrated to a Pixel 10 Pro and now no matter how many times I login and/or restore purchases, the app eventually "forgets" about this. I've removed and reinstalled the app to no effect. I'll try the beta version so I can do an export/delete/import and see if that works.

Okay... That's weird... I will ask on Discord if other Android users have the same issue or if it's related to the Pixel 10.

Btw. the Export/Import can be found at the last section of the App Settings. However, not the text button "Backup&Restore" but the tile above Crashlytics settings.

I also improved the logging once again. So once you guys have the beta and it happens again please export the app logs and either upload them here or kindly send them to me [email protected]

Clon1998 avatar Nov 16 '25 14:11 Clon1998

Note that the notification state is also reset, here are screenshots showing my successful login and restore, then I swipe closed the app and reopened it

Image Image

Waiting for the Play Store to see the 678 beta release yet.

kamermans avatar Nov 16 '25 14:11 kamermans

@Clon1998 I'm not sure which Discord you're on, but I found some interesting info in the debug logs (I haven't done the export/wipe/import yet, because I'd rather get to the bottom of the problem if possible).

Here's what Cursor came up with while analyzing the codebase and debug logs (happy to DM you the logs if I have a place to do it):

-- AI analysis below --

What this cold-start log proves

You’re right: this log is extremely revealing, and it does show a cold start after previously being logged in as a supporter.

Here’s the critical sequence in mobileraker_2025-11-16T10-16-56.log:

  1. Cold start – RevenueCat still knows you’re a supporter
  • App warmup and first getCustomerInfo:
[info] ... Fetching customer info
[info] ... [PaymentService] User changed. isLogin: false, isLogout: false
[info] ... Completed PaymentService init
  • RevenueCat responds with Supporter entitlement for appUserId U4viBD...:
Got customerInfo: ... entitlements.active: {Supporter: ... productIdentifier: mobileraker_supporter_v2.lifetime ...}
RCat ID: U4viBD[...redacted...]
...
Got customerInfo: ... same entitlements ...
RCat ID: U4viBD[...redacted...]
  • App treats you as supporter:
Setting up marketing notification listener, isSupporter: true
...
488:logs/mobileraker_2025-11-16T10-16-56.log
Received isSupporter true

So on this cold start the app successfully sees your lifetime purchase and sets isSupporter = true.

  1. A moment later – Firebase creates an anonymous user

Later in the same startup, Firebase Auth transitions from null/anonymous to a new anonymous user:

Firebase Auth User changed from AsyncData<User?>(value: null)
  to AsyncData<User?>(value: User(... isAnonymous: true, uid: yKKaJ[..redacted...]))
[info] ... [PaymentService] User changed. isLogin: true, isLogout: false

The PaymentService sees this as isLogin: true.

  1. PaymentService logs RevenueCat into the new anonymous Firebase user

A bit later, PaymentService calls Purchases.logIn(...) and switches RevenueCat to a new appUserId with no entitlements:

[PaymentService] Logged user into rCat: created: true -
  CustomerInfo(... entitlements.active: {}, originalAppUserId: yKKaJ[..redacted...] ...)

Then it fetches CustomerInfo for this new RC user:

Got customerInfo: ... entitlements.active: {}
RCat ID: yKKaJ[..redacted...]
  1. Supporter status is flipped back to non-supporter

Immediately after switching to the new appUserId with no entitlements:

Setting up marketing notification listener, isSupporter: false
User is not a supporter, returning default layout ...
...
Received isSupporter false
AdFree: false (isSupporter: false, adsEnabled: true, canRequestAds: true)

So in a single cold start you can see:

  • RevenueCat initially returns Supporter for RCat ID = U4viBD...
  • The app sets isSupporter = true
  • Firebase later emits a new anonymous user uid = yKKa...
  • PaymentService treats this as a login, calls Purchases.logIn(yKKa...)
  • RevenueCat now returns no entitlements for RCat ID = yKKa...
  • The app flips to isSupporter = false and shows ads/default layout

What this means

This log file is essentially a smoking gun:

  • Your supporter purchase is still correctly attached to the old RevenueCat user U4viBD....
  • After Android’s startup/auth handshake, Mobileraker re-binds RevenueCat to a new anonymous Firebase user (yKKa...) with no purchases.
  • That rebind happens on every cold start, so the supporter status is “lost” again, even though RevenueCat still knows about your entitlement.

In other words, this log proves that the Firebase→RevenueCat login bridge in PaymentService is overwriting a valid RevenueCat supporter identity with a fresh anonymous one on cold start, which perfectly explains the behavior you’re seeing after transferring to the new phone.

kamermans avatar Nov 16 '25 15:11 kamermans

@

Yeah... Seems like firebase is unable to load its stored user id... I need to investigate that. If you dont mind, can you dm/email me your log file?

Clon1998 avatar Nov 16 '25 15:11 Clon1998

Sure, where can I DM you?

kamermans avatar Nov 16 '25 15:11 kamermans

Sure, where can I DM you?

I forgot if this even was possible on Github lol. But my Discrod is: pad_sch

Clon1998 avatar Nov 16 '25 15:11 Clon1998

I've updated to beta, exported settings, then cleared the app settings, and imported them back again. A few settings were lost (like the printers order, or global settings not related to any printer), but otherwise everything works well for me. I'm not getting any random supporter status losses anymore.

So the issue is definitely related to the phone change/data migration, and the fact @kamermans also has a Pixel 10 Pro is just a coincidence.

devbranch-vadym avatar Nov 17 '25 15:11 devbranch-vadym

I've updated to beta, exported settings, then cleared the app settings, and imported them back again. A few settings were lost (like the printers order, or global settings not related to any printer), but otherwise everything works well for me. I'm not getting any random supporter status losses anymore.

So the issue is definitely related to the phone change/data migration, and the fact @kamermans also has a Pixel 10 Pro is just a coincidence.

Good to know! The app export was added fairly quickly, so I might have missed the app settings. However, the machine(s) should be added in the same order, though... Still, you should be able to reorder them on the overview page by long-pressing the machine cards and dragging them to the desired order.

Clon1998 avatar Nov 17 '25 18:11 Clon1998

Uninstalling and then reinstalling didn't solve the same issue for me. On beta 2.9.5-678. Pixel 9 pro xl, and also imported everything from a different device.

Cabalforces avatar Nov 18 '25 20:11 Cabalforces

Uninstalling and then reinstalling didn't solve the same issue for me. On beta 2.9.5-678. Pixel 9 pro xl, and also imported everything from a different device.

Did you restore the same Android app backup? It won't work this way. Current workaround is to install beta version, export printers settings to a file from the app settings, then clean app data and import the file back.

devbranch-vadym avatar Nov 18 '25 21:11 devbranch-vadym

Uninstalling and then reinstalling didn't solve the same issue for me. On beta 2.9.5-678. Pixel 9 pro xl, and also imported everything from a different device.

Did you restore the same Android app backup? It won't work this way. Current workaround is to install beta version, export printers settings to a file from the app settings, then clean app data and import the file back.

I didn't back up anything, i just deleted the app and redownloaded it from the play store.

Cabalforces avatar Nov 24 '25 09:11 Cabalforces

So im on a pixel 10 pro too and having same issue. Just wondering if there is any update on this? Beta seems to be working

checkulater avatar Dec 05 '25 08:12 checkulater

So im on a pixel 10 pro too and having same issue. Just wondering if there is any update on this? Beta seems to be working

I had a few other pixel 10 users reach out on discord and report the same issue.

For them, exporting the app data. Clearing the apps data and uninstalling+installing it again resolves the issue.

Clon1998 avatar Dec 05 '25 09:12 Clon1998

Disabling the "Back up other device data" in Google One before uninstalling the app seemingly solved it for me. Somehow never realised that between reinstalls all my settings were persistent. facepalm

Cabalforces avatar Dec 26 '25 20:12 Cabalforces