2013-03-11 16 views
16

So che probabilmente si tratta di un longshot, ma esiste un modo per rilevare in modo programmatico se un'app è stata ospitata su Amazon Apps Store vs su Google Play? Vorrei collegare all'app store da cui è stata scaricata l'app, e preferirei non avere due APK diversi con questa differenza se può essere evitato.Rileva se è stata scaricata un'app per Android da Google Play o Amazon vs Other

+0

le app caricate da Amazon ricevono i loro aggiornamenti da lì ...........? –

risposta

23

partire dal proprio di recente, l'Amazon Appstore restituisce i valori sani di mente per PackageManager.getInstallerPackageName()

PackageManager pm = context.getPackageManager(); 
String installerPackageName = pm.getInstallerPackageName(context.getPackageName()); 

if ("com.android.vending".equals(installerPackageName)) { 
    //do google things 
} else if ("com.amazon.venezia".equals(installerPackageName)) { 
    //do amazon things 
} 

Vedi qui: https://forums.developer.amazon.com/forums/thread.jspa?threadID=680

Esempi di tasso questo link app:

Google Play -

mercato: // dettagli id ​​= PACKAGANAME

Amazon

http://www.amazon.com/gp/mas/dl/android?p=PACKAGENAME

o

AMZN: // apps/e roid? p = com.amazon.mp3

+1

Grazie, ci provo! –

+0

Ciao @AlfieHanssen. Devo ancora verificarlo. –

+7

Nota che getInstallerPackageName() potrebbe restituire null se l'app è stata installata utilizzando ADB –

1

Il modo più semplice è utilizzare codici di versione o nomi diversi tra Amazon e Google Play. Quindi è possibile utilizzare PackageManager.getPackageInfo per recuperare tali valori e scegliere il collegamento dell'app store in modo appropriato da lì.

Esempio: suffisso tutti i nomi di versione di Amazon con '.65', ad esempio, 1.0.65. Quindi utilizzare

public boolean isAmazon(Context context) { 
    String versionName = ""; 
    try { 
     versionName = context.getPackageManager().getPackageInfo(
      getPackageName(), 0).versionName; 
    } catch (NameNotFoundException e) { 
     // Can't find itself... 
    } 
    return versionName.endsWith(".65"); 
} 
+0

Grazie. Questo è un modo per farlo, ma sfortunatamente è una modifica in fase di compilazione che non risolve il caso specifico. Potrei anche aggiungere facilmente un tag meta-data al mio manifest, che è probabilmente più pulito a lungo termine, poiché le versioni possono rimanere identiche per entrambi i pacchetti. –

+0

È preferibile utilizzare PackageName anziché VersionName perché è strano aggiungere una lettera a una versione (è più semplice cambiare il nome del bundle). – Idan

+1

Anche Amazon non accetta il nome della versione diverso da x.x.x.x.x dove x è solo numeri interi. Leggilo qui: [Link] (https://developer.amazon.com/public/support/submitting-your-app/tech-docs/submitting-your-app) – ARLabs

Problemi correlati