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

Как заблокировать блокировку рекламы в приложении

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

Можно ли что-то сделать? Есть ли способ обнаружить, что реклама заблокирована?

4b9b3361

Ответ 1

Мне известно о том, как работает блокировка рекламы (на любом компьютере), они редактируют файл hosts, чтобы указать на localhost для всех известных серверов объявлений. Для android это находится в файле "etc/hosts".

Например, я использую рекламные объявления admob и файл хоста, который я взял из пользовательских списков rom, следующих абзацев admob:

127.0.0.1 analytics.admob.com
127.0.0.1 mmv.admob.com
127.0.0.1 mm.admob.com
127.0.0.1 admob.com
127.0.0.1 a.admob.com
127.0.0.1 jp.admob.com
127.0.0.1 c.admob.com
127.0.0.1 p.admob.com
127.0.0.1 mm1.vip.sc1.admob.com
127.0.0.1 media.admob.com
127.0.0.1 e.admob.com

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

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

В конце концов, что хорошего это делает, если они не видят рекламы? Нет смысла позволять им использовать приложение бесплатно.

Вот фрагмент кода, как я это достигаю:

        BufferedReader in = null;

    try 
    {
        in = new BufferedReader(new InputStreamReader(
                new FileInputStream("/etc/hosts")));
        String line;

        while ((line = in.readLine()) != null)
        {
            if (line.contains("admob"))
            {
                result = false;
                break;
            }
        }
    } 

Я обещаю, что все приложения, поддерживающие объявления, должны проверить этот файл. Вам не нужно быть root, чтобы получить доступ к нему, но писать на него может быть другой историей.

Кроме того, не уверен, есть ли какие-либо другие файлы, которые действуют одинаково на ОС на основе Linux, но, во всяком случае, мы всегда можем проверить все эти файлы.

Любые предложения по улучшению этого приветствуются.

Кроме того, приложение под названием "Ad Free android" нуждается в корневом доступе, что означает, что он, скорее всего, изменяет файл hosts для достижения своей цели.

Ответ 2

Мой код для этой проблемы:

try {
    if (InetAddress.getByName("a.admob.com").getHostAddress().equals("127.0.0.1") ||
        InetAddress.getByName("mm.admob.com").getHostAddress().equals("127.0.0.1") ||
        InetAddress.getByName("p.admob.com").getHostAddress().equals("127.0.0.1") ||
        InetAddress.getByName("r.admob.com").getHostAddress().equals("127.0.0.1")) {
        //Naughty Boy - Punishing code goes here.
        // In my case its a dialog which goes to the pay-for version 
        // of my application in the market once the dialog is closed.
    }
} catch (UnknownHostException e) { } //no internet

Надеюсь, что это поможет.

Ответ 3

Как разработчики, нам нужно сделать сложную работу, чтобы сопереживать с пользователями и найти промежуточную точку между наказанием тех, кто пытается воспользоваться, и тех, кто играет по правилам. Мобильная реклама - это разумный способ разрешить кому-либо использовать функциональную часть программного обеспечения бесплатно. Пользователи, использующие методы блокировки рекламы, могут считаться потерянными доходами, но если вы посмотрите на общую картину, также могут быть те, кто распространяет слово о вашем приложении, если им это нравится. Более нежный подход к запуску на заблокированных рекламных блоках - это отображение собственного объявления "дома". Создайте одно или несколько изображений баннеров и покажите их в том же месте, что и ваше обычное объявление, с ImageView той же высоты (например, 50dp). Если вы успешно получили объявление, затем установите видимость ImageView в View.GONE. Вы даже можете создать таймер для просмотра нескольких домашних объявлений, чтобы привлечь внимание пользователя. Нажав на ваше объявление, вы можете перейти на рыночную страницу, чтобы купить полную версию.

Ответ 4

Вы можете проверить, загружено ли объявление в ваше приложение?

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

