Tengo problemas con mis aplicaciones en Google Play. Tengo una aplicación gratuita que utiliza un permiso personalizado. Este permiso permite el acceso a aplicaciones pagas. Estas aplicaciones pagas actúan como "claves" y desbloquean características en la aplicación gratuita. Básicamente, la aplicación gratuita intentará iniciar la intención de una de las aplicaciones pagas. La aplicación de pago hará algunas cosas y volverá diciendo si la aplicación gratuita debe desbloquear funciones o no.Error personalizado de Android según el pedido de instalación de la aplicación
El problema surge en función del orden de instalación de la aplicación. Si la aplicación gratuita se instala primero y luego la paga, la aplicación gratuita no puede iniciar el intento. Devuelve la denegación de permiso. Si la aplicación paga se instala primero y luego la aplicación gratuita, la aplicación gratuita puede iniciar el intento sin problemas. Reiniciar el dispositivo y/o forzar la detención de las aplicaciones no resuelve el problema. Estoy adjuntando el código relavent. Algo me dice que estoy haciendo algo incorrectamente.
App libre Manifiesto (código correspondiente): Código
... <uses-permission android:name="com.company.license.PERMISSION" /> ...
aplicación gratuita para comprobar intención (código correspondiente):
Intent KeyApp = new Intent("com.company.license.action.AUTH_1"); KeyApp.putExtra("com.company.license.challenge", 1); //If free app is installed first, an exception is thrown for not having the proper permission. If paid app is installed first, no exception is thrown try { startActivityForResult(KeyApp, COMMING_FROM_KEYAPP); } catch (Exception e) { cancelStartUp(); }
la aplicación de pago Manifiesto (código correspondiente):
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.company.installer.1" ... <permission android:name="com.company.license.PERMISSION" android:icon="@drawable/icon" android:label="@string/app_name" android:protectionLevel="normal" > </permission> <application android:icon="@drawable/icon" android:label="@string/app_name" android:theme="@android:style/Theme.NoDisplay" > <activity android:name="com.company.license.auth" android:configChanges="keyboardHidden|orientation" android:exported="true" android:permission="com.company.license.PERMISSION" android:theme="@style/Theme.Transparent" > <intent-filter> <action android:name="com.company.license.action.AUTH_1" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> <activity android:name="com.company.installer.redirect" android:configChanges="keyboardHidden|orientation" android:exported="true" android:theme="@style/Theme.Transparent" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
Eso lo hizo el truco. ¡Gracias! –
Problema: si la primera aplicación instalada especifica y con el mismo permiso, no se informa al usuario de la solicitud de permiso en el momento de la instalación. Después de que se instala la segunda aplicación, la primera puede acceder a los componentes de la segunda aplicación que requieren ese permiso. ¿Problema de seguridad mayor? –
@MarkCarter: Definitivamente, no se le solicitarán permisos de "firma" al usuario. Sin embargo, eso realmente no depende del orden de instalación; 'signature'-level permisos nunca aparecen. Como los permisos de nivel de "firma" son para código escrito por un desarrollador (o equipo), se supone que estos permisos controlan lo que equivale a agregar comunicaciones internas, y no es necesario que el usuario se moleste. Sin embargo, si está viendo su comportamiento descrito con permisos 'normales' o 'peligrosos', eso me sorprendería, y tendría que investigar más. – CommonsWare