Search Unity

Resolved PlayerPrefs persist between installs on Android

Discussion in 'Android' started by Sir-Thorgeir, Oct 5, 2016.

  1. Sir-Thorgeir

    Sir-Thorgeir

    Joined:
    Jan 17, 2013
    Posts:
    16
    I’ve been running into an extremely weird bug that loads old data into the PlayerPrefs on a fresh install.

    The bug happens as follows:
    1. A phone has my game installed
    2. PlayerPrefs has the key “Animal” stored with the value "Dog"
    3. I set the value of “Animal” to "Cat" and save the PlayerPrefs
    4. I uninstall game from the phone
    5. I install the game onto the phone again
    6. Expected: PlayerPrefs does not contain the “Animal” key
      Actual: PlayerPrefs contains key “Animal” with the value set to "Dog"
    7. This happens even if I manually clear the app cache and data before uninstalling.
    This however only happens on a few devices and seems to be be fixed with a restart of those devices.

    I am concerned that this will happen in production. Has anyone here encountered this before?

    More Info:
    • I have confirmed that my code is not in any way populating the PlayerPrefs
    • I have seen this in the adb log-cat of affected devices:
      But I am unsure if that has anything to do with this bug.
    • There have been 3 affected devices, two Nexus 6p (Android 7.0) and one Nexus 7 2013 (Android 6.0.1), a reboot fixed the issue in each case.
    • I am using Unity 5.4.1f and android sdk version: 23
    • This issue has never happened on iOS

    • I also tried to clear the cache of the Play Store app since it might store something for the game.
     
    Last edited: Oct 5, 2016
    Nolex, ACGT and danmerey like this.
  2. larku

    larku

    Joined:
    Mar 14, 2013
    Posts:
    1,422
    Edit: sorry I can't read.. My response did not address your problem.

    Deleted response.
     
    Last edited: Oct 11, 2016
    rahulk1991 likes this.
  3. mattsm

    mattsm

    Joined:
    Nov 1, 2016
    Posts:
    1
    I am having the exact same issue as OP (for Android at least). One of my test devices persists the playerprefs on uninstall/reinstall (Samsung S7), all other devices do not do this.

    Please help!
     
    ACGT likes this.
  4. JuliusM

    JuliusM

    Unity Technologies

    Joined:
    Apr 17, 2013
    Posts:
    835
    Hello, you've said that it seems to be be fixed with a restart of those devices. Does it mean that once you restart the device, the issue is not reproducible on it in any way?
     
  5. Yury-Habets

    Yury-Habets

    Unity Technologies

    Joined:
    Nov 18, 2013
    Posts:
    1,167
    @Sir-Thorgeir : awesome issue description - could you also submit a bug report (with attached project)?
     
    n1klasL likes this.
  6. JuliusM

    JuliusM

    Unity Technologies

    Joined:
    Apr 17, 2013
    Posts:
    835
    You might want to hold on the bug submission. I'm sure it won't happen with Unity 5.5 anyway (once it's released). I'm still curious if restarting the device fully solves the issue.
     
  7. Sir-Thorgeir

    Sir-Thorgeir

    Joined:
    Jan 17, 2013
    Posts:
    16
    JuliusM, yes it appears that the issue did go away after a reboot of the device when I deployed from my local machine.

    However I have launched my game and seen this happen on a apk from the play store. In that case it was not enough to restart the device, the issue persisted.

    Thanks for the interest ;)
     
    Last edited: Nov 5, 2016
  8. JuliusM

    JuliusM

    Unity Technologies

    Joined:
    Apr 17, 2013
    Posts:
    835
    Well, this happens because on the first start of the new app we copy data from internal path to external. This was done to avoid regressions when we've started to return external path instead of internal on devices with KitKat and newer Android versions.

    You could solve this issue by clearing the internal persistent data path when your app is started. You can get the path like this:

    Code (CSharp):
    1. string GetInternalPath()
    2. {
    3.     AndroidJavaClass activityClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
    4.     AndroidJavaObject activity = activityClass.GetStatic<AndroidJavaObject>("currentActivity");
    5.  
    6.     return activity.Call<AndroidJavaObject>("getFilesDir").Call<string>("getPath");
    7. }
    As I've said before, this should not happen with Unity 5.5 anymore, because we won't be copying data from internal to external paths anymore.

    Hope this helps.
     
    Sir-Thorgeir likes this.
  9. DarkBloodStudios

    DarkBloodStudios

    Joined:
    Dec 17, 2016
    Posts:
    3
    JuliusM, this happens to me and I am using Unity 5.5.0f3. My test device is an Nexus 5X with Android 7.1.1.
     
    Last edited: Dec 22, 2016
  10. JuliusM

    JuliusM

    Unity Technologies

    Joined:
    Apr 17, 2013
    Posts:
    835
    DarkBloodStudios, I've just tried to reproduce this with the Nexus 5X device, with steps provided in the original post, but the issue did not happen for me. Could you submit a bug report and provide a minimal project as well as detailed reproduction steps? Please specify which Unity version do you use when you install the app for the first time and which Unity version do you use when you reinstall the app? When you'll submit the bug, please paste the case number (it's 6 numbers) here as well.
     
    Jimbo_Slice likes this.
  11. bariscigal

    bariscigal

    Joined:
    Oct 26, 2009
    Posts:
    46
    I was having this error with 5.4.1 version and after i saw this thread i have updated Unity to 5.5.0.f3. I have deleted the application from my device and built again.
    And i can confirm this problem persists.
    Still the playerprefs are getting persisted between reinstalls. @JuliusM

    I dont think it is a device problem by the way. One of the device is S7 Edge and other one is Samsung J1 Ace (5.1.1)
     
  12. squigglyo

    squigglyo

    Joined:
    May 21, 2012
    Posts:
    107
    Any update on this?
    5.5.2p3 and its still happening.
    Consistently on Google Pixel.
     
  13. DWilson81

    DWilson81

    Joined:
    May 4, 2016
    Posts:
    3
    I have seen this before, where the data is getting pushed to the cloud automatically via the OS and persists there.
    You may want to check that your data isn't being sync'd to w/e cloud service is used by the device.
     
  14. bariscigal

    bariscigal

    Joined:
    Oct 26, 2009
    Posts:
    46
    Still nothing?
     
  15. Yury-Habets

    Yury-Habets

    Unity Technologies

    Joined:
    Nov 18, 2013
    Posts:
    1,167
    No - I haven't seen a bug report coming to us.
     
  16. Black_Demon

    Black_Demon

    Joined:
    Jul 12, 2014
    Posts:
    12
    Hi, we are having the same issue only on this two devices: Samsung S6 and S7, both with Android 7.0. We are using Unity 5.5.2f1. As additional info, this happens only when we export the app from Unity Pro, the issue doesn't appear if it is exported from the Personal Edition.
     
  17. Black_Demon

    Black_Demon

    Joined:
    Jul 12, 2014
    Posts:
    12
    Although it is not directly related to this post, i would like to mention that we were having issues with the persistentDataPath, due to it returned different paths everytime, sometimes the external, other times the internal path, so we had to use reflexion instead, to point to the internal path (the same code you are using here), where we are currently saving all the data.
     
  18. Yury-Habets

    Yury-Habets

    Unity Technologies

    Joined:
    Nov 18, 2013
    Posts:
    1,167
    Folks, I didn't see a bug report so far. Sorry we can't fix anything without knowing what's wrong. Can someone please report a bug and attach the project? Thanks!
     
    rahulk1991 and danmerey like this.
  19. Aurigan

    Aurigan

    Joined:
    Jun 30, 2013
    Posts:
    291
    This is still happening in 2017.2.0p2 on Android / Google Pixel. Doesn't seem to matter how many times I uninstall/reinstall it it's always pulling in the same, ancient copy of a player prefs string. Uninstalling and restarting the device also doesn't fix this.

    Have submitted a bug report with my project, case 991544.
     
    Waz and ACGT like this.
  20. pravinm002

    pravinm002

    Joined:
    Dec 9, 2014
    Posts:
    3
    i am on unity 5.6.4 , but on some devices this issue is still there
     
  21. pravinm002

    pravinm002

    Joined:
    Dec 9, 2014
    Posts:
    3
     
  22. danmerey

    danmerey

    Joined:
    Jun 25, 2015
    Posts:
    14
    I encountered kinda same problem today, but I got a few additions:
    • When I delete / reinstall the game, data is not fully reset, but is set to one specific state all the time (it doesn't matter what data was before deleting app). Something like "Every time after reinstalling you have Tutorial completed, 3 Gold and Music muted".
    • It is reproduced only when WiFi is enabled (with no connection reinstall will reset all data)
    • After restarting device I can't reproduce the bug
    • I'm using Unity 2017.3.0f3, my device is Nexus 7 (2013)
    I hope this will help Unity guys to reproduce and fix that problem.
     
    Nolex, Waz, rahulk1991 and 3 others like this.
  23. noahx

    noahx

    Joined:
    Nov 22, 2010
    Posts:
    77
    I'm experiencing the same problem (2017.3.1).
    I need to add that on previous versions I was not experiencing this issue. This is the first build I make using the stated Unity version and after uninstalling and installing the game/build the playerprefs have information already (from the previous installation).
    It has been a year and a half since the first report of the problem and it's unbelievable that it is still not fixed...
     
    ACGT, RaL and danmerey like this.
  24. RaL

    RaL

    Joined:
    Nov 29, 2013
    Posts:
    35
    I would say it has something to do with the Android 6 automatic backup feature. Setting android:allowBackup and android:fullBackupContent to false in the manifest should solve this IMHO.
     
  25. martinasenovdev

    martinasenovdev

    Joined:
    May 7, 2017
    Posts:
    67
    any info on that? Having this issue on an Samsung J5? App is deinstalled but player prefs persist between installs
     
  26. Yury-Habets

    Yury-Habets

    Unity Technologies

    Joined:
    Nov 18, 2013
    Posts:
    1,167
    We haven't received a reproducible bug report with this issue yet. (at least I'm not aware of it)

    If you could submit it - it would be very helpful! Please make sure to include a sample project, steps to reproduce and device info.
     
  27. bariscigal

    bariscigal

    Joined:
    Oct 26, 2009
    Posts:
    46
    Just as an excuse, i am sorry i can't post an issue/bug report because:

    1- I don't have time to test and test to create the issue again in a new project. Since this seems to be happening without a pattern. (at least with my devices)
    2- My project is huge and a commercial project that i simply can't send.
    3- Can you please ask your QA assistants to try to recreate the issue ? :)
     
  28. Yury-Habets

    Yury-Habets

    Unity Technologies

    Joined:
    Nov 18, 2013
    Posts:
    1,167
    Absolutely. No luck so far. :)
     
    bariscigal likes this.
  29. martinasenovdev

    martinasenovdev

    Joined:
    May 7, 2017
    Posts:
    67
    I have the same situation as @bariscigal. First of all it is not good we can't submit bugs without attaching sample (or our own) projects. I've couple of problems that are easily reproducible with just a description. But I can't report them because I don't have the time currently to separate them into a sample project. But that is another story.

    I noticed a pattern by which it happens. Device is Samsung Galaxy J5.

    I build a production build of my project. Then the exported .apk file I submit to http://diawi.com and then send the link to whoever tests. They uninstall the game prior to installing (not just removing the shortcut) from the device. Also, under Settings>Apps>*my app name*>Storage, it says no storage is used ??? (maybe player prefs are stored elsewhere).
    Then, they install the app from the link I sent them prior.

    Game is launched and the player prefs are still there.

    On the next day I submitted the same build to Google Play. It was approved and when the same tester with the same phone uninstalled the app and downloaded it from the official store, the player prefs were obviously cleared at that point.

    Hope that helps.

    Cheers
     
    ACGT likes this.
  30. pertz

    pertz

    Joined:
    Jan 8, 2015
    Posts:
    106
    This exact same issue happened to us today, using 2018.2. After a reboot of the device the problem was gone.

    EDIT: coincidence or not, the device is a Samsung J5, the same reported by the previous poster (@martinasenovdev).
     
    Waz and ACGT like this.
  31. Driven

    Driven

    Joined:
    May 31, 2013
    Posts:
    77
    Same here with 2018.1.X and 2018.2. Playerprefs are not deleted when uninstalling anymore (using Oneplus 3 atm) AND Playerprefs are returning very old cached values from days or weeks ago sometimes (very rare case but it happens) so like: save a value to 3, then to 4 then 5, days later to 6,7 etc and out of nowhere by getting this value it returns an old number like 3 or 4 again (mostly it was an old value from a previous version of the game so it looks like there are multiple Playerprefs with same name created with each new version? And by bad luck it reads an old one?). 2 fatal Bugs. I can not make a project to reproduce this, except for the first Bug which happens 100%.
     
    ACGT likes this.
  32. bariscigal

    bariscigal

    Joined:
    Oct 26, 2009
    Posts:
    46
    Ok completely 2 new projects. One is a port from ios .
    - 2018.2.0f2
    - Samsung S7 Edge
    - Macbook pro (2 different laptops)

    Removing the app from the device and re-build&run.

    Persisting for all builds without a reboot.

    i believe it is an android problem. I tried creating a new project without any luck . (build & run through unity).
    But as i tried installing by copying the apk to the device and install there, the app doesn't gets listed on the app list. But when i search the app is there and runs. Weird bugs?

    Also can anyone point me to a direction where the pprefs resides on android devices (any secret copies etc?) ? I will try to look for the issue on the spesific android forums.
     
    Last edited: Jul 26, 2018
    ACGT likes this.
  33. JuliusM

    JuliusM

    Unity Technologies

    Joined:
    Apr 17, 2013
    Posts:
    835
    from https://docs.unity3d.com/ScriptReference/PlayerPrefs.html :
    On Android data is stored (persisted) on the device. The data is saved in SharedPreferences. The PlayerPrefs data is physically stored in /data/data/pkg-name/shared_prefs/pkg-name.xml.
     
    bariscigal likes this.
  34. Driven

    Driven

    Joined:
    May 31, 2013
    Posts:
    77
    @JuliusM are you able to forward this Bug to QA? I reproduced it 100% and it breaks every game! (At least with Unity 2018)

    Steps:
    1. Install App
    2. PlayerPrefs.SetFloat("Test", 5.065f);
    3. Debug.Log(PlayerPrefs.Haskey("Test")); // true
    4. PlayerPrefs.DeleteAll();
    5. Debug.Log(PlayerPrefs.Haskey("Test")); // false
    6. Uninstall App
    7. Reinstall App
    8. Debug.Log(PlayerPrefs.Haskey("Test")); // true

    I can not explain how it is even possible that the key gets restored on uninstall but it happens or at least it's taking a cached value from somewhere else. This leads to loading of old Data (sometimes VERY old). I was using PlayerPfres before, now i'm using file based saving but for the change i have to copy values over from PlayerPrefs to the file. This is done by the HasKey check and then in the end PlayerPrefs.DeleteAll(). This works as long as the app stays on the device but with every reinstall HasKey() is true again and the old values get copied to the save file(they should not be there anymore!!). That's an infinite bug loop. Any chance this gets fixed?
     
    ACGT likes this.
  35. RaL

    RaL

    Joined:
    Nov 29, 2013
    Posts:
    35
    Sorry to repeat myself but... it's the automatic backup feature of Android 6.
     
    Energy0124, AM-Dev and Yury-Habets like this.
  36. fernando_penna

    fernando_penna

    Joined:
    Jul 13, 2018
    Posts:
    1
    Is your app setting the PlayerPrefs on some Start function? Because by your steps, I think that somewhere in the code it is setting the PlayerPrefs and because of that the Haskey returns true.
     
  37. Driven

    Driven

    Joined:
    May 31, 2013
    Posts:
    77
    Oh i didn't see RaL's post. Setting android:allowBackup and android:fullBackupContent to false really solved this issue. This never happened in Unity 5 though with Android 7 and 8. Maybe there should be an option to enable or disable backup in the player settings? Just an idea.
     
    Hobodi, Yury-Habets and RaL like this.
  38. Yury-Habets

    Yury-Habets

    Unity Technologies

    Joined:
    Nov 18, 2013
    Posts:
    1,167
    @RaL thank you for the solution!
    We probably don't want to add these values to the manifest by default. Will think about what we can do.
     
    bariscigal likes this.
  39. s4ykurt

    s4ykurt

    Joined:
    Jun 29, 2016
    Posts:
    3
    I had same issue, I found the problem which is Android Backup and Restore option in Settings. I deleted my backups from my Backups in Google Drive and I disabled Backup in phone settings. It was restoring old datas everytime after uninstalling/installing apk. Now, it does not restore.
     
    ACGT likes this.
  40. JessChis

    JessChis

    Joined:
    Aug 16, 2018
    Posts:
    2
    @Driven Add step `4.5. PlayerPrefs.Save();` so the changes will be persisted.
     
  41. Nicoroots

    Nicoroots

    Joined:
    Apr 21, 2018
    Posts:
    6
    Hi there,

    I have the same issue but restarting my Honor6X is not solving the issue.
    I'm using Unity 2017.3.0f3 and my phone is working on Android 7.0

    The solution given by RAL seems to work for some people, but I have no idea how to access "allowBackup" and "fullBackupContent" values.
    I tried to google it, but I couldn't find a proper tutos or something clear.

    Can someone please help me on this one ?
     
  42. CameronGoosen

    CameronGoosen

    Joined:
    Jan 11, 2017
    Posts:
    28
    @JuliusM
    Does an upgrade of an application count as a 'first start'? Thanks
     
  43. JuliusM

    JuliusM

    Unity Technologies

    Joined:
    Apr 17, 2013
    Posts:
    835
    I can answer this question, but I am not sure if it will help you and if that's really what you want to know. Discussing posts which were about old Unity versions tends to confuse people, so a disclaimer: this question and answer is related to a very old Unity version and is not relevant to any currently supported versions anymore.

    Now to answer your question, in this particular case of copying the persistent data files from the internal location to external, it was done only when there was an existing app on the device which was created with an older Unity version and then that app was upgraded with a version built with Unity 5.4 (maybe 5.3 as well, can't remember that now). So yes, it was done only after the app was upgraded and then launched for the first time. If you have created an app with Unity 5.4, installed on the device and then released an update with Unity 5.4 or later Unity version, the files will not be copied after the update was released. I hope this explanation is clear enough, but even if it is not, note that this is relevant only for a few unity versions. Since Unity 5.5 we do not copy files anymore.

    If you have looked through all posts in this thread, you should have seen that my original post even though it described the existing behaviour, but it was not the true reason why player prefs persists between different installs. Even though I have not confirmed this myself, https://forum.unity.com/threads/playerprefs-persist-between-installs-on-android.434886/#post-3506849 seems to be the real reason. So if you are seeing the persisting player prefs issue, please ignore that post made by me. And even if you are not after the playerprefs issue, note that this copying behaviour does not exist in Unity 5.5 and later versions. Finally "first start" in a different context could mean a different thing, so this answer is relevant only to the original post which you have quoted.
     
    Sir-Thorgeir likes this.
  44. GeoCats

    GeoCats

    Joined:
    Oct 4, 2018
    Posts:
    7
    Hi, we are on Unity 2017.4.15f1, and something like this happened to us aswell.

    We ended figuring out that the problem is Android Backup. A service that is controlled by Google, and that BY DEFAULT stores your app data to a backup copy on Google Drive. I've done some research, and found that this is for all apps/devices that are Android version 23 or more, which has been our case since the beggining, but only encountering this problem NOW (which I find very wierd).

    The solution is to remove that backup copy (from Google Drive app, on the slide menu, in the security copies section), I couldn't delete only the data from our app, had to delete it entirely).

    As you can see in the Android docs (https://developer.android.com/guide/topics/data/autobackup), not only PlayerPrefs would get backed up, but also almost every data on your app (things in Application.persistentDataPath, Analytics, etc.).

    The "solution" is to add the android:allowBackUp = "false" in Android Manifest (you can also specify which paths should be backed up/which not, but this requires extra work/knowledge, and in my opinion, noone should count on this feature). But this would only be a workaround, because having your app's data backed up by Google Drive is always nice for security purposes (maybe restoring your app data after your phone got stolen). For games that handle all the data management online, it's no problem, but otherwise (sorry), you are F***ed. Because the customer may experience unexpected behaviour (our case the app crashed) and end up uninstalling & bad reviewing your app because the customer has NO way to know that it's caused by the Android Backup.

    Please work on this, Unity team, it's an important issue IMO.

    Thanks.
     
    Last edited: Nov 20, 2018
  45. dizzymediainc

    dizzymediainc

    Joined:
    Apr 6, 2014
    Posts:
    433

    This was very helpful, thanks for the detailed feedback. Issue persists in 2017 versions and 2018 versions and i was banging my head against the wall wondering what the heck the issue was :p
     
  46. cyborgjinx

    cyborgjinx

    Joined:
    Dec 10, 2014
    Posts:
    28
    I am having this issue but setting allowBackup= false has no effect.

    For reference, I am downscaling my resolution using

    Code (CSharp):
    1. Screen.SetResolution(with * 0.75f, height * 0.75f);
    When I relaunch the game, the resolution is the downscaled number and not the native number. This happens even before I call the resolution scaling script.

    I have tried just about everything including getting the resolution using:

    Code (CSharp):
    1. Screen.width, Screen.height;
    2. Screen.currentResolution.width, Screen.currentResolution.height;
    3. Display.main.renderingWidth, Display.main.renderingHeight;
    4. Display.main.systemWidth, Display.main.systemHeight;
    5.  
    6. public static Resolution GetRealResolution()
    7.     {
    8.         if (Application.isEditor)
    9.         {
    10.             return Screen.currentResolution;
    11.         }
    12.  
    13.         Resolution res = new Resolution();
    14.  
    15.         using (AndroidJavaClass unityPlayerClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer"), metricsClass = new AndroidJavaClass("android.util.DisplayMetrics"))
    16.         {
    17.             using (AndroidJavaObject metricsInstance = new AndroidJavaObject("android.util.DisplayMetrics"),
    18.             activityInstance = unityPlayerClass.GetStatic<AndroidJavaObject>("currentActivity"),
    19.             windowManagerInstance = activityInstance.Call<AndroidJavaObject>("getWindowManager"),
    20.             displayInstance = windowManagerInstance.Call<AndroidJavaObject>("getDefaultDisplay"))
    21.             {
    22.                 displayInstance.Call("getRealMetrics", metricsInstance);
    23.  
    24.                 res.width = metricsInstance.Get<int>("widthPixels");
    25.                 res.height = metricsInstance.Get<int>("heightPixels");
    26.             }
    27.         }
    28.  
    29.         Debug.LogFormat("GetRealResolution: width {0} height {1}", res.width, res.height);
    30.         return res;
    31.     }
    But nothing works. Please any help would be greatly appreciated as this is driving me crazy not being able to fix the resolution.
     
  47. dimzki

    dimzki

    Joined:
    Apr 17, 2018
    Posts:
    12
    after spending days figuring out why my APK after reinstalling keep using an old value instead of the assigned one....

    i have to thank @RaL for this fix

    so it happens ONLY after i plug my phone to my laptop to directly transfer the APK

    before, i was using onedrive to upload from my PC and download it to my phone and this problem never occured.

    so basically i just copied the android manifest from the unity installation folder to my project/assets/plugins/android/

    edit it with notepad++

    and add the following, under application:
    android:allowBackup="false"
    android:fullBackupContent="false"

    and now my game works as intended.

    this auto backup might be a good idea for users, but for me, when im trying to review an updated APK is a horror to find the value different from the editor.
     
  48. alegashkin

    alegashkin

    Joined:
    Feb 2, 2019
    Posts:
    1
    Hello!

    maybe I can help someone.

    I encountered the same problem on the Galaxy S8 and unity 2018.3 that after a complete reinstallation of the game: the old player prefs values are pulled up.

    After reading this topic, this steps helped me:
    1. just deleted the game from the phone
    2. turned off the Internet on the phone (network and wifi)
    3. installed the game
    4. profit - no values playerprefs pulled up

    ps google translate..
     
  49. salmannabi

    salmannabi

    Joined:
    Oct 12, 2020
    Posts:
    4
    I don't know why that a number of people have pointed out to this they have been ignored but this happened to me on an android studio project and upon reading google's documentation on Auto Backup it was google that is backing up your PlayerPrefs information on all app and games (even made with unity) to the cloud and whenever you try to re-install the game (or app) on whether a new device or the same device google will attach the backed up player prefs data with it

    According to google you can delete your player prefs or game backup data by going to the Play Games app, settings, selecting "Delete Play Games Account & Data" and there you will see all your games backup data individually and you can delete the specific app data as required.

    Here once again Play Game App > Settings > Delete Play Games Account & Data > "Your Individual game or app"

    Just make sure you don't delete your play games account by mistake (I don't know why google placed this data with your play games account)
     
  50. Akib1193

    Akib1193

    Joined:
    Mar 23, 2022
    Posts:
    1
    Thanks, It's the answer to why this problem happened.