Если нет данных, вы можете отправить сообщение и выйти или предупредить вас по электронной почте.

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

Ответ 5

В двух первых ответах вам поможет только конкретный (если возможно, самый популярный) метод блокировки рекламы. Корневые пользователи также могут блокировать объявления с помощью брандмауэра на устройстве. Пользователи Wi-Fi могут блокировать рекламу с помощью брандмауэра.

Я предлагаю:

  • Не вознаграждайте пользователей, блокирующих рекламу. Убедитесь, что ваш макет резервирует часть дисплея для объявления, даже если его нельзя загрузить. Или, если у вас полноэкранное объявление, которое играет немного, убедитесь, что ваше приложение ждет немного, даже если объявление не может быть воспроизведено. Если вы используете уведомления в качестве рекламы (вы набрасываетесь), сообщите об этом пользователю, когда вы не получите такое объявление. Это может быть прочитано как "раздражает всех ваших пользователей", но ваши обычные пользователи знают, что они получают, и ваши пользователи, блокирующие рекламу, не нужны.

  • Попросите блокировщиков объявлений остановиться. Менее прочная отрасль, которая поставляет то, что хочет пользователь, тем меньше эта отрасль будет поставлять то, что хотел пользователь. Отдельный разработчик найдет, что он зарабатывает больше денег, обслуживая других пользователей. Вы знаете это, и ваши пользователи будут считать это очевидным после того, как вы им скажете, но это все еще экономический аргумент - он не интуитивно понятен. У вас есть резервное объявление, в котором говорится что-то вроде: "Это моя работа. Если вы не платите мне, я получу еще одну, и у вас не будет больше таких приложений от меня".

Ответ 6

Вместо того, чтобы проверять отдельный файл установленного или измененного хоста, мой подход использует AdListener бум идет в приложение.

Чтобы добавить код, класс слушателя будет выглядеть следующим образом:

public abstract class AdBlockerListener implements AdListener {

    @Override
    public void onFailedToReceiveAd(Ad arg0, ErrorCode arg1) {
        if (arg1.equals(ErrorCode.NETWORK_ERROR)) {
            try {
                URL url = new URL("http://www.apple.com/");
                URLConnection conn = url.openConnection();
                BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
                reader.readLine();
                onAdBlocked();
            } catch (IOException e) {}
        }
    }

    public abstract void onAdBlocked();
}

И тогда каждое действие с adView будет делать что-то вроде:

AdView adView = (AdView) findViewById(R.id.adView);
        adView.setAdListener(new AdBlockerListener() {
            @Override
            public void onAdBlocked() {
                AlertDialog ad = new AlertDialog.Builder(CalendarView.this)
                                    .setMessage("nono")
                                    .setCancelable(false)
                                    .setNegativeButton("OK", new OnClickListener() {
                                        public void onClick(DialogInterface dialog, int which) {
                                            System.exit(1);
                                        }
                                    })
                                    .show();
            }
        });

Ответ 7

Вы ничего не можете сделать, чтобы ваши пользователи не могли сделать лучше.

Единственное, что приходит на ум как отдаленно эффективное, - сделать рекламу неотъемлемой частью программы, чтобы, если они заблокированы, пользователь не может понять/взаимодействовать с приложением.

Ответ 8

Я думаю, что это зависит от поставщика контента для рекламы. Я знаю, что SDK AdMob обеспечивает обратный вызов, когда запрос объявления выходит из строя. Я подозреваю, что вы могли бы зарегистрироваться для этого, а затем проверить соединение в обратном вызове - если есть соединение, и вы не получили объявление - обратите внимание, если это происходит более одного или двух раз, скорее всего, ваши объявления блокируются. Я не работал с набором инструментов AdSense для мобильных устройств от Google, но меня не удивило бы, если бы был аналогичный механизм обратного вызова.

Ответ 9

