Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- compile 'com.google.android.gms:play-services-ads:9.4.0'
- <meta-data
- android:name="com.google.android.gms.version"
- android:value="@integer/google_play_services_version" />
- <activity
- android:name="com.google.android.gms.ads.AdActivity"
- android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"
- android:theme="@android:style/Theme.Translucent" />
- <string name="banner_ad_unit_id">ca-app-pub-8911029118062557/6565681629</string>
- <?xml version="1.0" encoding="utf-8"?>
- <RelativeLayout
- ...>
- <android.support.design.widget.CoordinatorLayout
- ...>
- ...
- </android.support.design.widget.CoordinatorLayout>
- <com.google.android.gms.ads.AdView
- android:id="@+id/banner"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_alignParentBottom="true"
- android:layout_centerHorizontal="true"
- ads:adSize="SMART_BANNER"
- ads:adUnitId="@string/banner_ad_unit_id">
- </com.google.android.gms.ads.AdView>
- </RelativeLayout>
- public class Ads {
- // создаем метод для создания баннера
- public static void showBanner(final Activity activity) {
- // создаем баннер, находим его по id
- final AdView banner = (AdView) activity.findViewById(R.id.banner);
- // строит и загружает баннер
- // импорт android.gms.ads
- AdRequest adRequest = new AdRequest.Builder().build();
- banner.loadAd(adRequest);
- // слушатель загрузки баннера
- banner.setAdListener(new AdListener() {
- @Override
- public void onAdLoaded() {
- super.onAdLoaded();
- setupContentViewPadding(activity, banner.getHeight());
- }
- });
- }
- // метод подвигает нижний край экрана, на высоте размера баннера
- public static void setupContentViewPadding(Activity activity, int padding) {
- View view = activity.findViewById(R.id.coordinator);
- view.setPadding(view.getPaddingLeft(), view.getPaddingTop(), view.getPaddingRight(), padding);
- }
- }
- // внедряем баннер
- public class SettingsFrag extends Fragment implements BillingProcessor.IBillingHandler {
- private boolean adsStatus; // храним текущий статус отображения рекламы
- private boolean initialize; // храним готовность к покупкам
- private BillingProcessor bp; // переменная нашего процессора
- private PreferencesManager prefManager; // класс, который работает с SharedPreferences. Я для себя решил вынести всю логику отдельно
- private Resources resources; // для работы с ресурсами. Раз получаем и постоянно обращаемся
- private ToggleButton tbAdsState; // кнопка
- Context mContext;
- @Override
- public void onAttach(Context context) {
- super.onAttach(context);
- this.mContext = context;
- // инициализируем `BillingProcessor`. В документации на `GitHub` сказано, что для защиты от липовых покупок через приложения типа
- // `freedom` необходимо в конструктор `BillingProcessor`'а передать еще и свой `MERCHANT_ID`. Где его взять - внизу текущего ответа опишу шаги
- bp = new BillingProcessor(context,
- InAppBillingResources.getRsaKey(), InAppBillingResources.getMerchantId(), this);
- prefManager = new PreferencesManager(context); // класс, который работает с `SharedPreferences`
- adsStatus = prefManager.getAdsStatus(); // получаем из `SharedPreferences` сохраненное состояние рекламы (ВКЛ / ВЫКЛ)
- resources = context.getResources(); // получаем "доступ" к ресурсам
- }
- public static SettingsFrag newInstance() {
- Bundle args = new Bundle();
- SettingsFrag fragment = new SettingsFrag();
- fragment.setArguments(args);
- return fragment;
- }
- @Nullable
- @Override
- public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
- // создаем `View` экрана настроек
- View settView = inflater.inflate(R.layout.frag_sett_screen, container, false);
- // инициализация других полей
- tbAdsState = (ToggleButton) settView.findViewById(R.id.tbAdsState);
- // инициализация других полей
- // вешаем слушателя нажатий по кнопке `ToggleButton`
- tbAdsState.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- // `adsStatus` : getAdsStatus из класса `PreferencesManager`
- // true - enabled (ВКЛ) | false - disabled (ВЫКЛ)
- if (adsStatus && initialize) {
- bp.purchase(getActivity(), InAppBillingResources.getSKU_Disable_Ads());
- }
- if (!adsStatus) {
- tbAdsState.setChecked(false);
- Toast.makeText(getActivity(),
- getActivity().getResources().getString(R.string.txt_ads_is_already_disabled),
- Toast.LENGTH_LONG).show();
- }
- }
- });
- return settView;
- }
- @Override
- public void onResume() {
- super.onResume();
- tbAdsState.setChecked(prefManager.getAdsStatus());
- }
- // диалог, который скажет пользователю, что после покупки необходимо перезагрузиться
- private void restartDialog() {
- AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
- builder.setTitle(resources.getString(R.string.msg_notification_Title));
- builder.setCancelable(false);
- builder.setPositiveButton("Ок",
- new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int id) {
- restartApp();
- dialog.cancel();
- }
- }
- );
- AlertDialog resetDialog = builder.create();
- resetDialog.show();
- }
- // перезагружаем приложение
- private void restartApp() {
- Intent rIntent = mContext.getPackageManager().getLaunchIntentForPackage(mContext.getPackageName());
- if (rIntent != null) {
- rIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
- mContext.startActivity(rIntent);
- }
- }
- // ... другие методы класса
- // [START billing part of class]
- @Override
- public void onProductPurchased(@NonNull String productId, TransactionDetails details) {
- // Called when requested PRODUCT ID was successfully purchased
- // Вызывается, когда запрашиваемый PRODUCT ID был успешно куплен
- if (bp.isPurchased(productId)) {
- prefManager.setAdsStatus(false); // 1. записываем в `SharedPreferences` состояние рекламы (ВЫКЛ / false)
- tbAdsState.setChecked(false); // 2. устанавливаем `TogglButton` в соответствующее состояние
- restartDialog(); // 3. перезагружаем приложение
- } else {
- tbAdsState.setChecked(true); // иначе, если не прошла покупка, оставляем состояние (ВКЛ / true)
- }
- }
- @Override
- public void onPurchaseHistoryRestored() {
- //Вызывается, когда история покупки была восстановлена,
- // и список всех принадлежащих идентификаторы продуктов был загружен из Google Play
- // так Вы сможете НУЖНУЮ покупку проверить
- for (String sku : bp.listOwnedProducts()) {
- //MyAppLogs.show("Owned Managed Product: " + sku);
- boolean wasBouhtg = sku.equals(InAppBillingResources.getSKU_Disable_Ads());
- if (wasBouhtg) {
- // true - куплено
- // пишем в `SharedPreferences`, что отключили рекламу
- } else {
- // false - не куплено
- // пишем в `SharedPreferences`, что нужно показывать рекламу
- }
- }
- }
- @Override
- public void onBillingError(int errorCode, Throwable error) {
- // Вызывается, когда появляется ошибка. См. константы класса
- // для получения более подробной информации
- }
- @Override
- public void onBillingInitialized() {
- // Вызывается, когда bp был инициализирован и он готов приобрести
- initialize = true;
- }
- // [END billing part of class]
- }
- public class PreferencesManager {
- private static SharedPreferences mSPref;
- private SharedPreferences.Editor mSPEditor;
- private static final String APP_PREF = "app_pref"; // имя файла настроек Вашего приложения
- private static final String APP_ADS_STATUS = "adsStatus"; // статус рекламы
- public PreferencesManager(Context context) {
- mSPref = context.getSharedPreferences(APP_PREF, Context.MODE_PRIVATE);
- }
- public void setAdsStatus(boolean adsStatus) {
- // true - enabled | false - disabled
- mSPEditor = mSPref.edit();
- mSPEditor.putBoolean(APP_ADS_STATUS, adsStatus);
- mSPEditor.apply();
- }
- public boolean getAdsStatus() {
- return mSPref.getBoolean(APP_ADS_STATUS, true);
- }
- }
- public class InAppBillingResources {
- // Ваш `RSA` ключ из `Google Play Developer Console`
- private static final String RSA_KEY = "MAFD.........";
- private static final String MERCHANT_ID = "18........."; // Ваш `MERCHANT_ID` из `Google Play Developer Console`
- private static final String SKU_DISABLE_ADS = "android.test.purchased"; // Ваш `product_id`, создается в `Google Play Developer Console`
- public static String getRsaKey() {
- return RSA_KEY;
- }
- public static String getMerchantId() {
- return MERCHANT_ID;
- }
- public static String getSKU_Disable_Ads() {
- return SKU_DISABLE_ADS;
- }
- }
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:orientation="vertical"
- android:layout_width="match_parent"
- android:layout_height="match_parent">
- <ToggleButton
- android:id="@+id/tbAdsState"
- android:layout_width="178dp"
- android:layout_height="wrap_content"
- android:text="ToggleButton"
- tools:layout_editor_absoluteX="87dp"
- tools:layout_editor_absoluteY="66dp"/>
- </LinearLayout>
Add Comment
Please, Sign In to add comment