Import Module
maven { url 'https://jitpack.io' }
implementation 'com.github.AperoVN:AperoModuleAds:4.0.0'
- Config variant test and release in gradle
- test: using id admob test while dev
- release: using exactly id admob, build release (build file .aab)
productFlavors {
test {
manifestPlaceholders = [ ad_app_id:"AD_APP_ID_TEST" ]
buildConfigField "String", "ads_inter_turn_on", "\"AD_ID_INTERSTIAL_TEST\""
buildConfigField "String", "ads_inter_turn_off", "\"AD_ID_INTERSTIAL_TEST\""
buildConfigField "Boolean", "build_debug", "true"
}
release {
manifestPlaceholders = [ ad_app_id:"AD_APP_ID" ]
buildConfigField "String", "ads_inter_splash", "\"AD_ID_INTERSTIAL\""
buildConfigField "String", "ads_inter_turn_on", "\"AD_ID_INTERSTIAL\""
buildConfigField "Boolean", "build_debug", "false"
}
}
AndroidManiafest.xml
<meta-data
android:name="com.google.android.gms.ads.APPLICATION_ID"
android:value="@string/admob_app_id" />
Create class Application
class App : AdsMultiDexApplication(){
@Override
public void onCreate() {
super.onCreate();
...
aperoAdConfig.setMediationProvider(AperoAdConfig.PROVIDER_ADMOB);
aperoAdConfig.setVariant(BuildConfig.build_debug);
aperoAdConfig.enableAdjust(ADJUST_TOKEN,EVENT_PURCHASE_ADJUST);
aperoAdConfig.setIdAdResume(AppOpenManager.AD_UNIT_ID_TEST);
listTestDevice.add(ID_TEST_DEVICE);
aperoAdConfig.setListDeviceTest(listTestDevice);
AperoAd.getInstance().init(this, aperoAdConfig, false);
}
}
AndroidManiafest.xml
<application
android:name=".App"
...
>
SplashActivity
AperoAdCallback adCallback = new AperoAdCallback() {
@Override
public void onAdFailedToLoad(@Nullable ApAdError i) {
super.onAdFailedToLoad(i);
startMain();
}
@Override
public void onAdLoaded() {
super.onAdLoaded();
}
@Override
public void onAdClosed() {
super.onAdClosed();
startMain();
}
};
AperoAd.getInstance().setInitCallback(new AperoInitCallback() {
@Override
public void initAdSuccess() {
AperoAd.getInstance().loadSplashInterstitialAds(SplashActivity.this, idAdSplash, TIME_OUT, TIME_DELAY_SHOW_AD, true, adCallback);
}
});
Load ad interstital before show
private fun loadInterCreate() {
ApInterstitialAd mInterstitialAd = AperoAd.getInstance().getInterstitialAds(this, idInter);
}
Show and auto release ad interstitial
if (mInterstitialAd.isReady()) {
AperoAd.getInstance().forceShowInterstitial(this, mInterstitialAd, new AperoAdCallback() {
@Override
public void onAdClosed() {
Log.i(TAG, "onAdClosed: start content and finish main");
startActivity(new Intent(MainActivity.this, MaxSimpleListActivity.class));
}
@Override
public void onAdFailedToShow(@Nullable ApAdError adError) {
super.onAdFailedToShow(adError);
Log.i(TAG, "onAdFailedToShow:" + adError.getMessage());
startActivity(new Intent(MainActivity.this, MaxSimpleListActivity.class));
}
}, true);
} else {
loadAdInterstitial();
}
include layout banner activity_main.xml
<include
android:id="@+id/include"
layout="@layout/layout_banner_control"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
app:layout_constraintBottom_toBottomOf="parent" />
load ad banner
AperoAd.getInstance().loadBanner(this, idBanner);
Load ad native before show
AperoAd.getInstance().loadNativeAdResultCallback(this,ID_NATIVE_AD, com.ads.control.R.layout.custom_native_max_small,new AperoAdCallback(){
@Override
public void onNativeAdLoaded(@NonNull ApNativeAd nativeAd) {
super.onNativeAdLoaded(nativeAd);
//save or show native
}
});
show ad native
AperoAd.getInstance().populateNativeAdView(MainApplovinActivity.this,nativeAd,flParentNative,shimmerFrameLayout);
auto load and show native contains loading
activity_main.xml
<include layout="@layout/layout_native_control" />
MainActivity
AperoAd.getInstance().loadNativeAd(this, idNative, layoutNativeCustom);
Load Ad native for recyclerView
// ad native repeating interval
AperoAdAdapter adAdapter = AperoAd.getInstance().getNativeRepeatAdapter(this, idNative, layoutCustomNative, com.ads.control.R.layout.layout_native_medium,
originalAdapter, listener, 4);
// ad native fixed in position
AperoAdAdapter adAdapter = AperoAd.getInstance().getNativeFixedPositionAdapter(this, idNative, layoutCustomNative, com.ads.control.R.layout.layout_native_medium,
originalAdapter, listener, 4);
recyclerView.setAdapter(adAdapter.getAdapter());
adAdapter.loadAds();
Get and show reward
ApRewardAd rewardAd = AperoAd.getInstance().getRewardAd(this, idAdReward);
if (rewardAd != null && rewardAd.isReady()) {
AperoAd.getInstance().forceShowRewardAd(this, rewardAd, new AperoAdCallback());
}
});
App
override fun onCreate() {
super.onCreate()
AppOpenManager.getInstance().enableAppResume()
aperoAdConfig.setIdAdResume(AppOpenManager.AD_UNIT_ID_TEST);
...
}
Application
@Override
public void onCreate() {
super.onCreate();
AppPurchase.getInstance().initBilling(this,listINAPId,listSubsId);
}
if (AppPurchase.getInstance().getInitBillingFinish()){
loadAdsPlash();
}else {
AppPurchase.getInstance().setBillingListener(new BillingListener() {
@Override
public void onInitBillingListener(int code) {
loadAdsPlash();
}
},5000);
}
//check purchase with PRODUCT_ID
AppPurchase.getInstance().isPurchased(this,PRODUCT_ID);
//check purchase all
AppPurchase.getInstance().isPurchased(this);
AppPurchase.getInstance().purchase(this,PRODUCT_ID);
AppPurchase.getInstance().subscribe(this,SUBS_ID);
AppPurchase.getInstance().setPurchaseListioner(new PurchaseListioner() {
@Override
public void onProductPurchased(String productId,String transactionDetails) {
}
@Override
public void displayErrorMessage(String errorMsg) {
}
});
AppPurchase.getInstance().consumePurchase(PRODUCT_ID);
AppPurchase.getInstance().getPrice(PRODUCT_ID)
AppPurchase.getInstance().getPriceSub(SUBS_ID)
InAppDialog dialog = new InAppDialog(this);
dialog.setCallback(() -> {
AppPurchase.getInstance().purchase(this,PRODUCT_ID);
dialog.dismiss();
});
dialog.show();
To ignore invalid ads traffic https://support.google.com/adsense/answer/16737?hl=en
To ignore accident click from user. This feature is existed in library
To ignore infinite loop