How to detect, if Android App was already installed at the device? - android

Is it possible to save some information at the device, if user deletes the application from his device? Something like a key-value (f.e. ("app id","date of installation")) which will not be removed?
Background: we are working on an application, which has an anonymous user for "exploring the app". This user should be removed, if user logs in. We can cover all cases, but not if user deletes the whole application. In iOS you can achieve this, by saving some values in the iOS-Keychain.
Any ideas or workarounds are welcome!

You have to save the data to some external file. So when you want to get the data you can read the data based on the file path.

Is it possible to save some information at the device, if user deletes the application from his device?
You can put stuff out on external storage in a place that will not be automatically deleted when your app is uninstalled (e.g., one of the roots supplied by Environment). However, the user can delete that file whenever the user wants.
Beyond that, there are no options, specifically so apps do not leave cruft behind that builds up and clutters up the user's device.
we are working on an application, which has an anonymous user for "exploring the app". This user should be removed, if user logs in.
It is unclear what this has to do with your original question.

Related

When is a SQLite Database for an Android application deleted?

I do web dev, and the information in the database is removed if I do it myself, but what about with Android? Will that information be deleted if I was to perform a factory reset on the phone? Is the only way to delete the database is ny removing the app from the phone?
Will that information be deleted if I was to perform a factory reset on the phone?
If the database is in its normal spot (internal storage), then a factory reset should prevent further access to the data. Somebody with sufficient forensic tools can probably still get at it, though, unless the user had their device set up with full-disk encryption.
Is the only way to delete the database is ny removing the app from the phone?
You, as a developer, can delete the database by calling deleteDatabase().
The user can also click the "Clear Data" button on your app's page in Settings. This is uncommon but can happen. From the standpoint of your app, the result is very similar to what you would see if the user uninstalled and reinstalled your app.

Reclaim User History Android

How to check if the app is a fresh installation or a re installation. I want the user to have his history downloaded if its a re-installation like whats app. I thought of writing the user id in the shared preference but that is not possible as the data may get erased once the app is uninstalled. I am already having a folder of my app on the device which is used for image caching and downloading new images, but this is not reliable as the user may delete the folder. What else can I try ???
Obtain the user storage with getExternStorage, then leave a file there that specifies the usage history. The file you save there will survive uninstalls and reinstalls. Of course the user can delete that file but generally they will not, and if you name it properly they will realize it is part of a program.
I'd suggest you integrate with Android's Backup Service.
People switch phone every two years. Some factory reset their device. Some have more than one device. And some share their device with their kids. Linking a user history so that it follows a particular google account is the ideal way to go.
As to your question regarding Facebook integration, I'm afraid I know too little about that topic to be of any help.

How to Manage Offline Trial Expiration for an Android Application?

I have developed an application that I want to share with my clients. I want to share its trial, taking care of following points
Application should expire (i.e. User cannot move from main activity) after 30 Days
Internet connection is not required for my application so I don't want to manage trial expiration by managing a server where device's IMEI can be stored or sort of thing.
I want to restrict user from using application even if he uninstall and later on re-Install my app.
I want to protect application trial against a manual date changing hack normally applied by users
I was planning to maintain a file for my application with time token of first run saved in it which can be compared with GPS time on each run but the issue I am facing here is of file storage. If I save a file in Internal memory it gets deleted with application un-install and cannot be used when user reinstalls the app and if I store it on SD card/ External memory it is vulnerable to user deletion. I have investigated this issue from everywhere I can but got no success. Any idea or suggestion by you guys would be a relief. :-)
There will have internet access when the app is installed, or they wouldn't be able to install it.
Simply require that the user activate the app with a server the first time they use it. The app gets a "this app was first activated on yyyy-mm-dd" response from the server, and stores that info on a file in internal storage. From that point on, the user won't need to be on-line to use the app.

How to restrict an application to only one user

I'm creating an Android application for a fantasy league as part of a college project. It's a paid application, and requires each download to be associated with only one team.
I'm confused as to how best go about it. If a user goes to settings and clears the data from there, all files, settings and databases would be deleted rendering a locally stored indicator for "The app has already run before and hence user is registered" as pointless.
Another option that had come to my mind was to store the IMEI no on a remote database (with SHA1 encryption to protect the data) but the problem with this is that, if a user loses or changes his phone, his further participation would be impossible. Additionally, users understandably don't like to share IMEI numbers and it's acceptable.
The best solution in my mind was to restrict usage of the app to the Google account that was used to download the application. With this, even a change of handsets would allow further participation of the user. However, I've not been able to find a way to obtain the Android Market account (only require E-mail) which resulted in the download.
So, my question is, how do I best go about with the problem that I face? Is there a way to get the Android Market username? Or is there a worthy alternative?
The server-side option is what you want, you can get a unique id from each phone and use that as your identifier.

Android: saving info for trial application

I want to save some info regarding a trial version an application.
I want this info to be persistent in order to detect if the user removed the application and installed it again after the trial expiry.
what is the best place to store such info
thanks
Most of the times the solution to this problem is to keep an server side check,
But if you dont want to involve a server its better to give some limited functionality in your trail app and full in the paid version.
There are other methods too like Time Trial but again they all depends on persistent data so they also fails if the user uninstalls and installs again your applucation
Store it in external file.
it wont be deleted after user uninstalled the app.
but
Serverside check by Device ID is the good way ..
I'm working on the same "problem" at the moment (offline solution for trial time expired apps):
My findings: There is no way to ensure that a user never can reinstall & reuse a (time) trial app but there is a way to 'nearly' prevent it:
Use shared preferences / a database / file saved on internal storage containing the install timestamp.
If the device has an external storage card (most devices have) also save the timestamp on the sd card.
The only possiblity to use your application also after expiring is if the user 1. clears app data on the phone and 2. finds the timestamp file on the sd card and also kills this one.
If he "just kills" the first or second check the killed one can be restored on next app start.

Categories

Resources