2013-03-11 3 views
16

Ich weiß, dass dies wahrscheinlich eine Longshot ist, aber gibt es eine Möglichkeit, programmatisch zu erkennen, ob eine App im Amazon Appstore vs bei Google Play gehostet wurde? Ich würde gerne auf den App-Store verlinken, von dem die App heruntergeladen wurde, und ich würde lieber nicht zwei verschiedene APKs mit nur diesem Unterschied haben, wenn es vermieden werden kann.Erkennen, ob eine Android-App von Google Play vs Amazon gegen andere heruntergeladen wurde

+0

laden Apps, die von Amazon geladen werden, ihre Updates von dort ...........? –

Antwort

23

Ab erst vor kurzem, gibt der Amazon Appstore vernünftige Werte für 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 
} 

Siehe hier: https://forums.developer.amazon.com/forums/thread.jspa?threadID=680

Beispiele für Rate Diese App Links:

Google Play-

Markt: // Details id = PACKAGANAME

Amazon Shop

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

oder

amzn: // apps/und roid? p = com.amazon.mp3

+1

Danke, ich werde es versuchen! –

+0

Hallo @ AlfieHanssen. Ich muss das noch überprüfen. –

+7

Beachten Sie, dass getInstallerPackageName() möglicherweise null zurückgibt, wenn die App mithilfe von ADB installiert wurde –

1

Der einfachste Weg ist die Verwendung verschiedener Versionscodes oder Namen zwischen Amazon und Google Play. Dann können Sie PackageManager.getPackageInfo verwenden, um diese Werte abzurufen und den App-Store-Link entsprechend von dort auszuwählen.

Beispiel: Suffix alle Ihre Amazon-Versionsnamen mit '.65', also 1.0.65. Dann

verwenden
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

Danke. Dies ist eine Möglichkeit, dies zu tun, aber leider ist es eine Kompilierzeit-Änderung, die den speziellen Fall nicht löst. Ich könnte ebenso einfach ein Metadaten-Tag zu meinem Manifest hinzufügen, das auf lange Sicht wahrscheinlich sauberer ist, da Versionen für beide Pakete identisch bleiben können. –

+0

Es ist besser, PackageName anstelle von VersionName zu verwenden, da es seltsam ist, einen Buchstaben zu einer Version hinzuzufügen (einfacher, den Bundle-Namen zu ändern). – Idan

+1

Auch Amazon akzeptiert keinen anderen Versionsnamen als x.x.x.x.x, wobei x nur ganze Zahlen ist. Lies es hier: [Link] (https://developer.amazon.com/public/support/submitting-your-app/tech-docs/submitting-your-app) – ARLabs

Verwandte Themen