Ответ 1
Изменить: Во время этого сообщения я не знал об этом, но существует getInstallerPackageName(), но я не уверен, насколько это надежно. Я также не уверен, что он возвращает для Amazon/Market и т.д. Возможно, стоит посмотреть, но если это не сработает, то метод ниже работает для Google против Amazon.
Вам нужно будет подписать приложение как обычно, запустить на вашем тестовом устройстве, получить значение sig.hashCode() из ваших журналов, а затем заменить -1545485543 на любое значение, которое вы получили для sig.hashCode(), затем экспортировать и (С ТОЧНЫМ КЛЮЧОМ КАК ПЕРЕД), а затем загрузите на Amazon и Market оба - из того же APK.
Сделайте это:
public static boolean isMarket(Context context){
boolean isMarketSig = false;
int currentSig = 1; // I just set this to 1 to avoid any exceptions later on.
try {
Signature[] sigs = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES).signatures;
for (Signature sig : sigs)
{
currentSig = sig.hashCode();
Log.i("MyApp", "Signature hashcode : " + sig.hashCode());
// This Log is for first time testing so you can find out what the int value of your signature is.
}
} catch (Exception e){
e.printStackTrace();
}
//-1545485543 was the int I got from the log line above, so I compare the current signature hashCode value with that value to determine if it market or not.
if (currentSig==-1545485543){
isMarketSig = true;
} else {
isMarketSig = false;
}
return isMarketSig;
}
public static void openStore(Context context){
if (isMarket(context)){
Intent goToMarket = new Intent(Intent.ACTION_VIEW,Uri.parse("market://d" +
"etails?id=com.jakar.myapp"));
goToMarket.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(goToMarket);
} else {
Intent goToAppstore = new Intent(Intent.ACTION_VIEW,Uri.parse("http://www.amazon.com/gp/mas/dl/andro" +
"id?p=com.jakar.myapp"));
goToAppstore.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(goToAppstore);
}
}
В принципе, hashCode(), который вы получаете из приложения, установленного на вашем тестовом устройстве, будет таким же, как на рынке. Хэш-код из магазина приложений будет отличаться, поскольку в соответствии с https://developer.amazon.com/help/faq.html магазин приложений подписывает приложение с подписью, специфичной для вашего разработчика учетной записи, так что будет возвращено другое значение, с которым вы фактически подписали его.
И я поместил методы isMarket и openStore в другой класс под названием OtherClass, так что мне нужно только один раз его закодировать. Затем из любой активности, где мне нужно открыть соответствующую ссылку, я просто вызываю OtherClass.openStore(контекст);
Примечание. Он работает, чтобы успешно открыть рынок, но я еще не развернул этот метод в App Store, поэтому я не полностью его протестировал. Я уверен, что это сработает, но не может гарантировать никаких гарантий, поэтому, если вы используете то, что я предложил, и он не работает, пожалуйста, не держите меня в ответе.
Это послужило большой помощью для ответа на вопрос, чтобы я мог проверить, какая подпись использовалась.