Редактировать: На момент публикации я не знал об этом, но существует 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's 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);
}
}
В принципе, хэш-код(), что вы получите из приложения, установленного на устройстве тестирования будет таким же, один из рынка. Хэш-код из магазина приложений будет отличаться, поскольку в соответствии с https://developer.amazon.com/help/faq.html магазин приложений подписывает приложение с подписью, специфичной для вашей учетной записи разработчика, так что будет возвращено другое значение, с которым вы фактически подписали его.
И я поместил методы isMarket и openStore в другой класс под названием OtherClass, так что мне нужно только его закодировать. Затем из любой активности, где мне нужно открыть правильную ссылку, я просто вызываю OtherClass.openStore (контекст);
Примечание: Он работает, чтобы успешно открыть рынок, но я еще не развернул этот метод в App Store, поэтому я не полностью его протестировал. Я уверен, что это сработает, но не может гарантировать никаких гарантий, поэтому, если вы используете то, что я предложил, и это не удается, пожалуйста, не держите меня подотчетным.
This был большой помощью при подготовке ответа, чтобы я мог проверить, какая подпись использовалась.
Это действительно интересно и полезно. Тем не менее, я думаю, вам нужно разделить его на ответ и вопрос (ответьте на свой вопрос), чтобы встретить FAQ по переполнению стека. Во-первых, четко сформулируйте вопрос, затем ответьте сами. – haimg
@haimg Обновлено. :) – Jakar
Выглядит хорошо! (+1) – haimg