Как правильно внедрить рекламу в Android? - PullRequest
1 голос
/ 04 июня 2019

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

protected void addStickerPackToWhatsApp(String identifier, String stickerPackName) {
    try {
        //if neither WhatsApp Consumer or WhatsApp Business is installed, then tell user to install the apps.
        if (!WhitelistCheck.isWhatsAppConsumerAppInstalled(getPackageManager()) && !WhitelistCheck.isWhatsAppSmbAppInstalled(getPackageManager())) {
            Toast.makeText(this, R.string.add_pack_fail_prompt_update_whatsapp, Toast.LENGTH_LONG).show();
            return;
        }
        final boolean stickerPackWhitelistedInWhatsAppConsumer = WhitelistCheck.isStickerPackWhitelistedInWhatsAppConsumer(this, identifier);
        final boolean stickerPackWhitelistedInWhatsAppSmb = WhitelistCheck.isStickerPackWhitelistedInWhatsAppSmb(this, identifier);
        if (!stickerPackWhitelistedInWhatsAppConsumer && !stickerPackWhitelistedInWhatsAppSmb) {
            //ask users which app to add the pack to.
            launchIntentToAddPackToChooser(identifier, stickerPackName);
        } else if (!stickerPackWhitelistedInWhatsAppConsumer) {
            launchIntentToAddPackToSpecificPackage(identifier, stickerPackName, WhitelistCheck.CONSUMER_WHATSAPP_PACKAGE_NAME);
        } else if (!stickerPackWhitelistedInWhatsAppSmb) {
            launchIntentToAddPackToSpecificPackage(identifier, stickerPackName, WhitelistCheck.SMB_WHATSAPP_PACKAGE_NAME);
        } else {
            Toast.makeText(this, R.string.add_pack_fail_prompt_update_whatsapp, Toast.LENGTH_LONG).show();
        }
    } catch (Exception e) {
        Log.e(TAG, "error adding sticker pack to WhatsApp",  e);
        Toast.makeText(this, R.string.add_pack_fail_prompt_update_whatsapp, Toast.LENGTH_LONG).show();
    }

}

private void launchIntentToAddPackToSpecificPackage(String identifier, String stickerPackName, String whatsappPackageName) {
    Intent intent = createIntentToAddStickerPack(identifier, stickerPackName);
    intent.setPackage(whatsappPackageName);
    try {
        startActivityForResult(intent, ADD_PACK);
    } catch (ActivityNotFoundException e) {
        Toast.makeText(this, R.string.add_pack_fail_prompt_update_whatsapp, Toast.LENGTH_LONG).show();
    }
}

//Handle cases either of WhatsApp are set as default app to handle this intent. We still want users to see both options.
private void launchIntentToAddPackToChooser(String identifier, String stickerPackName) {
    Intent intent = createIntentToAddStickerPack(identifier, stickerPackName);
    try {
        startActivityForResult(Intent.createChooser(intent, getString(R.string.add_to_whatsapp)), ADD_PACK);
    } catch (ActivityNotFoundException e) {
        Toast.makeText(this, R.string.add_pack_fail_prompt_update_whatsapp, Toast.LENGTH_LONG).show();
    }
}

