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

Что такое InstallerPackageName, когда приложение находится в фазе "ожидающей публикации" и используется/проверено рецензентами/тестерами (Google Play Store)?

СИТУАЦИЯ

У меня есть набор функций в моем приложении, который изменяется на основе хранилища, установленного с. Например. Я хочу, чтобы более ограниченный набор рекламных объявлений, отображаемых для семейных аудиторий и детей, имел право на категорию Google Play for Education. В других магазинах я все еще хочу ограничиться, но не хочу быть строгим, поскольку я буду фильтровать рекламу.

Общее замечание в моем конце состоит в том, что, если я выбираю категорию "Google Play для образования", для публикации опубликовано несколько часов, потому что следующее (как указано на консоли разработчика):

Проверка этого окна отправляет это приложение для включения в "педагог" Рекомендуемый "раздел Google Play для образования. Окончательное решение на каких приложениях рекомендуется рекомендовать сторонняя сеть учителей. Если ваше приложение выбрано, мы уведомим вас по электронной почте. Если нет, приложение по-прежнему будет доступно для поиска в Google Play для образования.

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

ПРОБЛЕМА

Чтобы различать хранилище, установленное с помощью, я, очевидно, использую это:

    PackageManager packageManager = context.getPackageManager();
    String installer = packageManager.getInstallerPackageName(packageName);

    if (installer == null) installer = ""; //to avoid NPE

    if (installer.equals("com.android.vending")) {
        //It is installed from Google Play store
        //PROBLEM: THIS DOES NOT SEEM TO BE THE PACKAGE NAME RETURNED
        //WHEN GOOGLE PLAY REVIEWERS/TESTERS ARE USING THE APP
    }
    else ... 
    ....
    ....
    //similarly handling other stores here
    ....
    ....
    ....
    //After that also checking by installed app stores
    ....
    ....

Что происходит: После того, как приложение опубликовано, приложение правильно идентифицирует, что оно загружается из магазина воспроизведения, то есть оно получает com.android.vending как installerPackageName. Но , когда он проверяется или тестируется сетью преподавателей, похоже, что он получает другое значение installerPackageName. Это заставляет приложение думать, что оно было загружено из магазина приложений, отличного от Google Play Store. И из-за этого мое приложение отклонено из категории "Образование". Мне нужно знать это имя пакета установщика, чтобы правильно обрабатывать сценарий.

Как я знаю это: У меня есть выделенный идентификатор рекламного блока, который будет использоваться, когда обнаруженным магазином приложений является Google Play, и все запросы, опубликованные после успешной публикации (т.е. от пользователей обычного магазина воспроизведения), приходят к этот идентификатор рекламного блока Google. Но за короткий промежуток времени после отправки приложения/обновления и до того, как опубликовано приложение и/или обновление., несколько запросов поступают в идентификаторы рекламного блока, отличного от Google, что приводит к отказу приложения от сбоя к руководящим принципам, которые могут иметь право на категорию "Google Play для образования". Поскольку уровень фильтрации объявлений в идентификаторах рекламного блока, отличных от Google, немного меньше. Поэтому преподаватели, оценивающие/тестирующие приложение, видят некоторые объявления, которые, по их мнению, не соответствуют рекомендациям и отклоняют его.

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

Текущее исправление или ограничение:. Я отключил все другие рекламные сети и должен использовать только admob. Настройка фильтров даже на самом строгом уровне в других рекламных сетях, по-видимому, не фильтрует все объявления, которые, по мнению аналитиков Google, не подходят для детей и семейных аудиторий. При использовании только admob процесс является плавным, и я всегда готов.

Что я искал для решения этой проблемы:. Если я узнаю имя installerPackageName, которое возвращается, когда приложение установлено из того места, где когда-либо проверялась сеть учителей, установите приложение, я может обрабатывать этот случай точно так же, как я обрабатываю, когда я получаю com.android.vending, и все будет в порядке. Я не мог найти никакой документации или ссылки для получения этой информации.

Кроме того, если есть другой способ, я могу определить, что приложение находится в стадии pending publication, я заставляю все запросы перейти к идентификатору рекламного блока Google.

ПРЕДПОЛОЖЕНИЕ: Существует отдельное приложение-установщик для рецензентов и тестеров (автоматическое/ручное, что когда-либо может быть в фоновом режиме), чье инсталляторPackageName НЕ com.android.vending. Если есть какой-то парень Google и может подтвердить это (если это разрешено Google), сделайте комментарий.: -)

Другие возможности, с которыми я не хочу идти

Отключите все другие сети вручную, когда приложение находится в фазе pending publication и снова включите их после публикации. Но я не хочу этого делать, потому что это будет похоже на блеф Google, и я не хочу идти этим путем. Я хочу, чтобы моя логика приложений позаботилась об этом, чтобы на рынке было выпущено то же самое, что было рассмотрено.

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

У меня есть кто-нибудь, у кого была эта проблема до того, как ИЛИ знает имя installerPackageName для места загрузки отзыва ИЛИ знает, как определить, находится ли приложение в ожидании публикации состояние в игровом магазине?

Я также могу фильтровать все по именам пакетов, начиная с com.android или com.google, но я хочу сохранить это как последний параметр. Кроме того, хотелось бы знать, если имя installerPackage не установлено вообще в случае этих пользователей. В этом случае мне придется посмотреть на совершенно другую ситуацию, чтобы справиться с ситуацией.

4b9b3361

Ответ 1

Я нахожу одно, что может помочь вам в этом случае. Это аналитика. Просто создайте свое настраиваемое событие, например. INSTALLER_STRING в некоторых аналитических системах и регистрировать это событие, когда это необходимо. Вот пример регистрации событий в ответах Fabric.

  public static final String EVENT_OPEN_TOP_TRENDS = "EVENT_OPEN_TOP_TRENDS";
  public static final String TOP_TRENDS_TYPE = "TOP_TRENDS_TYPE";
  public static final String TYPE_TOP_TRENDS_IMAGES = "TYPE_TOP_TRENDS_IMAGES";

  public static void logEvent(String eventId, String attributeName, String name) {
    Answers.getInstance().logCustom(new CustomEvent(eventId).putCustomAttribute(attributeName, name));
  }

  logEvent(EVENT_OPEN_TOP_TRENDS, TOP_TRENDS_TYPE, TYPE_TOP_TRENDS_IMAGES);

Позже вы узнаете, каковы источники, на которые ваше приложение было установлено на веб-сайте.

Ответ 2

Проверьте, какие результаты вы покажете, используя этот журнал для всех приложений, которые вы используете, для обнаружения имени пакета установщика:

final PackageManager pm = getPackageManager();

        //get a list of installed apps.
        List<ApplicationInfo> packages = pm.getInstalledApplications(PackageManager.GET_META_DATA);

        for (ApplicationInfo packageInfo : packages) {
            String is = pm.getInstallerPackageName(packageInfo.packageName);//getPackageName());
            Log.d(TAG,  (packageInfo.packageName==null?"":packageInfo.packageName)  + " : " + (is==null?"":is));

        }

Вы увидите полный список установленных приложений и источников пакетов или зарегистрируете эти данные по своему желанию. ИЗМЕНИТЬ @Virus, я просто хочу дать вам простую идею. если вы хотите узнать имя установщика пакетов, вы можете просто захватить эти данные при запуске приложения и отправить его на свой собственный сервер, используя простой запрос HTTP GET, чтобы обнаружить имя установщика. Перепубликуйте вас с этим простым храбрым. Я думаю, это одно решение.