Во-первых, позвольте мне сказать, что я считаю, что блокирование рекламы, когда дело касается приложений, на самом деле является формой пиратства. Эти приложения поддерживаются объявлениями, а иногда и "платной лицензией" для отключения рекламы и/или добавления функций. Блокируя рекламу, пользователи крадут потенциальный доход от разработчика, у которого было время для создания приложения, которое вы используете.

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

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

PackageManager pm = activity.getPackageManager ();
Intent intent = pm.getLaunchIntentForPackage ( "de.ub0r.android.adBlock" );
if ( Reflection.isPackageInstalled ( activity, intent ) ) {
  // they have adblock installed
}

Ответ 10

Для пользователя есть два способа передать рекламу:

1) Используйте приложение без Интернета.

2) С корневым телефоном и измененным файлом хоста.

Я сделал два инструмента, которые вы можете реализовать, см. ниже код.

checkifonline(); для задачи 1:

public void checkifonline() {
    boolean haveConnectedWifi = false;
    boolean haveConnectedMobile = false;

    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo[] netInfo = cm.getAllNetworkInfo();
    for (NetworkInfo ni : netInfo) {
        if (ni.getTypeName().equalsIgnoreCase("WIFI"))
            if (ni.isConnected())
                haveConnectedWifi = true;
        if (ni.getTypeName().equalsIgnoreCase("MOBILE"))
            if (ni.isConnected())
                haveConnectedMobile = true;
    }

    if(haveConnectedWifi==false && haveConnectedMobile==false){

        // TODO (could make massage and than finish();
    }
}

adblockcheck(); для задачи 2

private void adblockcheck() {
    BufferedReader in = null;
    boolean result = true;

    try 
    {
        in = new BufferedReader(new InputStreamReader(
                new FileInputStream("/etc/hosts")));
        String line;

        while ((line = in.readLine()) != null)
        {
            if (line.contains("admob"))
            {
                result = false;
                break;
            }
        }
    } catch (UnknownHostException e) { }
      catch (IOException e) {e.printStackTrace();}  

    if(result==false){

        // TODO (could make massage and than finish();

    }
}

Ответ 11

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

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

