12

Recentemente ho scoperto l'applicazione BlackMarket, è una fregatura delle app di Google Play-Store, dove queste persone prendono un'app a pagamento dal Play Store e lasciano i loro utenti scaricalo e usalo gratuitamente.Assicurati che l'applicazione Android sia stata installata da Play-Store

In qualità di sviluppatore che prevede di caricare un buck per la mia app, questo mi infastidisce e vorrei accertarmi che la mia applicazione sia stata installata tramite il Play Store o qualsiasi altro negozio che approvo.

Immagino che l'unico modo per verificare questo tipo di cose sia tramite il monitoraggio della campagna, ma dal momento che Google Analytics v2, il monitoraggio della campagna è fatto con un ricevitore nel Jar.

C'è qualche altro modo per determinare l'origine dell'installazione della mia app? C'è un modo per intercettare i dati di tracciamento della campagna?

Grazie.

+2

Se la sua un'app a pagamento sul Play Store è possibile utilizzare la licenza API di Google http://developer.android.com/google/play/licensing/index.html. Questo controlla che l'app sia stata acquistata tramite l'account Google degli utenti e, in caso contrario, è possibile visualizzare un errore e portarli al Play Store per effettuare l'acquisto. – Boardy

+1

Controlla prima questo: http://developer.samsung.com/forum/thread/ getinstallerpackagename-return-value-in-samsung-phones/77/177735. Quindi 'PackageManager pm = getPackageManager(); String installationSource = pm.getInstallerPackageName (getPackageName()); '- Se installato dal file contrassegnato, installationSource restituirà qualcosa come' com.google.android% 'o' com.android.vending% '- Tuttavia questo cambia e tu devi mantenerlo (supportarlo) in caso di cambiamento - otherwize restituirà null (dal debugger) o qualche altro nome di pacchetto, da qualche altra applicazione (quelle indesiderate :)). – g00dy

+0

@Boardy Questo controllo è per utente o dispositivo di un utente? cosa succede se il dispositivo ha due account su di esso? – TacB0sS

risposta

3

Controllare questo collegamento here. Poi

PackageManager pm = getPackageManager(); 
String installationSource = pm.getInstallerPackageName(getPackageName()); 

Quando installato dal marcato, il installationSource restituirà qualcosa come com.google.android% o com.android.vending%. Comunque questo cambia e devi mantenerlo (supportarlo) in caso di cambiamento - altrimenti restituirà null (dal debugger) o qualche altro nome di pacchetto, da qualche altra applicazione (quelli indesiderati :))

+0

Fatta eccezione per "com.android.vending" che dovrebbe mostrare tutte le nuove installazioni, dal momento che Google-Market è passato a Google Play-Store ... Ho anche scoperto che lo 0,002% delle nuove installazioni proviene da "com.google" .android.feedback 'che mi fa chiedere cosa sia? – TacB0sS

0

Il modo migliore che ho trovato per sapere se un'app proviene dal Play Store è ciò che suggeriva g00dy: utilizzando il nome del pacchetto di installazione.

String packageName = appContext.getPackageName(); 
String installerPackage = appContext.getPackageManager().getInstallerPackageName(packageName); 

se l'applicazione viene scaricata nel Play Store (anche se l'applicazione è acquistato con un PC), installerPackage dovrebbe essere "com.vending.google".

+0

In realtà @ g00dy l'ha suggerito ... – TacB0sS

+0

grazie! Scusami per l'errore. L'ho corretto :) –

+0

@ TacB0sS - grazie per averlo riconosciuto. – g00dy

0

Ho trovato questo http://developer.android.com/google/play/licensing/licensing-reference.html#lvl-summary

public boolean allowAccess() { 
    long ts = System.currentTimeMillis(); 
    if (mLastResponse == LicenseResponse.LICENSED) { 
     // Check if the LICENSED response occurred within the validity timeout. 
     if (ts <= mValidityTimestamp) { 
      // Cached LICENSED response is still valid. 
      return true; 
     } 
    } else if (mLastResponse == LicenseResponse.RETRY && 
       ts < mLastResponseTime + MILLIS_PER_MINUTE) { 
     // Only allow access if we are within the retry period or we haven't used up our 
     // max retries. 
     return (ts <= mRetryUntil || mRetryCount <= mMaxRetries); 
    } 
    return false; 
} 
+0

Non sono proprio sicuro che questo mi dà esattamente quello che voglio, ma una volta avrò la possibilità, farò un tentativo ... Grazie – TacB0sS

Problemi correlati