I published my application on the play store and it says not compatible.
I have tried with many devices and it says the same thing for all of them..
here are my permissions.
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="18" />
<uses-feature android:name="android.harware.camera"></uses-feature>
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-permission android:name="android.permission.GET_ACCOUNTS"></uses-permission>
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
<!-- External storage for caching. -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<!-- My Location -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<!-- Maps API needs OpenGL ES 2.0. -->
<uses-feature
android:glEsVersion="0x00020000"
android:required="true"/>
help would be appreciated..
I guess it is the camera permission, you have to set the:
<uses-feature android:name="android.hardware.camera.autofocus" />
into
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false"/>
P.S : Google play doesn't show Your app on device instantly after uploading. it takes some time.
Google Play uses the elements declared in your app manifest to filter your app from devices that do not meet it's hardware and software feature requirements.
By specifying the features that your application requires, you enable Google Play to present your application only to users whose devices meet the application's feature requirements, rather than presenting it to all users.
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. For this reason, it's very important that you declare all of the features (from the list below) that your application uses.
Each time you upload an application to the Google Play Developer Console, Google Play scans the application's manifest file. It looks for elements and evaluates them in combination with other elements, in some cases, such as and elements. After establishing the application's set of required features, it stores that list internally as metadata associated with the application .apk and the application version.
When a user searches or browses for applications using the Google Play application, the service compares the features needed by each application with the features available on the user's device. If all of an application's required features are present on the device, Google Play allows the user to see the application and potentially download it. If any required feature is not supported by the device, Google Play filters the application so that it is not visible to the user and not available for download.
Because the features you declare in elements directly affect how Google Play filters your application, it's important to understand how Google Play evaluates the application's manifest and establishes the set of required features.
Use Feature
You should check if your device is compatible with the permissions requested, there is a method to check on that, as explained here.
!pm.hasSystemFeature(PackageManager.FEATURE_SENSOR_COMPASS)
You also can download an app (not mine) that lists all the permissions your device is capable of, here
Related
I am trying to upload an bundle to play with the following permissions:
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
<uses-permission android:name="android.permission.READ_CALL_LOG" />
<uses-permission android:name="android.permission.WRITE_CALL_LOG" />
<uses-permission android:name="android.permission.READ_PROFILE" />
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
<uses-permission android:name="android.permission.NFC" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
My app's core functionality is to work as a complete dialer like other phone apps like google phone, it shows call history, contacts place calls, etc. I have filled the declaration form and also gave reasons why I need the following permissions but still, my app is getting rejected again and again, also filed an appeal for the same still waiting for a response, please can anyone guide me what I am doing wrong.
below is the message sent by Google:-
Issue: Violation of Permissions policy After reviewing your app, we
found that it doesn’t qualify to use the requested permissions for the
following reason(s): Requested permissions do not match the core
functionality of the app You declared the Default Phone handler (and
any other core functionality usage while the default handler) as the
core functionality of your app. However, after review, we found that
your app does not match the declared use case(s). Learn more about
permitted uses and exceptions. Please either:
• Make changes to your app so that it meets the requirements of the
declared core functionality or,
• Select a use case that matches your app’s functionality
Some of requirements may not be met:
Your app must be able to perform the functionality for which it's a default handler. For example, a default SMS handler should be able to send text messages.
Your app must provide a privacy policy.
Your app must make its core functionality clear in the Play Store description. For example, a default Phone handler should describe its phone-related capabilities in the description.
Your app must declare permissions that are appropriate for its use case. For more details about which permissions you can declare as a given handler, see the guidance on using SMS or call log permission groups in the Play Console Help Center.
Your app must ask to become a default handler before it requests the permissions associated with being that handler. For example, an app must request to become the default SMS handler before it requests the READ_SMS permission.
I recently sumbitted an app for the Play store. The app got rejected and I have no clue as to how to fix it. The error is clear enough, but not the solution.
Issue: Violation of Permissions policy After reviewing your app, we found that it doesn’t qualify to use the requested permissions for the following reason(s):
Based on our review, we found your app’s expressed user experience did not match your declared core functionality {Default Phone handler (and any other core functionality usage while default handler)}. Please remove these permissions from your app.
Default handler capability was listed on your declaration form, but your app does not appear to have default handler capability. Please submit a revised declaration form.
I find the UI of the Google Play Store to be very confusing for me. They aren't answering any emails and I'm at a loss of what to do.
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.READ_PROFILE" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_CALL_LOG" />
<uses-permission android:name="android.permission.WRITE_CALL_LOG" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
If you're using any SMS or CALL_LOG related permission you need to submit a Permissions Declaration Form for your app.
This new policy is designed by Google to ensure that apps asking for these permissions have core functionality related to them and need full and ongoing access to the sensitive data in order to accomplish the app's primary use case.
Android Developers Blog SMS/Call Log Policy Changes
Please refer here to understand the details on policy
you face this error because of some critical permission in manifest file. e.g GET_ACCOUNTS,READ_PROFILE. So for this you have to mention privacy policy page url if you have website or create your own privacy policy using following link:
https://privacypolicygenerator.info/
Just to put it out there. I resolved this by removing the permissions and only rely on PHONE_STATE
for my purposes.
I have an Android app,but when user click "Install" button,the app install directly and it didn't prompt up to ask for permission for user to accept directly.So,I need to request permission during runtime.
But what I need to do,when user click "Install" button,request all the permission needed before the app start downloading from Google Play just like the image below:
So far my manifest is look like this
<uses-feature android:name="android.hardware.camera" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
So what I need to add in order to achieve this?
You are welcome to have your targetSdkVersion below 23, which will force the request for permissions at install time.
Over time, seeing this permission dialog at install time will signal to prospective users that your app is obsolete and not being maintained. An increasing number of those prospective users will elect to not install your app as a result.
Also, bear in mind that users can still remove your requested permissions via the Settings app.
The runtime permissions was introduced since 5.0 Android.
The reason that most of users don't read permissions while installation.
So, all up-to-date API have to use runtime permissions.
Even default apps such as Google maps require runtime permissions.
https://developer.android.com/training/permissions/requesting.html
If you don't want to use runtime permissions you have to use old API version. but you have to check. Your app may crash.
For devices with android < 6.0 permissions are request at installation.
For devices with android > 6.0 permissions are request at runtime.
So if you want your app compatible with devices below and above 6.0, you need to declare permission in your Manifest.xml and request permission at runtime too.
The official guide
I made the location permissions optional by having :
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-feature android:name="android.hardware.location" android:required="false" />
<uses-feature android:name="android.hardware.location.network" android:required="false" />
<uses-feature android:name="android.hardware.location.gps" android:required="false" />
But when I down the app from the Google Play store it still shows Location permission in the dialog:
What am I missing to make the permission optional ?
Thanks!
You are mixing permissions with device features. The device feature tag tells the store which devices can download a certain app because they have the correct hardware. Imagine your app has no sense in a device without GPS, they shouldn't download it. That is the meaning of the optional on device features.
In Android all the permissions you declare in the manifest will be presented in the Play Store. This is because the word Optional has no sense at all for the android permissions, at least until Android M.
When you declare a permission for your app you are just saying that your app can access to a resource. It doesn't matter if you are doing it so or the user will use it, but in the moment you have the permission declared, it will be presented to the user.
In Android M (the next major release) some permissions can be revoked by the user, so the apps have to check if they have enough permissions to execute some actions, but still, they will be shown on this Play store dialog.
I'm trying to decide which ad provider to go with and one of my irritations on the market are apps that require more permissions than needed. Most of the major providers require you to sign up before you get access to their documentation, so thought we could compile the information here.
What permissions are required to show ads in your Android app from each of the major ad vendors:
AdMob
TapJoy
Google Mobile Ads
Burstly
Mobclix
zestadz
InMobi
iVdopia
Feel free to add more. I just got the list from tutsplus.
(To be clear, I'm looking to see which vendors require more permissions than others.)
Actually, I don't think any of them other than Admob just require the INTERNET permission. Here's my experience (I access most of those other ones through MobClix, so don't know if their APIs have specific requirements):
AdMob, MobClix, and MobFox:
android.permission.INTERNET
MobClix:
android.permission.ACCESS_NETWORK_STATE
MobClix and MobFox:
android.permission.READ_PHONE_STATE
MobClix recently removed the permission to view tasks/running apps (SDK version 3.0, which is good (too many permissions and users won't download your app)).
Update: It looks like MobFox removed the need for the WiFi state and Network state permissions in their 3.0 api.
Also note that there are optional permissions, such as location, that might get better ads for you.
Admob requires <uses-permission android:name="android.permission.INTERNET" />
I don't see why any other provider would require more than this.
There are few more permissions as described below different providers may use or not use these
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />