Подтвердить что ты не робот

Как поддерживать ссылки Amazon и Android Market (Google Play) в том же APK

Возможный дубликат:
Поддержка ссылок Amazon и Android на рынке внутри приложения

Мне было интересно, если и как вы могли бы различать установленное приложение Amazon App Store и одно из установленных на рынке.

Например, скажем, у меня есть приложение под названием "Пример приложения", и я хочу разработать для Amazon и Market. В приложении у меня есть ссылки на приложение примера ставок. У меня также есть ссылка для покупки примера App Pro. Это создает проблему, потому что Amazon не выпустит мое приложение, если оно связано с другим магазином приложений.

Это требует от меня сделать 2 файла APK, что является болью. Для экспорта обоих требуется всего около 30 секунд, но это создает дополнительные беспорядок и время тестирования.

Итак, кто-нибудь нашел способ сделать один APK, который можно загрузить в Amazon и Android Market, без каких-либо изменений между ними, чтобы во время выполнения я мог проверить, установлена ​​ли это Amazon или Market, и соответственно изменить ссылки?

4b9b3361

Ответ 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, поэтому я не полностью его протестировал. Я уверен, что это сработает, но не может гарантировать никаких гарантий, поэтому, если вы используете то, что я предложил, и он не работает, пожалуйста, не держите меня в ответе.

Это послужило большой помощью для ответа на вопрос, чтобы я мог проверить, какая подпись использовалась.