http://books.google.com/books/about/The_User_is_Always_Right.html?id=gLjPMUjVvs0C

  • Сделайте рекламу менее раздражающей и в вашем лице. Пользователи реагируют на плохую/раздражающую рекламу, а семерка вашего приложения выглядит и становится, тем более вероятно, что они все равно откажутся. Я не против приложений с объявлениями в них, пока они не сильно затрудняют функциональность, и даже лучше я люблю рекламу, которая имеет отношение ко мне. (http://www.nngroup.com/articles/most-hated-advertising-techniques/)
  • Чтобы обнаружить, что объявления не загружаются, не требуется внедрение программ-шпионов, таких как действия, упомянутые предыдущими плакатами. Загрузите объявление с кодом подтверждения, и каждый раз через некоторое время вставьте приглашение с запросом кода подтверждения. Код не должен быть длинным или раздражающим, на самом деле этого было бы достаточно, чтобы реализовать услугу captcha с 3 или 4 буквами/цифрами. (http://textcaptcha.com/api)
  • В дополнение к обнаружению отказа загрузки объявлений, сделайте лучшую рекламу. Вместо того, чтобы использовать API как мобады (вы даже понимаете, насколько это звучит? Мобы? Действительно? Мы разработчики, русская мафия?), Вступайте в партнерство с рекламной компанией, которая позволяет вставлять рекламу прямо из вашего приложения. Это сделает ваше приложение более крупным для установки, и нет, вы не можете защитить от ручной модификации, но изменения, предложенные выше, также не защищают их. И это будет лучше поддерживать любые платные версии вашего приложения, которые будут намного более легкими (и быстрее).
  • Тщательно проверять объявления, которые вы показываете пользователю, быть открытыми и прозрачными в отношении ваших рекламных политик и даже разрешать пользователям просматривать ваши объявления и источники рекламы. Основная причина, по которой я когда-либо беспокоился о рекламе, заключается не в том, что я ненавижу рекламу, а потому, что беспокоюсь, что разработчик низкого качества, ответственный за это приложение, также допускает вирусы и другие вредоносные программы. Попросите сделать исключение для установленного рекламного блока. Объединитесь с блоками рекламы, такими как AdBlock, чтобы попасть в их список исключений. Если вы являетесь законным приложением, это не должно быть проблемой. (http://www.cio.com/article/699970/6_Ways_to_Defend_Against_Drive_by_Downloads?page=1&taxonomyId=3089)

Я повторно повторяю: все перечисленные выше изменения - это то, что вы можете на законных основаниях сделать в коде, чтобы предотвратить поведение против рекламы. Объявления блокируются по соображениям безопасности и висцеральным реакциям, в первую очередь, а иногда и по полосе пропускания и производительности, поэтому убедитесь, что ваши объявления не вызывают каких-либо из этих проблем на уровне кода.

Наконец, я действительно хотел затронуть то, что сказал Бореалид, который я повторил выше; в конце концов, это игра "кошки-мышки", потому что у пользователя есть абсолютная власть и ответственность, как юридически, так и морально, над собственной собственностью. Пользователь может делать все, включая прямое изменение кода "на лету". Конечно, есть ограничения, которые вы можете реализовать и т.д., Но всегда есть способы обойти эту проблему. Это конечная проблема (технически) с DRM (это то, что вы пытаетесь сделать). Вместо того, чтобы тратить время и силы на эту игру, лучше поощрять пользователей к размещению рекламы; они станут вашими лучшими, умными анти-рекламными блоками, бесплатно.

Ответ 12

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

Ответ 13

В случае отсутствия подключения к Интернету я следил за этим учебник и я создал "прослушиватель сетевых состояний" следующим образом:

private BroadcastReceiver mConnReceiver = new BroadcastReceiver() 
{
    @Override
    public void onReceive(Context context, Intent intent) 
    {
        boolean noConnectivity = intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false);

        if (noConnectivity == true)
        {
            Log.d(TAG, "No internet connection");
            image.setVisibility(View.VISIBLE);
        }
        else
        {
            Log.d(TAG, "Interet connection is UP");
            image.setVisibility(View.GONE);
            add.loadAd(new AdRequest());
        }
    }
};

@Override
protected void onCreate(Bundle savedInstanceState)
{
    //other stuff
    private ImageView image = (ImageView) findViewById(R.id.banner_main);
    private AdView add = (AdView) findViewById(R.id.ad_main);
    add.setAdListener(new AdListener());
}

@Override
protected void onResume()
{
    registerReceiver(mConnReceiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
    super.onResume();
}

@Override
protected void onPause()
{
    unregisterReceiver(mConnReceiver);
    super.onPause();
}

registerReceiver и unregisterReceiver должны быть вызваны в onResume и onPause соответственно, как описано здесь.

В вашем макете xml настройте AdView и ImageView по своему выбору, например:

<com.google.ads.AdView xmlns:googleads="http://schemas.android.com/apk/lib/com.google.ads"
    android:layout_alignParentBottom="true"
    android:id="@+id/ad_main"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    googleads:adSize="BANNER"
    googleads:adUnitId="@string/admob_id" />

<ImageView
    android:id="@+id/banner_main"
    android:layout_centerInParent="true"
    android:layout_alignParentBottom="true"
    android:layout_width="379dp"
    android:layout_height="50dp"
    android:visibility="gone"
    android:background="@drawable/banner_en_final" />

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

Ответ 14

Кроме того, чтобы проверить, разрешено ли admob, что я делаю, есть страница, которая в основном сообщает, что я обнаружил рекламный блок, заявляю, что я понимаю возможные причины, а затем покажу некоторые встроенные объявления моих собственных приложений и спрошу за их любезную поддержку для дальнейшего развития.:)

Ответ 15

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

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