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

Поддержка ссылок на Amazon и Android Market (Google Play) внутри приложения

Итак, одно из моих приложений было отклонено сегодня в магазине приложений Amazon. Причина в том, что внутри моего приложения я привязался к платной версии приложения на рынке Android. Разочаровывает, но что угодно, я думаю, каждый хочет их вырезать...

Итак, теперь мне осталось изменить приложение, чтобы изменить ссылку на рынок Android на ссылку магазина приложений Amazon. Не очень большое дело, если только я не сделаю этого, я останусь с расхождением, когда хочу загрузить более новую версию на рынок Android. В конце концов, было бы неплохо связать кого-то с магазином приложений Amazon, если они приобретут приложение с рынка Android.

Теперь мы все знаем, что это боль, поддерживающая/управляющая несколькими версиями одного и того же приложения. Следовательно, мой вопрос заключается в том, как я могу ссылаться на оба одновременно? Есть ли способ сказать, откуда было загружено приложение, поэтому я могу кодировать обе ссылки в приложении и, таким образом, автоматически указывать пользователю на тот или иной? Во-вторых, это против Amazon TOS, чтобы дать пользователю выбор (скажем, я выхожу из диалогового окна и спрашиваю пользователя, откуда его загружать)?

Спасибо всем.

Изменить: Прямо из службы обслуживания Amazon "Re: Ссылка на оба рынка" (я хочу, чтобы процесс утверждения был таким же быстрым, как эти ребята):

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

При указании на другие приложения из в вашем приложении, включая до продажи, завершение покупки должно быть Амазонка Appstore.

4b9b3361

Ответ 1

Хорошие новости! Видимо, последняя версия магазина Amazon наконец-то устанавливает PackageManager.getInstallerPackageName() на "com.amazon.venezia", чтобы контрастировать с Google Play "com.android.vending". Это будет самый простой способ определить, загружено ли ваше приложение, установлено ли с Amazon или установлено из Google.

Ответ 2

Вот что вы можете сделать:

  • Завершите подготовку и подписание приложения.
  • Установите его на тестовое устройство
  • Используйте PackageManager.getPackageInfo

Как это сделать:

public static boolean isMarket(Context context){
    boolean isMarketSig = false;
    int currentSig = 1;
    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 магазин приложений подписывает приложение с подписью, специфичной для вашей учетной записи разработчика, так что будет возвращено другое значение, с которым вы фактически подписали его.

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

Ответ 3

Вы можете сделать следующее:

  • Проверьте, не зависит ли устройство от производителя. Например: https://developer.amazon.com/sdk/fire/specifications.html

  • Для написания отзывов и открытия магазина приложений Amazon используйте следующее намерение

    amzn://apps/android?p=package_name
    

    где p=Link на странице сведений о конкретном имени пакета.

Ссылка: ссылка разработчика Amazon.

https://developer.amazon.com/sdk/in-app-purchasing/sample-code/deeplink.html

Ответ 4

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

Лучший способ - проверить, установлен ли рынок Android и действовать соответственно: здесь.

Еще один более сложный способ - запросить имя установщика вашего приложения, используя PackageManager.getInstallerPackageName. Это требует дополнительной работы, поскольку приложение может быть установлено на параллельных рынках, даже если вы находитесь на устройстве Android с установленным рынком Android, а также вы должны проверить, установлен ли он как debug/development (в этом случае имя пакета установщика является нулевым).

Ответ 5

Какой трудный способ сделать это. Если вы просто хотите открыть рыночный URL-адрес, просто проверьте, имеет ли намерение с URL-адресом для рынка Android все действия, которые знают, как с ним справиться. Если нет, откройте приложение app amore amazon с другим намерением.

 /**
     * Returns intent that  opens app in Google Play or Amazon Appstore
     * @param context
     * @param packageName
     * @return null if no market available, otherwise intent
     */
    public static Intent showApp(Activity activity, String packageName)
    {
        Intent i = new Intent(Intent.ACTION_VIEW);
        String url = "market://details?id=" + packageName;
        i.setData(Uri.parse(url));

        if (isIntentAvailable(activity, i))
        {               
            return i;
        }

        i.setData(Uri.parse("http://www.amazon.com/gp/mas/dl/android?p=" + packageName));
        if (isIntentAvailable(activity, i))
        {
            return i;
        }
        return null;

    }

    public static boolean isIntentAvailable(Context context, Intent intent) {
        final PackageManager packageManager = context.getPackageManager();      
        List<ResolveInfo> list =
                packageManager.queryIntentActivities(intent,
                        PackageManager.MATCH_DEFAULT_ONLY);
        return list.size() > 0;
    }

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

Ответ 6

Я также боролся с этим, но решил, что мгновенный успех, который я вижу в своем бесплатном приложении на Amazon, требует времени для создания второго набора .apks, когда я делаю новую сборку. На данный момент я пошел с флагом Amazon boolean и создаю одну общую версию, а затем версию, увеличенную на один для рынка Amazon. Никакие другие рынки не требуют внутреннего связывания, AFAIK.

В конечном итоге я намерен составить код для выбора рынка, чтобы автоматически определить, что делать, но есть много переменных - не только рыночный адрес одного приложения, но и то, как разные рынки распознают название компании для найти все приложения. Некоторые рыночные приложения захватывают основной протокол на рынке Android (например, Appslib и SlideMe, если я правильно помню), но не сохраняйте название компании таким же образом. Затем вам нужно решить, куда переходят ссылки upsell - на тот же рынок или на общий (я только представил мое бесплатное приложение для большинства рынков, которые я использую).

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

Ответ 7

Просто реорганизуйте большую часть вашего проекта в библиотеку проектов, а затем создайте несколько проектов (например, для каждого магазина приложений), которые имеют только уникальные ресурсы значков и строк, их собственный идентификатор пакета, объявленный в манифесте, а затем основное действие который расширяет основное действие, которое вы определили в своей библиотеке.

Таким образом, все уникальные URL-адреса могут быть предоставлены путем переопределения в каждом конкретном действии проекта приложения виртуальных или абстрактных методов, определенных в основной деятельности вашей библиотеки. Код библиотеки, отображающий эти URL-адреса, может получить их через полиморфный вызов для каждого из этих методов.

Таким образом, каждый такой специализированный проект будет очень небольшим, и обслуживание будет главным образом в вашей библиотеке, как описано здесь:

Несколько приложений с общей базой кода