Problemi con le mie app su Google Play. Ho un'applicazione gratuita che utilizza un'autorizzazione personalizzata. Questa autorizzazione consente l'accesso alle app a pagamento. Queste app a pagamento fungono da "chiavi" e sbloccano le funzionalità nell'app gratuita. Fondamentalmente l'app gratuita tenterà di avviare l'intento di una delle app a pagamento. L'app a pagamento farà alcune cose e tornerà a dire se l'app gratuita dovrebbe sbloccare funzionalità o meno.L'autorizzazione personalizzata Android non riesce in base all'ordine di installazione dell'app
I problemi si verificano in base all'ordine di installazione dell'app. Se l'app gratuita viene installata prima di un'app a pagamento, l'app gratuita non può avviare l'intento. Restituisce il permesso di negazione. Se l'app a pagamento viene installata per prima l'app gratuita, l'app gratuita può avviare l'intento senza problemi. Riavviare il dispositivo e/o forzare l'arresto delle app non risolve il problema. Allego il codice relavent. Qualcosa mi dice che sto facendo qualcosa di sbagliato.
App gratuita manifesto (codice rilevante): Codice
... <uses-permission android:name="com.company.license.PERMISSION" /> ...
App gratuita per verificare l'intenzione (codice rilevante):
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(); }
Paid App manifesto (relativo codice):
<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>
Questo ha fatto il trucco. Grazie! –
Problema: se la prima applicazione installata specifica e per la stessa autorizzazione, l'utente non viene informato della richiesta di autorizzazione al momento dell'installazione. Dopo aver installato la seconda app, la prima app può accedere ai componenti della seconda app che richiedono tale autorizzazione. Grande problema di sicurezza? –
@MarkCarter: l'utente sicuramente non verrà richiesto per le autorizzazioni a livello di 'firma'. Tuttavia, ciò non dipende in realtà dall'ordine di installazione; Le autorizzazioni a livello di firma non vengono mai visualizzate. Poiché le autorizzazioni a livello di firma sono per codice scritto da uno sviluppatore (o un team), l'assunto è che queste autorizzazioni controllino le quantità di aggregazione delle comunicazioni interne e l'utente non deve essere disturbato. Se, tuttavia, stai vedendo il tuo comportamento descritto con le autorizzazioni personalizzate 'normal' o' dangerous', questo mi sorprenderebbe e avrei bisogno di fare ulteriori ricerche. – CommonsWare