Firebase Analytics first_open event sends a parameter previous_first_open_count.
it starts with value "0" (on lifetime first install / new user).
and subsequently 1,2,3 .. etc. increments by "1" each time I remove, re-install the app.
Can someone share how the SDK manages to persist the information how often user installed the app (basically triggered first_open) in the past.. AFAIK, once the app is removed, all the app data is deleted.. even the app_instance_id is regenerated each time I remove, re-install the app...
will appreciate to know for both Android and iOS
Actually cannot find any documentation about event_param: previous_first_open_count..
When previous_first_open_count = 0, does it means that user installed application only?
Or does it mean, that user have installed and opened app for the first time?
As per the definition ’first_open’ (https://support.google.com/firebase/answer/9234069?hl=en&visit_id=637466094047451258-3073953155&rd=1):
the first time a user launches an app after installing or re-installing it
This event is not triggered when a user downloads the app onto a device, but instead when he or she first uses it. To see raw download numbers, look in Google Play Developer Console or in iTunesConnect.
Supports measuring first_open conversions for users who accept Apple's iOS 14 app-tracking prompt.
Related
I have developed a Mobile App for both Android and iOS. Now every week we have 2 updates to be released. Most of the times Android and iOS users stops auto updates for the apps. But if there are critical updates or bug fixes or new features then we must ask user to update the app for better usability. For this I have found Android has In App Updates API. It says and I quote
Keeping your app up-to-date on your users’ devices enables them to try new features, as well as benefit from performance improvements and bug fixes. Although some users enable background updates when their device is connected to an unmetered connection, other users may need to be reminded to update. In-app updates is a Play Core library feature that introduces a new request flow to prompt active users to update your app.
However I am not able to find same kind of or similar like feature for iOS. I am not sure if Push Notification can do the same or not. Please advise.
No, App can not be updated or downloaded without the user's settings for Auto Updates.
But you can try an alternative way.
Like when the app opens or comes to the foreground, call an API/web service to check is there any critical update released based on the current version of the app? Based on YES/NO response, show an alert to users that new update is available and on OK click, take them to the Apple stores.
No, iOS does not have the auto update feature that Android has. Push notification would not work well for this, as 1) the user may disallow push notifications, and 2) the Push would not know what version the user is currently using.
If your app calls a backend web API or web service, then it is pretty simple for the app to call a method, say, getVersion() in the web service. The web service reads the current version as set in a config file and returns it to the app. It could also return a flag that says Mandatory = either Y or N.
In your app, you call the getVersion() method every time on start up. If the app's version number is less than the version returned in getVersion(), then you check to see if the mandatory flag is set to 'Y'. If so, you show a dialog that says a mandatory update is required before you can use the app, would you like to install this now? If yes, you navigate them to the page in the iTunes app store, and exit the app. If no, you exit the app. They will get the same message every time they try to run the app until they update it.
If the mandatory flag is set to 'N', you show a dialog saying that an updated version is available, would you like to install it now? If yes, then navigate them to the page in the iTunes app store, and exit the app. If no, you allow the app to open and continue. However, the user will again be prompted every time the app opens until they update.
You can make the getVersion() method work for both iOS and Android, if you pass the platform to the method getVersion(String platform), and then read the config file for android_version or ios_version (as the version numbers may differ between platforms) depending on what was passed in the platform parameter.
I want to give free stuffs for first time users.
How am I able to track that your phone (both iOS and Android) is downloading my app for the very first time and not deleted and re-downloaded, for iOS and Android?
Make sure that you store device UDID/UUID in both cases and make a counter in backend database for install times associated with this UDID/UUID if the counter equal to one then this is first time user if more than that then this user has deleted and redownloaded the app. For iOS an additional step is required as the UDID is an generated value. You will have to save this in the keychain. Keychain won't get cleared when you uninstall the app. It will though if you reset your phone.
My application is going to be preinstalled on a vendor device (eg. Vodafone/T-Mobile/ATT is going to sell phones with my app preinstalled). This preinstalled app is very lightweight - only landing page with Update button, which redirects to the Google Play.
I'd like to track how many users coming from this preinstalled app (how many of them sign up, bought subscription, etc.).
Scenario 1:
User starts a phone for a first time
User opens preinstalled app
I can save in shared preferences that user opened app and read it in real updated version
Scenario 2:
User starts a phone for a first time
Preinstalled app is being updated in background through Play Store
I do not recieve any broadcasts (eg. BOOT_COMPLETED) because app was never opened
User opens updated version -> I do not know if he's coming from preinstalled app or not
My question is how to solve scenario 2?
I had that problem too, but didn't find a solution that fit my needs (other than don't update the store version for a few months after releasing the OEM version). You can't save anything if the app wasn't opened, but maybe you can try to read the install date:
long installed = context
.getPackageManager()
.getPackageInfo(context.getPackageName(), 0)
.firstInstallTime;
(copy&paste from https://stackoverflow.com/a/5311917/2694254, there are also other solutions to get the install date on that site)
You would still have to make some assumptions, like "if app was installed but not opened on the same day" if your App is already publicly released before the OEM App is installed.
I have an iOS app builded on Parse. I use push notification so I use the Installation table. My problem is that, when I use the same user account on two different devices (two different iPhones), there is still only one Installation entry in the table. My thinking is that there should be one entry per device, as each will have its own token?
Do you know if there should be 1 Installation entry per device OR 1 per user account?
According to "Managing Push Subscriptions with Installation Objects" when a device registers for push notifications via the client SDK, the push service works behind the scenes to manage the device’s subscriptions.
This subscription you can view and modify through “Installation”
objects, each of which corresponds to an installation of your app on a
device.
Installation objects are automatically created and modified when SDK push methods like subscribeToChannel and unsubscribeFromChannel are called, and are fetched by the getSubscribedChannels SDK method.
I would also want to comment that looking at my own tables on Parse I have a new row in Installation table for every new version (appVersion) of my app
See this link for an explanation of how the Installation class works by Héctor Ramos from the Parse team.
This gist of it is:
The Installation class contains objects that are just that - unique
installations of your app. When you delete the app from the phone,
then reinstall it, this corresponds to a new installation. If the app
is restored from iCloud, though, the same Installation object will be
used.
You will probably want to track IAP data in the User object instead,
then link users to their installations. A user can have more than one
installation, if they install the app on an iPhone and iPad, or if
your app is available for Android, too.
I recently published an app to the Amazon App Store. After I found some unexpected bugs I made the fixes then uploaded a newer version.
I was more than a little surprised to find that the Amazon app store app doesn't actually notify the user that there's an update available. As far as I can tell the only way for the user to ever find out about updates is to open the app, open the drawer, choose 'my apps' then hit the refresh icon. No one will ever bloody do that. Ever.
The only solution I could think of was to store the current version code on the server then add code to the app that would compare the version on the server to the version code on the manifest. If the version on the server was higher (which I set manually after a new update goes live on the store) the app would prompt the user to update by means of a dialog. Dismissing the dialog brings the user to that apps page in the amazon app store app.
So that works great and all but guess what happens when the user is redirected to the Amazon app's page for my app? It says 'open' not 'update'. If you hit the button it just brings you back to the app which just shows the dialog again. There isn't even a refresh icon on that page.
Once again, the ONLY way for users to find out the update, even after being brought directly to the app's app store page is to open the bloody drawer, choose 'my apps' then hit the refresh button.
I must be missing something here. Why the hell would Amazon make a system that's so damn unfriendly for the developer? Is there a setting somewhere on the developer console that I'm unaware of?
This is what I'm using to open the Amazon app:
Intent goToAppstore = new Intent(Intent.ACTION_VIEW,Uri.parse("amzn://apps/android?p=" + getPackageName()));
goToAppstore.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
getActivity().startActivity(goToAppstore);
As a user, I can confirm that the Amazon App Store does not show updates when available. It used to, but this was somehow broken in some version of the app store apk. I do get some kind of warning about enabling sync, but there's no such setting on my android phone.
The only way I can update an app is to delete it from my phone and re-install from the app store, and I have to KNOW there's an update to install.
There are a few developers who have not posted updates on Amazon, and I get the impression it is not easy for them to do so.