Come ripresentare la tua domanda.
Hai un'applicazione mobile installata sul telefono di un client non affidabile.
L'applicazione mobile deve recuperare / inviare dati al tuo servizio web; tuttavia, si desidera limitare l'accesso al proprio servizio Web solo alle applicazioni mobili, non a qualsiasi utente casuale (che potrebbe utilizzare un dispositivo desktop, pubblicarlo sul Web).
La tua soluzione attuale è quella di codificare una chiave segreta all'interno dell'applicazione, che viene passata al servizio web con ogni richiesta: solo le richieste con la chiave segreta corretta vengono elaborate.
La soluzione perfetta è irrealizzabile
In primo luogo, il tuo obiettivo non è fattibile contro attaccanti sofisticati. Saranno in grado di decompilare il codice byte della tua applicazione Android, vedere cosa sta facendo la tua applicazione, e poi fare qualunque cosa l'applicazione non sia in linea.
Tuttavia, potresti essere in grado di utilizzare la licenza per le applicazioni Android per fare principalmente cosa tu vuoi.
Fondamentalmente è possibile generare un ID univoco per la propria applicazione al momento della prima installazione. Quindi la tua domanda invia una query a "Market License Server" di google play che controlla che l'utente abbia acquistato l'applicazione per questo dispositivo e restituisca uno stato di licenza (crittografato con il certificato di google). La tua applicazione restituisce questo stato di licenza firmato al tuo server, che lo verifica e genera una chiave segreta (legata all'ID univoco) per quel dispositivo.
Ora se alcune applicazioni utilizzano il tuo servizio web troppo frequentemente (ad esempio, ritieni che sia offline), puoi vietarne la chiave segreta unica.