ulizama
ulizama

Reputation: 13

Titanium App low number of supported devices on Play Store

I have an app published in the Play Store build with Titanium, but is showing a really low number of compatible devices and I can't figure out the reason.

The app is built for a min version of SDK 14 and I don't have any strange requirements on permissions. Here is the AndroidManifest.xml generated by Titanium:

    <?xml version="1.0" encoding="UTF-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.proximityaware.montrose" android:versionCode="23" android:versionName="2.0.30">
    <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="23"/>
    <application android:icon="@drawable/appicon" android:label="GoMontrose" android:name="GomontroseApplication" android:debuggable="false" android:theme="@style/Theme.AppBlue">
        <activity android:name=".GomontroseActivity" android:label="@string/app_name" android:theme="@style/Theme.Titanium" android:configChanges="keyboardHidden|orientation|screenSize">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
        <activity android:configChanges="keyboardHidden|orientation|screenSize" android:name="org.appcelerator.titanium.TiActivity" android:screenOrientation="portrait"/>
        <activity android:name="org.appcelerator.titanium.TiTranslucentActivity" android:configChanges="keyboardHidden|orientation|screenSize" android:theme="@style/Theme.AppCompat.Translucent"/>
        <activity android:name="ti.modules.titanium.ui.android.TiPreferencesActivity" android:configChanges="screenSize"/>
        <activity android:name="ti.modules.titanium.media.TiCameraActivity" android:configChanges="keyboardHidden|orientation|screenSize" android:theme="@style/Theme.AppCompat.Translucent.NoTitleBar.Fullscreen"/>
        <service android:enabled="true" android:exported="true" android:isolatedProcess="false" android:label="iBeacon" android:name="com.radiusnetworks.ibeacon.service.IBeaconService"/>
        <service android:enabled="true" android:name="com.radiusnetworks.ibeacon.IBeaconIntentProcessor">
            <meta-data android:name="background" android:value="true"/>
            <intent-filter android:priority="1">
                <action android:name="com.proximityaware.montrose.DID_RANGING"/>
                <action android:name="com.proximityaware.montrose.DID_MONITORING"/>
            </intent-filter>
        </service>
        <service android:name="nl.vanvianen.android.gcm.GCMIntentService"/>
        <meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="HIDDEN"/>
        <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version"/>
        <receiver android:name="nl.vanvianen.android.gcm.GCMBroadcastReceiver" android:permission="com.google.android.c2dm.permission.SEND">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED"/>
                <category android:name="android.intent.category.HOME"/>
            </intent-filter>
            <intent-filter>
                <action android:name="com.google.android.c2dm.intent.RECEIVE"/>
                <category android:name="com.proximityaware.montrose"/>
            </intent-filter>
            <intent-filter>
                <action android:name="com.google.android.c2dm.intent.REGISTRATION"/>
                <category android:name="com.proximityaware.montrose"/>
            </intent-filter>
        </receiver>
    </application>
    <uses-permission android:name="android.permission.BLUETOOTH"/>
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="android.permission.VIBRATE"/>
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
    <uses-permission android:name="android.permission.READ_CALENDAR"/>
    <uses-permission android:name="android.permission.WRITE_CALENDAR"/>
    <uses-permission android:name="com.proximityaware.montrose.permission.MAPS_RECEIVE"/>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    <uses-permission android:name="android.permission.CAMERA"/>
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE"/>
    <uses-permission android:name="com.proximityaware.montrose.permission.C2D_MESSAGE"/>
    <uses-permission android:name="android.permission.WAKE_LOCK"/>
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
    <uses-permission android:name="android.permission.GET_ACCOUNTS"/>
    <uses-permission android:name="android.permission.USE_CREDENTIALS"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION"/>
    <uses-permission android:name="android.permission.READ_CONTACTS"/>
    <uses-permission android:name="android.permission.WRITE_CONTACTS"/>
    <uses-feature android:name="android.hardware.camera"/>
    <uses-feature android:name="android.hardware.camera.autofocus"/>
    <uses-feature android:name="android.hardware.camera.flash"/>
    <permission android:name="com.proximityaware.montrose.permission.MAPS_RECEIVE" android:protectionLevel="signature"/>
    <permission android:name="com.proximityaware.montrose.permission.C2D_MESSAGE" android:protectionLevel="signature"/>
</manifest>

I have tested the app in multiple devices in which Play Store says is incompatible, but if you download the app, it works with all the features.

Upvotes: 0

Views: 98

Answers (2)

ulizama
ulizama

Reputation: 13

In answer to my own question. Per Android's documentation on how it filters permissions: http://developer.android.com/google/play/filters.html

When you use a <uses-permission> it automatically sets the correct <uses-feature>. So you need to make the correct <uses-feature> NOT required. This solved my issue.

Upvotes: 1

Fokke Zandbergen
Fokke Zandbergen

Reputation: 3866

The default for <uses-permission> is to be required. So see if you can override some with required="false" that you don't absolutely need. Then in your code make sure you test for the feature using methodes like hasCompas.

Upvotes: 1

Related Questions