I was just curious to know few basic behavior of the google play-store.
Tried to find the answers of below questions:
1) If my phone network is switched from cellular to WI-FI while i am downloading an app from the play-
store. How google manages the connection as it resumes the download from where it stopped, because as
far as i know the IP address will change and TCP connection restarts the session.
2) What are the detailed steps involved right from requesting for an app from play-store till it is
installed in our device. I mean what are the factors of the device google crosschecks, for instance,
if the minimum version of the app is 7.0 and i have a device of 6.0, will the .apk gets downloaded and
then the version is verified or it is verified before the download starts.
Couldn't able to find a document on these. Please share if you have one.
Regarding 2)
The Play Store won't offer you an app for download if your phone doesn't meet it's requirements. This means you won't be able to download the app via the play store if:
Your phone doesn't meet the required minimum android version
Your phone doesn't support one of the features that are marked with uses-feature required="true" in the manifest (see reference)
e.g. NFC, camera
The vendor explicitly excluded your phone from the list of supported devices
e.g. some Samsung apps are only available for Samsung smartphones, like Gear 360 app. Some games are only available for Nvidia Shield like Half Life 2
The vendor doesn't release the app in your region
Related
Usually Android updates are distributed to devices by device manufacturers since they need to adjust the patches they get from Google to their tweaked interfaces/drivers.
Is it same with Android "Vanilla" OS or do the devices with those versions get updates straight from Google servers without manufacturer's interference?
Let's say my phone's manufacturer goes bankrupt. Will I still get automatic updates to my Vanilla Android 5.1? Or even OS upgrades (5 -> 6)? Or is the device doomed to be outdated from then on?
If you are using a "google phone", nexus or pixel, then you can get the OTA update from Google. Otherwise the update will come from the manufacturer to the carrier and then to you. Are you using a non-google phone with Vanilla Android? If so, did you install the OS on your own?
I asked a question earlier about stopping tablets from an android app and I've added this line to the code:
<uses-feature android:name="android.hardware.telephony" android:required="true"/>
Now I want to verify it and be sure that the app cannot run on a tablet by testing it on an emulator. However, it seems like this requirement is always met on emulators. Is there another way to go about testing it?
You do, with that line, block all devices that do not have access to a SIM card from installing from Google Play. This isn't limited to tablets. THere may be phones without sim cards, and there are tablets with SIM cards and the ability to send text messages and make calls.
From Ken Wong's comment on the question:
Declared elements are informational only, meaning that the Android system itself does not check for matching feature support on the device before installing an application. However, other services (such as Google Play) or applications may check your application's declarations as part of handling or interacting with your application.
If you want to block tablets as a whole, that is basically impossible. This question offers a possible solution using the supports screens tag, but this, AFAIK, only makes the app incompatible on Google Play. If it is installed from a third party (USB debugging, APK mirror, from an APK file, etc) it can be installed. Once again we are back to the compatibility issue. The supports-screens tag is the same as the required tag: It is informational. Those who respect the tag doesn't allow installs. From this article:
An application that does not support small screens will not be available for small screen devices from external services (such as Google Play)
Small screens is just an example. If the support for any screen size is set to false, it will not be available from external services. Installing the APK directly (apk install outside Google Play or from USB debugging) bypasses it.
In addition, there are phones with xlarge screens. (They are more phablets I think the term is, but they are still phones. Just large ones).
So to summarize:
Using the required tag (should in theory) allow the app to install from third party sources, but Google Play shows it as incompatible. So USB debugging and APK installs (not from Google Play) allows install. Check for compatibility at runtime instead
Attempting to prevent tablets from accessing the app is basically stupid. Tablets can have SIM cards as well, blocking tablets because they have a bigger screen is not a good idea. Checking for the SIM card instead is the best way.
As for the emulator, AFAIK it would install in testing even though required is true. It will crash if you make calls to things it doesn't have. Have you checked to ensure the tablet emulator actually doesn't have telephony access?
Now I want to verify it and be sure that the app cannot run on a tablet by testing it on an emulator. However, it seems like this requirement is always met on emulators. Is there another way to go about testing it?
Well, required (as mentioned in a comment) is informational. The device itself doesn't check the conditions in the manifest (required = true at least). Once it is installed, check at runtime for compatibility. The required = true tag prevents installs from Google Play on unsupported devices (it shows up as "incompatible").
(Unfortunately) apps have a tendency to get pirated and uploaded to APK mirrors and similar sites (I know this from experience). These sites aren't like Google Play, and ignore the required = true calls. The app can be installed from these sites even on incompatible devices. So the best way to avoid incompatible usage is to check if the device has telephony access at runtime.
For checking on Runtime, that is a big field. Check this question for different solutions.
I can't find anything online for this.
A user mentioned that he couldn't download my App because Google Play wouldn't let him. So I bought the device the user has (Galaxy Tab 3) because I couldn't figure it out remotely.
I can't find the App in the Play Store on the device. If I log in with the same Google account, it tells me that my device is incompatible with this App. All the information I have is "No Carrier".
Could it be possible that if my App needs an Internet connection I can't download the App if the device doesn't have a Sim-Card or something?
Update:
I have another flavor of this app in the store. The only difference (manifest-wise) is that this app needs camera permissions. But even if I make those optional (setting 'required' to false), it doesn't help. Also the specific model 'GT-P5210' is not listed in neither of my Apps in the supported devices list (even though I can find the other app in the store with the device). Also I made sure that there are screenshots for every possible tablet size.
Also I can of course install the App from Android Studio.
in the google play console, under store listing
add some screenshots for "TABLET".
without that, google play will think that your app is not meant for Tablets (which Galaxy Tab 3 is classified under).
The error indicates that there is a requirement listed in the app's manifest for phone networking. You need a phone to use it.
I would like to know, by what criteria google exclude a device, from an app that we have loaded on play store.
For example the last app that I published, is supported from only 2000 devices ca.
Then more than 2000 devices are excluded.
Why?
By what criteria google exclude a device?
What can I do to ensure that my app is available on more devices?
Thank in advance.
Helmut
(Sorry for my english)
Minimum screen size, minimum API level, requiring a touchscreen, a camera, and so on
Google play filters the application based on the features given in the manifest like Screen Size -supports-screen, Device Configuration - uses-configuration, Device Features- uses-feature , Software Library -uses-library, Permissions-uses-permission, SDK levels-uses-sdk
Google Play uses other application characteristics to determine whether to show or hide an application for a particular user on a given device, as described in the table below.
Publishing Status -Only published applications will appear in searches and browsing within Google Play.
Even if an app is unpublished, it can be installed if users can see it in their Downloads area among their purchased, installed, or recently uninstalled apps.If an application has been suspended, users will not be able to reinstall or update it, even if it appears in their Downloads.
Priced Status - Not all users can see paid apps. To show paid apps, a device must have a SIM card and be running Android 1.1 or later,
and it must be in a country (as determined by SIM carrier) in which paid apps are available.
Country Targeting -When you upload your app to Google Play, you can select the countries in which to distribute your app under Pricing and Distribution.
The app will then be available to users in only the countries you select.
CPU Architecture (ABI) -An application that includes native libraries that target a specific CPU architecture (ARM EABI v7 or x86, for example)
are visible only on devices that support that architecture.
Copy-Protected Applications -Google Play no longer supports the Copy Protection feature in the Developer Console and no longer filters apps based on it.
To secure your app, please use Application Licensing instead. See Replacement for Copy Protection for more information.
A question on limiting apps for devices. We've licensed software to device makers and we wanted to allow app developers to publish only on those devices (I'll call these "licensed devices"). Apps won't work on other devices("non-licensed devices").
I've found very helpful posts here about Device Availability & Google Play.
Android: Limit supported devices in Android Market
how to filter android app to be downloaded from google play to specific device? among others
With Device Availability, it looks like app developers have to manually select the universe of non-licensed devices from the dynamic list of supported devices and move these to the exclusion list. Seems like a lot of work for app developers, especially if they'd have to keep updating the exclusion list with each new Android device that's released.
I wanted to see if there's a means of doing the converse - making my app available only to a set of licensed devices. Is there a means of doing this with Google Play?
We've licensed software to device makers and we wanted to allow app developers to publish only on those devices (I'll call these "licensed devices"). Apps won't work on other devices("non-licensed devices").
Developers of such custom firmware extensions should do so as an SDK add-on, thereby requiring developers who use those extensions to have a corresponding <uses-library> element in their manifest. The Play Store should then automatically filter the app so that it only shows up on devices that have that SDK add-on. Motorola, HTC, Samsung, and others have created such SDK add-ons.
I wanted to see if there's a means of doing the converse - making my app available only to a set of licensed devices. Is there a means of doing this with Google Play?
No, sorry.
Tomorrow, if Google adds one more device to the list of supported devices then it will be automatically included to my supported devices list which I dont want to happen.
Then do not distribute the app on the Play Store.
Is there a mechanism to get a notification as soon as Google adds a new device to the list of supported devices in Google play console?
No, sorry.
If not, what is the alternate way of handling it.
Refresh your browser continuously, breathlessly waiting for the next update to the device roster.
I am sure many other android developers would have faced the same issue
Hopefully not. The Play Store is designed for distribution to all Android devices. The per-device exclusion list is designed for short-term compatibility issues, while you work out some bug fixes to overcome the issues.
It seems like Google has just released Google Play Private Channel, which could help you with your "licensed device" issue.
As said recently in this blog post: A new way to distribute your internal Android apps
Not natively. You can check the device type and exit if it doesn't match your whitelist, but that can easily be spoofed on rooted devices. If you have a library you can throw a fatal exception when initializing, etc.