Skip to content

Instantly share code, notes, and snippets.

@econnelly
Last active March 4, 2016 06:07
Show Gist options
  • Select an option

  • Save econnelly/1cc9946934948f00e2f2 to your computer and use it in GitHub Desktop.

Select an option

Save econnelly/1cc9946934948f00e2f2 to your computer and use it in GitHub Desktop.
MoPub Amazon adapter
package com.mopub.mobileads;
import android.app.Activity;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.util.DisplayMetrics;
import android.util.Log;
import android.util.TypedValue;
import com.amazon.device.ads.Ad;
import com.amazon.device.ads.AdError;
import com.amazon.device.ads.AdLayout;
import com.amazon.device.ads.AdListener;
import com.amazon.device.ads.AdProperties;
import com.amazon.device.ads.AdRegistration;
import com.amazon.device.ads.AdSize;
import com.amazon.device.ads.AdTargetingOptions;
import java.util.Map;
/*
* Tested with Amazon SDK 5.4
*/
public class AmazonBanner extends CustomEventBanner implements AdListener {
private CustomEventBannerListener bannerListener;
private AdLayout amazonadview;
@Override
protected void loadBanner(Context context, CustomEventBannerListener customEventBannerListener, Map<String, Object> localExtras, Map<String, String> serverExtras) {
bannerListener = customEventBannerListener;
Activity activity = null;
if (context instanceof Activity) {
activity = (Activity) context;
} else {
// You may also pass in an Activity Context in the localExtras map and retrieve it here.
activity = (Activity)localExtras.get("activity");
}
if (activity == null) {
if(bannerListener != null) {
bannerListener.onBannerFailed(MoPubErrorCode.INTERNAL_ERROR);
}
return;
}
final DisplayMetrics dp = context.getResources().getDisplayMetrics();
final float density = dp.density;
final float widthDp = dp.widthPixels / density;
//int widthPixels = context.getResources().getDisplayMetrics().widthPixels;
AdSize adSize = AdSize.SIZE_320x50;
if(widthDp == 600) adSize = AdSize.SIZE_600x90; // Kindle Fire
if(widthDp == 800) adSize = AdSize.SIZE_600x90; // Kindle Fire HD 7"
if(widthDp == 728) adSize = AdSize.SIZE_728x90; // Only if it matches exactly, since 728 scrolls on 800px wide Kindle Fire HD 7"
if(widthDp >= 1024) adSize = AdSize.SIZE_1024x50; // Kindle Fire HD
final int height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, adSize.getHeight(), dp);
String appId = serverExtras.get("app_id");
if(appId == null) {
try {
ApplicationInfo ai = context.getPackageManager().getApplicationInfo(context.getPackageName(),PackageManager.GET_META_DATA);
appId = ai.metaData.get("amazon_ads_app_id").toString();
} catch(Throwable t) {
Log.e("MoPub", "Could not find amazon_ads_app_id in meta-data in Android manifest");
}
}
if(appId == null) {
Log.d("MoPub", "Amazon banner ad app_id is missing.");
if(bannerListener != null) {
bannerListener.onBannerFailed(MoPubErrorCode.INTERNAL_ERROR);
}
return;
}
AdRegistration.setAppKey(appId);
//AdRegistration.enableTesting(context, true);
//AdRegistration.enableLogging(context, true);
amazonadview = new AdLayout(activity, adSize);
AdLayout.LayoutParams params = new AdLayout.LayoutParams(AdLayout.LayoutParams.MATCH_PARENT, height);
amazonadview.setLayoutParams(params);
amazonadview.setListener(this);
amazonadview.loadAd(new AdTargetingOptions()); // async task to retrieve an ad
}
@Override
public void onInvalidate() {
if(amazonadview != null) {
amazonadview.setListener(null);
}
}
@Override
public void onAdLoaded(Ad ad, AdProperties adProperties) {
if (amazonadview != null && bannerListener != null) {
Log.d("MoPub", "Amazon banner ad loaded successfully. Showing ad...");
bannerListener.onBannerLoaded(amazonadview);
} else if (bannerListener != null) {
bannerListener.onBannerFailed(MoPubErrorCode.UNSPECIFIED);
}
}
@Override
public void onAdFailedToLoad(Ad ad, AdError adError) {
Log.d("MoPub", "Amazon banner ad failed to load.");
Log.d("MoPub", adError.getCode().toString() + ": " + adError.getMessage());
if(bannerListener != null) {
bannerListener.onBannerFailed(MoPubErrorCode.NETWORK_INVALID_STATE);
}
}
@Override
public void onAdExpanded(Ad ad) {
Log.d("MoPub", "Amazon banner ad clicked.");
if(bannerListener != null) {
bannerListener.onBannerClicked();
}
}
@Override
public void onAdCollapsed(Ad ad) {
Log.d("MoPub", "Amazon banner ad modal dismissed.");
}
@Override
public void onAdDismissed(Ad ad) {
}
}
@avipars
Copy link
Copy Markdown

avipars commented Jun 26, 2015

Does this work?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment