2013-03-11 10 views
16

Wiem, że to prawdopodobnie długi czas, ale czy istnieje sposób, aby wykryć programowo, czy aplikacja była hostowana w sklepie z aplikacjami Amazon kontra w Google Play? Chciałbym połączyć się ze sklepem z aplikacjami, z którego pobrano aplikację, i wolałbym nie mieć dwóch różnych plików APK z tą różnicą, jeśli można tego uniknąć.Wykryj, czy aplikacja na Androida została pobrana z Google Play kontra Amazon kontra Inna

+0

czy aplikacje załadowane z Amazon pobierają tam swoje aktualizacje ...........? –

Odpowiedz

23

As od niedawna, Amazon Appstore zwraca wartości rozsądnych dla 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 
} 

Zobacz tutaj: https://forums.developer.amazon.com/forums/thread.jspa?threadID=680

Przykłady Oceń ten app linki:

Google Play -

rynkowa: // szczegóły id = PACKAGANAME

Amazon Store

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

lub

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

+1

Dzięki, dam tego spróbować! –

+0

Witam @AlfieHanssen. Nadal muszę to zweryfikować. –

+7

Należy zauważyć, że funkcja getInstallerPackageName() może zwrócić wartość null, jeśli aplikacja została zainstalowana przy użyciu ADB –

1

Najprostszym sposobem jest użycie różnych kodów wersji lub nazw między Amazon i Google Play. Następnie możesz użyć PackageManager.getPackageInfo, aby pobrać te wartości i wybrać odpowiedni link do sklepu z aplikacjami.

Przykład: sufiks wszystkich nazw wersji Amazon z ".65", czyli 1.0.65. Następnie użyj

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

Dzięki. Jest to jeden sposób, aby to zrobić, ale niestety jest to zmiana w czasie kompilacji, która nie rozwiązuje konkretnego przypadku. Równie łatwo mógłbym dodać znacznik meta-danych do mojego manifestu, który na dłuższą metę jest prawdopodobnie czystszy, ponieważ wersje mogą pozostać identyczne dla obu pakietów. –

+0

Lepiej używać nazwy PackageName zamiast VersionName, ponieważ dodanie litery do wersji jest dziwne (łatwiej zmienić nazwę pakietu). – Idan

+1

Również Amazon nie akceptuje nazwy wersji innej niż x.x.x.x.x gdzie x to tylko liczby całkowite. Przeczytaj go tutaj: [LINK] (https://developer.amazon.com/public/support/submitting-your-app/tech-docs/submitting-your-app) – ARLabs

Powiązane problemy