@NonNull
private Intent createIntentToAddStickerPack(String identifier, String stickerPackName) {
    Intent intent = new Intent();
    intent.setAction("com.whatsapp.intent.action.ENABLE_STICKER_PACK");
    intent.putExtra(StickerPackDetailsActivity.EXTRA_STICKER_PACK_ID, identifier);
    intent.putExtra(StickerPackDetailsActivity.EXTRA_STICKER_PACK_AUTHORITY, BuildConfig.CONTENT_PROVIDER_AUTHORITY);
    intent.putExtra(StickerPackDetailsActivity.EXTRA_STICKER_PACK_NAME, stickerPackName);

    mInterstitialAd = new InterstitialAd(this);
    mInterstitialAd.setAdUnitId("my-ad-unit-id");
    mInterstitialAd.loadAd(new AdRequest.Builder().build());

    mInterstitialAd.setAdListener(new AdListener() {
        public void onAdClosed() {
            mInterstitialAd.loadAd(new AdRequest.Builder().build());
        }
    });

    return intent;
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == ADD_PACK) {
        if (resultCode == Activity.RESULT_CANCELED) {
            if (data != null) {
                final String validationError = data.getStringExtra("validation_error");
                if (validationError != null) {
                    if (BuildConfig.DEBUG) {
                        //validation error should be shown to developer only, not users.
                        MessageDialogFragment.newInstance(R.string.title_validation_error, validationError).show(getSupportFragmentManager(), "validation error");
                    }
                    Log.e(TAG, "Validation failed:" + validationError);
                }
            } else {
                new StickerPackNotAddedMessageFragment().show(getSupportFragmentManager(), "sticker_pack_not_added");
            }
        }
        if(mInterstitialAd.isLoaded()) {
            mInterstitialAd.show();
        }
    }

}

public static final class StickerPackNotAddedMessageFragment extends DialogFragment {
    @NonNull
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(getActivity())
                .setMessage(R.string.add_pack_fail_prompt_update_whatsapp)
                .setCancelable(true)
                .setPositiveButton(android.R.string.ok, (dialog, which) -> dismiss())
                .setNeutralButton(R.string.add_pack_fail_prompt_update_play_link, (dialog, which) -> launchWhatsAppPlayStorePage());

        return dialogBuilder.create();
    }

    private void launchWhatsAppPlayStorePage() {
        if (getActivity() != null) {
            final PackageManager packageManager = getActivity().getPackageManager();
            final boolean whatsAppInstalled = WhitelistCheck.isPackageInstalled(WhitelistCheck.CONSUMER_WHATSAPP_PACKAGE_NAME, packageManager);
            final boolean smbAppInstalled = WhitelistCheck.isPackageInstalled(WhitelistCheck.SMB_WHATSAPP_PACKAGE_NAME, packageManager);
            final String playPackageLinkPrefix = "http://play.google.com/store/apps/details?id=";
            if (whatsAppInstalled && smbAppInstalled) {
                launchPlayStoreWithUri("https://play.google.com/store/apps/developer?id=WhatsApp+Inc.");
            } else if (whatsAppInstalled) {
                launchPlayStoreWithUri(playPackageLinkPrefix + WhitelistCheck.CONSUMER_WHATSAPP_PACKAGE_NAME);
            } else if (smbAppInstalled) {
                launchPlayStoreWithUri(playPackageLinkPrefix + WhitelistCheck.SMB_WHATSAPP_PACKAGE_NAME);
            }
        }
    }

    private void launchPlayStoreWithUri(String uriString) {
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setData(Uri.parse(uriString));
        intent.setPackage("com.android.vending");
        try {
            startActivity(intent);
        } catch (ActivityNotFoundException e) {
            Toast.makeText(getActivity(), R.string.cannot_find_play_store, Toast.LENGTH_LONG).show();
        }
    }
}

}

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

Ответы [ 2 ]

2 голосов
/ 05 июня 2019

Admob очень плохо предоставляют рекламу, у них более низкая скорость заполнения. Поэтому я предлагаю вам также добавить другие рекламные сети, если одна из сетей не смогла предоставить рекламу (например, Facebook, StartApp, AppLovin и т. Д.)

2 голосов
/ 04 июня 2019

Ваш код в порядке, реклама показывается только несколько раз, потому что Google Admob не дает 100% заполнению рекламы.

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

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

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

  3. Вы можете получить 100% коэффициент заполнения рекламы, если вы являетесь крупным разработчиком приложений, так как все больше людей будут делать ставки на размещение рекламы в вашем приложении, что означает более высокую скорость заполнения.

  4. В любом случае, если вы все-таки решите бомбардировать пользователей рекламой, вы можете использовать платформу посредничества в рекламе , у Google Admob тоже есть такая, чтобы извлекать рекламу с различных рекламных платформ до , чтобы увеличить скорость заполнения .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...