Device Availability, filtering and Google Play - android

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.

Related

How can I test the 'uses:feature= telephony' requirement on an AVD?

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.

Is the Google Play Developer Console the only way to see a list of compatible devices for my Android app?

After reading through the Android developer documentation, I see that it is possible to see a comprehensive list of supported devices for a given .apk file via the Google Play Develop Console.
Is there an alternative way of doing this, which does not require uploading an .apk to the Developer Console?
No. Without uploading apk, how will you trace which device are supported? Nothing better than native Google developer console which traces list of all supported devices, countries, device name, version etc.,
There are several parameter that are considered before generating the list of supported devices, few of those parameters are:
1. Minimum SDK version
2. Target SDK version
3. Support for camera hardware (if your application uses camera)
4. Support for front camera (if your application uses front cam)
5. Support for sensors that your app uses.
6. Support for opengl libraries (if your app uses it)
7. Support for supported screen sizes.
8. Support for calling or sms, if your app needs to make a call or send sms, etc
Basically you declare these addional requirements in your app manifest or you generate different layout files for tablets and other unusual devices.
There are many more parameters to consider to generate the list of supported, since all the devices are registered with Google, Google play store is the best and most reliable source to get the list.
And the most important thing, List of supported devices is greatly
affected by the settings that you have on playstore like ratings,
country, category, etc. So to get the exact list, your apk should be
on PlayStore, at least as a draft.

Getting a List of Supported Devices for Your App

It would seem that Google has provided for us to post our application online and they provide for a nice overall list of supported devices. This is just a list of all devices supported on the market however.
Within the Google Play Store, we as developers can choose to select filters on specific devices that we would like to support and can exclude devices as desired. However, support is questioning how we can let customers know which devices are on that support list.
The only way that I can currently see how to check if a device is on the supported list (before someone actually purchases a device and physically checks), would be for us to internally open up the developer console and check for them. This isn't really a manageable solution. I have to assume that there is somewhere that we as the developer can export the list of supported devices so that we can host it on a website somewhere and refer to it with a link from our website, or something similar. And yet I can find nothing. Has anyone had success in getting information from the Google Play Store for users?
Updates:
Simplistic means to try and retrieve this information have not proved fruitful. A select-all over the list of devices on the web window covering the supported devices does not show which devices have been excluded. It only shows devices that are supported by the restrictions from the manifest file. And of course there will be new devices added to the list of devices each day, and they don't seem to have much of an order to them when they are added in to the list of supported devices for the application. There doesn't seem to be much organization here.
Currently, we interact with specific external hardware for our application and we want to be sure that it works on families of devices before we support them, which is why it gets difficult to provide this list to customers. There doesn't seem to be any export functionality or physical way to share the supported list of devices with the customers.
For instance, if we support the Samsung Galaxy families that we have done extensive tests upon, but some of those devices are not USB OTG compatible, then we would want to show exactly which Samsung Galaxy ones in a list are available to them (but it doesn't stop with Samsung only of course).
This is what you need:
List of supported devices
Note :
It was updated on 2/18/2014 .
EDIT :
What would be needed is the list of devices that my application supports which is what gets filtered from the manifest file, as well as from exclusions that I have made within the store filters
AFAIK, there is no API provided by play store to get that list of devices because play-store applies filter on run time.
Reference:
Google Play uses the filter restrictions described below to determine whether to show your application to a user who is browsing or searching for applications from the Google Play app.
When determining whether to display your app, Google Play checks the device's hardware and software requirement, as well as it's carrier, location, and other characteristics. It then compares those against the restrictions and dependencies expressed by the application's manifest file and publishing details.
If the application is compatible with the device according to the filter rules, Google Play displays the application to the user. Otherwise, Google Play hides your application from search results and category browsing, even if a user specifically requests the app by clicking a deep link that points directly to the app's ID within Google Play.
checkout: How Filters Work on Google Play

Some devices that doesn't support app in play store

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.

Are there any Android devices in the US market or elsewhere that do NOT ship with the Google Maps Add-On library?

I have heard that the ARCHOS 5 Internet Tablet doesn't have the Google APIs SDK, but rather the plain vanilla Android 1.6 OS build. Is this true? And does anyone know of any other devices like this currently on the market or in the works?
I'm particularly interested in phones, but would like to know about any such devices. My company adds maps to our apps but they are often optional, so I'd like to know if I need to be worried that these apps won't be available to non-maps devices.
There are a bunch of Android-based tablets out there (see here: http://en.wikipedia.org/wiki/List_of_Android_devices). The link doesn't have information as to whether or not they have Google apps installed, but if you do some research, you can find more info. The 1&1 Smartpad for example doesn't seem to have proprietary Google apps (I don't see any on the screenshots: http://www.slashgear.com/11-smartpad-android-tablet-drops-in-germany-3092321/).
Now the thing to keep in mind is that if a device doesn't have Google Maps, it probably doesn't have Market either. (To go back to the 1&1 example, I see a "1&1 Market" app on the screenshots).
Your best bet may be to provide your app on all known major app sites (http://www.andappstore.com, etc) and even your company's website in addition to the Google Market to maximize exposure. Al Sutton's andappstore in particular is a popular site for people with Android-based devices that don't have the market.

Categories

Resources