Эту, а также статьи по теме, теперь можно найти здесь (zamechtoj.ru).
Не так давно я всё-таки одолел себя, сходил в банк и сделал себе международную валютную карточку VISA. И с чистой совестью зарегистрировался в play market в качестве разработчика. Надо отметить, что помимо положенных 25$ с меня списали ещё 1$. Но я чувствовал, что не всё так просто и мои ожидания оправдались.. будучи в Беларуси я не могу продавать свои приложения (надеюсь, что ситуация измениться). Таким образом единственным легальным вариантом монетизировать свои приложения является реклама. И вот как раз здесь я столкнулся с подводными камнями. Чтобы особо не мудрить, я решил сначала разобраться с одной из самых распространнёных рекламных систем admob.
С самим приложением, которое в качестве тестового я запихнул в маркет можете ознакомиться по ссылке https://play.google.com/store/apps/details?id=com.brucemax.boxintervals (процесс его публикации трудностей не составил, там оказалось всё прозаично).
В процессе гугления попалась мне статья на хабре с подробной инструкцией. Выполнив всё в точности как в вышеприведённом документе я наткнулся на первый "камешек". Коварная ошибка NullPointerExeption в элементе:
<com.google.ads.AdView
android:id="@+id/adView" android:layout_width="wrap_content" android:layout_height="wrap_content" ads:adSize="BANNER" ads:adUnitId="@string/admob_publisher_id" ads:loadAdOnCreate="true" />
Как говориться гугл в помощь. Выяснилось, что в этой версии библиотеки GoogleAdMobAdsSdk-6.2.1.jar проблемы при расположении элемента в файле разметки. Поэтому решением было вставлять вьюху программно в главном активити в методе onCreate():
AdView adView = new AdView(this, AdSize.BANNER, <здесь строка с вашим ID от admob>));
LinearLayout layout = (LinearLayout)findViewById(R.id.mainLayout);
layout.addView(adView);
adView.loadAd(new AdRequest());
Плюс надо отметить, что библиотеку я добавлял не тем способом, что описан в статье, а просто скопировал файл jar в корневую папку libs (об этом способе я прочёл, когда искал решение первой проблемы)
Ну вот собственно и всё. Реклама грузиться даже в симуляторе.
Кстати, чтобы избежать нерелевантных кликов при тестировании приложения на телефоне и в эмуляторе необходимо к объекту запроса применить следующие методы:
AdRequest request = new AdRequest();
request.addTestDevice(AdRequest.TEST_EMULATOR);
request.addTestDevice("E83D20734F72FB3108F104ABC0FFC738");
В первом случаем указан эмулятор, а во втором 32char Device ID (реальное устройство для тестирование), который можно получить при тестировании admob в логах (logcat).
И ещё полезная строчка кода, с помощью которой можно узнать на чём запущено приложение (эмулятор или устройство):
Update
Не так давно я всё-таки одолел себя, сходил в банк и сделал себе международную валютную карточку VISA. И с чистой совестью зарегистрировался в play market в качестве разработчика. Надо отметить, что помимо положенных 25$ с меня списали ещё 1$. Но я чувствовал, что не всё так просто и мои ожидания оправдались.. будучи в Беларуси я не могу продавать свои приложения (надеюсь, что ситуация измениться). Таким образом единственным легальным вариантом монетизировать свои приложения является реклама. И вот как раз здесь я столкнулся с подводными камнями. Чтобы особо не мудрить, я решил сначала разобраться с одной из самых распространнёных рекламных систем admob.
С самим приложением, которое в качестве тестового я запихнул в маркет можете ознакомиться по ссылке https://play.google.com/store/apps/details?id=com.brucemax.boxintervals (процесс его публикации трудностей не составил, там оказалось всё прозаично).
В процессе гугления попалась мне статья на хабре с подробной инструкцией. Выполнив всё в точности как в вышеприведённом документе я наткнулся на первый "камешек". Коварная ошибка NullPointerExeption в элементе:
<com.google.ads.AdView
android:id="@+id/adView" android:layout_width="wrap_content" android:layout_height="wrap_content" ads:adSize="BANNER" ads:adUnitId="@string/admob_publisher_id" ads:loadAdOnCreate="true" />
Как говориться гугл в помощь. Выяснилось, что в этой версии библиотеки GoogleAdMobAdsSdk-6.2.1.jar проблемы при расположении элемента в файле разметки. Поэтому решением было вставлять вьюху программно в главном активити в методе onCreate():
AdView adView = new AdView(this, AdSize.BANNER, <здесь строка с вашим ID от admob>));
LinearLayout layout = (LinearLayout)findViewById(R.id.mainLayout);
layout.addView(adView);
adView.loadAd(new AdRequest());
Плюс надо отметить, что библиотеку я добавлял не тем способом, что описан в статье, а просто скопировал файл jar в корневую папку libs (об этом способе я прочёл, когда искал решение первой проблемы)
Ну вот собственно и всё. Реклама грузиться даже в симуляторе.
Кстати, чтобы избежать нерелевантных кликов при тестировании приложения на телефоне и в эмуляторе необходимо к объекту запроса применить следующие методы:
AdRequest request = new AdRequest();
request.addTestDevice(AdRequest.TEST_EMULATOR);
request.addTestDevice("E83D20734F72FB3108F104ABC0FFC738");
В первом случаем указан эмулятор, а во втором 32char Device ID (реальное устройство для тестирование), который можно получить при тестировании admob в логах (logcat).
И ещё полезная строчка кода, с помощью которой можно узнать на чём запущено приложение (эмулятор или устройство):
boolean isEmulator = "generic".equals(Build.BRAND.toLowerCase());
Update
Уже прошло около года после того старта, и я решил, что будет не лишним обновить статью.
Из наиболее существенного. С августа 2013 адмоб запустил вторую версию себя же =) и с той поры ненавязчиво предлагает не нее перейти. К счастью, я не поспешил и остался на старом адмобе. Почему к счастью? Это связано с тем фактом, что в новом адмобе для Беларуси и России отсутствует платёж банковским переводом. Есть только чеки. С ними отдельная история. Во первых их надо дождаться, а во вторых обналичить. Кроме того, если не ошибаюсь, еще надо подтвердить свой адрес. Вообщем та еще тягомотина)
Еще в Google+ сообществе я наконец-таки нашел собратьев по несчастью,минское сообщество андроидов, которые тоже жаждют начать продавать приложения из нашей любимой Родины. Там предлагается завести российский аккаунт разработчика и открыть счет в российском банке (Смоленск) . На мой вопрос не банит ли Гугл за обман с местоположением, мне ответили, что им не ведомы такие прецеденты.. Хотя я о таком слышал.. и не раз. Возможно, ради интереса раскошелюсь на еще один аккаунт и проверю эту версию. К слову, возможность переташить приложения с одного аккаунта на другой имеется, сам видел)
Также слыхал, что недавно в список продавцов Гугл включил несколько стран Азии: Таиланд и ты. Ну ничего проедет и по нашей улице инкассатор =)