Release Notes
The following updates have been made to the Mobile Ads Android SDK.
- Version 6.0.0 (June 26, 2020)
- Version 5.9.0 (July 10, 2018)
- Version 5.7 (Updated May 4, 2016)
- Version 5.6 (Updated June 8, 2015)
- Version 5.5 (Updated May 4, 2015)
- Version 5.4 (Updated December 22, 2014)
- Version 5.3 (Updated May 7, 2014)
- Version 5.1 (Updated April 3, 2014)
- Version 5.0 (Updated May 31, 2013)
- Version 4.3 (Updated May 28, 2013)
- Version 4.0 (Updated March 6, 2013)
Version 6.0.0 (June 26, 2020)
- Added support for IAB EU TCFv2
Version 5.9.0 (July 10, 2018)
- Added support for IAB EU TCFv1
- Removed support for MoPub event adapters
- Fixed an issue with RegexMatcher that caused the app to stop responding when loading ads with certain resource URLs
- Fixed an issue when clicking on video ads caused the app to crash
Changes for Version 5.8.0 (December 12, 2017)
Changes for Version 5.8.2 (December 12, 2017)
Fixed a defect for fire devices: the banner ads were not loading.
Changes for Version 5.8.1.1 (September 29, 2016)
Fixed potential exception with video ad creatives.
Changes for Version 5.8.1 (August 9, 2016)
Added interstitial support for singleTask launch mode.
Fixed an issue that in some cases can result in a crash when the View Tree Observer dies
Known Issues and Best Practices
-
We've received reports that the Amazon MobPubSDK Adapter is no longer able to return Amazon Ads
- ClassCastException in com.amazon.device.ads.ViewabilityOverlapCalculator.findOverlapppingViews occurs infrequently on some Samsung 6.0.1 devices
- We've received reports of compatibility issues with Google Play Service 9.8 and 10.1
-
Ads appearing on the ASUS Transformer Prime TF201 have been known to experience rendering and click-related issues.
- Proguard obfuscation:
-
If you're obfuscating your app with ProGuard, ensure to add the following line to your ProGuard configuration:
-keep class com.google.android.gms.ads.identifier.AdvertisingIdClient
Failure to do so may result in your app being unable to access Google Play Services Advertising ID, which will lead to a rejection from the Google Play store.
-
If you're loading Amazon ads through a third party mediator SDK, be careful not to remove the
android.support.v7
classes since doing so may prevent the mediator SDK from requesting Amazon ads. If you must remove one or more of these classes then make sure to only remove those exact class names and leave the others.
-
- Interstitial ads have not been certified for devices running Android 2.2 and below.
- Due to a known issue, Auto Ad Size failures may be incorrectly reported as
NO_FILL
errors. Correctly following the guidelines in the Auto Ad Size section when setting up your banner ad's layout will prevent these errors from occurring. - It's possible for Auto Ad Size and Auto No Scale to return no ads if your
AdLayout
is too small or its size is not appropriate for the device loading the ad. If you would like to take advantage of Auto Ad Size or Auto No Scale for most screen sizes, it's recommended that you set theAdLayout
's width toMATCH_PARENT
and set theAdLayout
's height toWRAP_CONTENT
. - If you're creating an
AdLayout
in memory to move onto the screen later, then you must not assign it a parent view until this move occurs. TheAdLayout
should be added directly to the activity's view hierarchy. Do not add it to a parent view and then insert the parent view into the hierarchy as this could force ad loading to fail. See the Floating Ad Sample for an example implementation. - Banner ads created in memory to be floated onto the screen later have been known to crop in rare cases on certain Android 4.0.x phones. You can avoid this problem by setting your app's target API to 13 or lower.
-
If banner ads do not scale to the proper size, you may be using a customized layout that fails to provide
AdLayout
with the correct dimensions needed for scaling. You can fix this by hard-coding the correct dimensions into theAdLayout
before attempting to load any ads. For example, if you want to load a 320x50 ad, adding the following line right before ads are loaded for the first time will ensure that the ad scales properly regardless of screen size or pixel density:myAdLayout.setLayoutParams(new LayoutParams(320, 50));
- When a banner ad is reloaded using the same
AdLayout
, rich media ad expansion is disabled to prevent the rich media ad from collapsing while users are interacting with it. - When using an XML document to lay out your app, it is not recommended to use
WRAP_CONTENT
for bothAdLayout
width andAdLayout
height. -
If your app supports Android 3.x devices and contains
TextView
s that can be modified by the user, we recommend that you add the following line to theAndroidManifest.xml
file in the section corresponding to the app in order to prevent the keyboard from appearing unexpectedly upon banner ad collapse:android:windowSoftInputMode="stateHidden"
-
During integration, you should set the enable testing flag to
true
to ensure that most ad requests return an ad. Test requests don't show up in your metrics, but allow you to test different ad types within your app. Call theenableTesting
function with atrue
argument to enable the test request. For example:AdRegistration.enableTesting(true);
- The timeout value set through
AdLayout.setTimeout()
only sets the timeout for retrieving an ad from the Amazon Ad Server. It does not account for the time it takes to load all the ad's referenced resources such as images. - If your Application Key is invalid, the server will not return an ad.
AdListener.onAdFailedToLoad()
will be called with Error CodeINTERNAL_ERROR
and Error Message "Server Message: INVALID_APPID". - Android emulators may have issues rendering some ads. Additionally, the emulators may not expose all functionality. For best results we recommend integration testing on actual Android devices.
- On Android 4.x devices you may see a blue border around ad images that have been clicked on.
- When
AdLayout
's parent applies padding, the ad will be scaled too large. If applying padding is desired, rundisableScaling()
on theAdSize
at load time.``
Version 5.7 (Updated May 4, 2016)
Changes for Version 5.7.2 (May 4, 2016)
- Created an optional Load Ad / Show Ad flow for Banner Ads.
- Added AdLayout.enableAutoShow API.
- Added AdLayout.disableAutoShow API.
- Added AdLayout.showAd API.
- Updated the Banner Ad Sample App to demonstrate the Load Ad / Show Banner Ad flow.
- Removed 300x50 Banner Ad Size.
- Resolved latency bug which could cause some devices to wait up to several seconds before loading an Ad.
Changes for Version 5.7.1.1 (March 25, 2016)
- Added MoPub Adapter sample app for Banner and Interstitial Ads.
- Fixed a rare
NullPointerException
issue that may occur when the ad position is being updated.
Changes for Version 5.7.1 (February 29, 2016)
- Removed support for Android 1.6 to 2.2. The Amazon Mobile Ads SDK now supports Android 2.3 and up.
- The Amazon Ad SDK is MRAID 2.0 certified.
- Added support for passing a
Context
to the bannerAdLayout
andInterstitialAd
constructors. Previously these constructors required anActivity
. - Added a flag to the
AdSize
class to disable scaling. This is helpful when applying padding to a layout. - Fixed an
IllegalArgumentException
that could occur in rare cases where the Ad's underlying WebView was constructed with anActivity
and not an application context. - Addressed an issue that could cause a banner ad to scale improperly in the case that it is loaded off screen.
- Addressed minor 'Layout Preview' crashing issue while initializing an
AdLayout
in Android Studio having an ADT version 18 or higher. - Removed ProGuard warning messages caused by deprecated
HttpClient
APIs. - Fixed a rare application crashing issue when loading an
AdLayout
through XML and then inflating into a Fragment instead of anActivity
. - Added mechanism to handle Android bug causing
ApplicationPackageManager.getApplicationLabel
(ApplicationInfo info) to throwArrayIndexOutOfBoundsException
.
Version 5.6 (Updated June 8, 2015)
Changes for Version 5.6.20 (June 10, 2015)
- A developer can now be notified when an
InterstitialAd
orModelessInterstitialAd
expires by implementingDefaultAdListener
'sonAdExpired()
method. - An expired
InterstitialAd
can now be reloaded before any attempts are made to show the ad. - A developer can now determine if an
InterstitialAd
orModelessInterstitialAd
is ready to show by callingisReady()
. - A new ad size has been added. Auto No Scale will choose an ad using the same criteria as the normal Auto Ad Size process but will not upscale the ad any larger than its true device-independent pixel size; for example, a 320x50 ad will display as 320x50 dip even if its container is larger than 320x50. Please see Android Ad Concepts for more information.
- Fixed an issue involving automatic configuration updates.
- Updated sample apps for AndroidStudio compatibility.
Version 5.5 (Updated May 4, 2015)
Changes for Version 5.5.149 (May 4, 2015)
- Fixed
NullPointerException
that could occur when the user exits the application or rotates the device during an ad load. - Geolocation-enabled ad requests have been improved to enable multiple marketplaces while providing better accuracy and increased security.
Changes for Version 5.5.135 (April 23, 2015)
- Improved ad click-through functionality for opening browsers.
- Updated documentation for
ModelessInterstitialAd
.
Changes for Version 5.5.102 (March 24, 2015)
- Added Modeless Interstitial Ad Feature
- Added Swipeable and Framed Modeless Interstitial Ad Sample Apps
- Fixed an issue with AdActivity when the activity is resuming
- Fixed an issue where a back button pressed in an Interstitial Ad may result in a NullPointerException
- Fixed an issue with erroneous Google Advertising ID logging issue
- Fixed an issue where expandable ads may expand off screen
- Fixed an issue where AdSize.toString can return null
Version 5.4 (Updated December 22, 2014)
Changes for Version 5.4.235 (December 22, 2014)
- Added the
equals
override method toAdSize
.
Changes for Version 5.4.227 (November 18, 2014)
- Fixed an issue with transparent ads on Android 4.0.x versions.
Changes for Version 5.4.192 (November 4, 2014)
- Fixed an issue involving ads that would override the device's or app’s auto-rotate settings.
- Fixed an issue where a single
AdLayout
object could start a new ad load before its previous ad load had completed. - Addressed a race condition in which dismissing an interstitial ad using the native close button would sometimes put the ad into an abnormal state.
- Fixed an issue that had previously forced developers of ProGuard-obfuscated apps to add a specific
keepclassmembers
line to their ProGuard files or risk the possibility of MRAID ads being unclickable. This line no longer needs to be added to the ProGuard file. - Fixed an issue where the
onAdFailedToLoad
callback may have been fired multiple times for a single failed ad load. - Resolved multiple issues related to load timeout functionality.
- Fixed a crash that had occurred when apps on certain devices attempted to destroy expanded rich media ads without first closing the ads.
- Removed incorrect floating ad banner logcat warnings.
- Handled an
IllegalArgumentException
that could have been thrown while an ad was being destroyed. - Fixed a
NullPointerException
that sometimes occurred duringInterstitialAd
creation. - Addressed an ad-specific issue that could have caused a
ClassCastException
.
Changes for Version 5.4.146 (October 8, 2014)
- Fixed an issue where some intent URLs in the in-app browser would lead to a broken link.
- Added a new interface, ExtendedAdListener, which features an onAdResized() callback for when a banner ad is resized.
- Fixed an issue that had led to some devices being classified as “Other/Unknown” in performance reports.
- Added a debug log message to notify developers when an ad is scaling based on screen dimensions due to a missing parent view.
- Fixed an issue where interstitial ads on Android 4.4 devices would sometimes display a low-resolution image.
- Handled an uncommon IndexOutOfBoundsException thrown during network calls.
- Added support for the following MRAID 1.0 capabilities:
- mraid.useCustomClose() – Allows ad to use a custom close button image.
- mraid.close() – Closes an interstitial ad.
- mraid.isViewable() – Determines if the ad is currently viewable.
- mraid.getPlacementType() – Retrieves whether the ad is an interstitial or inline placement type.
- Added support for the following MRAID 2.0 capabilities:
- mraid.createCalendarEvent() – Prompts the user to add an event to the calendar.
- mraid.getCurrentPosition() – Gets the current size and position of the ad on the screen.
- mraid.getDefaultPosition() – Gets the default size and position of the ad on the screen.
- mraid.getMaxSize() – Gets the maximum expansion size of the ad.
- mraid.getScreenSize() – Gets the size of the device screen.
- mraid.storePicture() – Prompts the user to store a picture to the gallery.
- mraid.supports() – Determines what features the device supports.
- mraid.resize() – Performs a non-modal resize of the ad.
Changes for Version 5.4.78 (July 18, 2014)
- Fixed an uncommon
ArrayIndexOutOfBoundsException
caused by Google Play Services Advertising ID collection. - Resolved a
NullPointerException
related to Google Play Services Advertising ID collection. - Previously, developers obfuscating or shrinking apps with ProGuard and distributing on Google Play would have been required to update the app package’s ProGuard file to keep certain classes, ensuring that the Google Advertising Identifier can be successfully collected. This update is no longer necessary.
Changes for Version 5.4.46 (June 26, 2014)
- Google Play Services Advertising Identifier is now supported. Because of new requirements detailed on Google’s policy page, all apps containing older versions of the Amazon Mobile Ads API must update to the current API or will no longer be eligible for upload to the Google Play Store after August 1, 2014. Developers of these apps must separately download and integrate the Google Play Services SDK by following the Google Play Services SDK Setup Instructions in order for the changes to take effect.
- Resolved scaling issues that had been present on Android 4.4 devices.
- Added a new button to in-app browser action bar. Pressing this button will allow users to open the current webpage in an external browser.
- Fixed a race condition where destroying an
AdLayout
could lead to aNullPointerException
. - Fixed an uncommon issue where clicking links in certain ads could cause a crash.
- Fixed a problem where loading ads would cause a crash due to Internet permissions being removed from the app.
AdTargetingOptions.setFloorPrice()
now takes a parameter of typelong
instead ofint
. Developers should not need to make an update as Java will automatically upcast fromint
.
Version 5.3 (Updated May 7, 2014)
Changes for Version 5.3.22 (May 7, 2014)
- Addressed a memory leak that could occur upon device rotation when an
InterstitialAd
is instantiated and loaded in an activity'sonCreate()
,onStart()
, oronResume()
methods.
Changes for Version 5.3.17 (May 2, 2014)
- Fixed an issue where
WebView
objects were being destroyed outside of the UI thread. This would sometimes lead to crashes on apps with target API 18 or higher that would attempt to load ads on Android 4.3+ devices without internet connectivity.
Breaking Changes for Version 5.3.9 (April 24, 2014)
Amazon Mobile Ads API version 5.3 contains some breaking changes that include a modified AdListener
interface and a new error code. If you are upgrading to this version from an older version, your app may not compile until you have addressed the following:
- All callbacks in
AdListener
are now passed anAd
object instead of anAdLayout
object. Note thatAdLayout
is an instance ofAd
. - A new callback,
onAdDismissed()
, has been added toAdListener
. This callback will run immediately after the user exits an interstitial ad. - We added a new error code,
NETWORK_TIMEOUT
, that is returned when the connection to the ad server timed out before the ad could be retrieved. This kind of error had previously been classified as aNETWORK_ERROR
.
Other Changes for Version 5.3.9 (April 24, 2014)
- Interstitial ads are now supported by the Amazon Mobile Ad Network. Online documentation and Javadocs have been updated to include instructions for these full-page ads, which are represented by the newly introduced
InterstitialAd
objects. - A new interface,
Ad
, has been introduced.Ad
is implemented by bothAdLayout
andInterstitialAd
. - A new class,
DefaultAdListener
, has been added as a default implementation ofAdListener
. Developers are encouraged to create a custom listener that extends this class instead of implementingAdListener
directly. - The Amazon Mobile Ads API’s in-app browser, which is displayed by some ads, now features larger and more visible navigation buttons.
- Fixed an uncommon issue where the
WifiManager
would cause the app to crash. - Changed ad rendering logic to account for a rare crash caused by setting a
WebView
’s JavaScript state. - Resolved an issue that would prevent ads from detecting clicks in rare cases.
- Added a
loadAd()
method that takes in no parameters. Developers are encouraged to use this method in cases where they would have previously passed in an emptyAdTargetingOptions
object. AdTargetingOptions.setGender()
has been deprecated because this information is no longer used for targeting purposes.- A new method,
setFloorPrice()
, has been added toAdTargetingOptions
. This allows developers to the set the floor price (eCPM) of their ads without having to usesetAdvancedOption()
. - Introduced a new sample app, Interstitial Ad Sample, for the purpose of demonstrating how to set up interstitial ads. See the Interstitial Ad Sample Page for more information.
- Updated the Simple Ad Sample and Floating Ad Sample apps based on recent changes.
Version 5.1 (Updated April 3, 2014)
Changes for Version 5.1.242 (April 3, 2014)
- Fixed a
ConcurrentModificationException
that could occur when attempting to load an ad.
Changes for Version 5.1.236 (March 24, 2014)
- Reworded an error message that incorrectly said to reload an ad in the case where ad loading failed due to an app being disabled.
- Fixed a crash that would occur when the Internet permission was not present.
- Fixed an issue where a missing activity would cause the app to crash after an ad click.
Changes for Version 5.1.153 (October 28, 2013)
AdTargetingOptions.setAdvancedOption()
will now throw anIllegalArgumentException
if the key isnull
or empty.- Removed a deprecated API warning, "can't find referenced method
void setPluginsEnabled()
," that would sometimes appear in the logcat. See the Amazon Mobile Ads Forum for more details. - Addressed a threading issue caused by the WebViews and Views not being created on the same thread.
- Addressed runtime error with rich media ads on Android 1.6, where Bitmap Drawable Constructor would cause the app to exit.
- Removed reference warnings that would sometimes appear when ProGuard is used. See the Amazon Mobile Ads Forum for more details.
- Improved corrupt
WebView
detection. See the Amazon Mobile Ads Forum for more details. - Addressed several use cases resulting in
NullPointerException
s. - Addressed use case resulting in
ConcurrentModificationException
.
Changes for Version 5.1.40 (August 28, 2013)
- Resolved an issue where floating ad banners with view height set as WRAP_CONTENT would not render correctly on some Android 4.0 devices.
- The
AdRegistration
methodregisterApp()
now accepts aContext
parameter. - Removed a misleading "could not find method" error message that would appear in the logcat upon ad load attempts.
- The Amazon Mobile Ads API is now bundled as part of the Amazon Mobile App SDK download.
- This Release Notes page has been created to replace the README file that was previously included in the Amazon Mobile Ads API download. This page will be updated with each new release.
- Rich media expandable ads are supported on Android 4.1 and Android 4.2.
- The Auto Ad Size feature is now available for ads created in memory to be moved onto the screen at a later time. Examples of such ads can be seen in the Floating Ad Sample. Note that, if the
AdLayout
's dimension is set toMATCH_PARENT
for one of these ads, the activity's root view's corresponding dimension will be used for the Auto Ad Size calculation. - Updated sample apps to use Auto Ad Size by default.
- Ad rendering no longer depends on resource files bundled inside the jar. This will make integration easier with Unity and other app development frameworks that had previously stripped these resource files from the jar during the integration process.
- Updated test ads and the Developer Launch Checklist to include new Pinzon test banner ad.
- Fixed an issue where floating ad banners would scale inconsistently on some older devices.
- AdLayouts created off the screen in memory must now have their layout parameters set ahead of time in order for ad loading to succeed. Leaving the parameters blank had previously caused ads to scale incorrectly.
Version 5.0 (Updated May 31, 2013)
Breaking Changes
Amazon Mobile Ads API version 5.0 contains a number of breaking changes. If you are upgrading to this version from an older version, your app may not compile until you have addressed the following:
- In the
AndroidManifest.xml
file, theMraidBrowser
andVideoActionHandler
activity declarations should be removed. They have been replaced by a singleAdActivity
declaration that must appear as follows:<activity android:name="com.amazon.device.ads.AdActivity" android:configChanges="keyboardHidden|orientation|screenSize"/>
- The following
AdRegistration
methods no longer accept aContext
parameter:setAppKey()
,enableLogging()
,enableTesting()
, andgetVersion()
. - The
AdRegistration
methodregisterApp()
takes anActivity
parameter instead of a more generalContext
parameter. - The
AdSize
enum has been replaced with a package-levelAdSize
class. To specify a standard ad size, you should use one of the predefinedAdSize
fields that take the formSIZE_WxH
. So, for example, if you previously set the ad size by passingAdLayout.AdSize.AD_SIZE_320x50
into yourAdLayout
constructor, you should instead pass inAdSize.SIZE_320x50
. Note that the process for setting the size via layout XML has not changed. - The "custom" size is no longer accepted. To use a non-standard size, you will need to instantiate a new
AdSize
object that takes width and height as its parameters and pass this into yourAdLayout
. If setting the size via layout XML, you can now directly specify the dimensions usingAmazon:adSize="WxH"
- The
AdLayout
constructor now takes anActivity
parameter instead of a more generalContext
parameter. - When using XML instantiation, please use the new namespace for the Amazon prefix as follows:
<xmlns:Amazon="http://schemas.android.com/apk/lib/com.amazon.device.ads"/>
This replaces the previous namespace ending with
"res/<your.package.name/>"
- The
amazon_ads_attr.xml
file is no longer required. Please remove it from your application.
Other Changes
- Resolved an issue where obfuscating an application's
R
class would prevent ads from loading. You may now safely obfuscate yourR
class. - Fixed a memory leak issue related to lingering
Context
objects. - Documented a workaround for ensuring required resource files aren't removed during integration with Unity, Adobe AIR, or other development frameworks.
- Logcat messages from XML-instantiated layouts now log if they are warning or error.
- Introduced an additional layout XML
AdLayout
constructor for accepting default style.
Version 4.3 (Updated May 28, 2013)
Changes
- Added an ad failure message to warn developers when required resource files have been removed from the APK.
- Introduced Auto Ad Size for ad banners. From now on, if
AdSize
is not specified in theAdLayout
's initialization within your app's XML or Java code, then an ad size will be automatically selected based upon theAdLayout
's size and the device's screen size. - A new
AdLayout
constructor that only requires app's context has been introduced. Any ads loaded within thisAdLayout
will be sized through Auto Ad Size. - Resolved an issue that prevented the Amazon Mobile Ads API from being obfuscated.
- Modified ad scaling behavior to ensure
AdLayout
s with one dimension set toWRAP_CONTENT
will resize based on the other dimension. - Changed the "no results" error code from
INTERNAL_ERROR
toNO_FILL
. - Handled a
NullPointerException
sometimes seen when the MAC Address could not be read. - Resolved a SQLite database access conflict that occasionally prevented ads from loading.
- Fixed an issue in which package parameters could become double-encoded in the request URL, preventing ads from loading.
- Eliminated a rich media banner cropping issue that had affected Android 4.0 devices and had prompted a workaround that involved setting the
AdLayout
's width toMATCH_PARENT
. This workaround is no longer necessary.
Version 4.0 (Updated March 6, 2013)
Changes
- Resolved an issue that sometimes prevented ads from loading due to an inability to read ad size from the app's XML files.
- The PDF version of the Developer Guide has been replaced by a shortcut that redirects to the online version of the Developer Guide. Open the shortcut using your web browser.
- All error messages have been redesigned for simplification purposes. See the updated Developer Guide or Javadocs for more information.
- This release is now compatible with the Amazon Mobile App SDK Eclipse Plugin (Note: this plugin is now deprecated.). Note that you will need to extract the mobile ads zip file (MobileAds.zip) to the same folder as the Apps-SDK zip file (Apps-SDK.zip) to take advantage of this Eclipse plugin.
- The deprecated
AdRegistration
functionssetAppGUID()
andsetAppUniqueID()
have now been removed. Please usesetAppKey()
instead. - Instructions for updating open source attribution documents have been included in the "Updating Attributions" section of the Developer Guide.
Last updated: Nov 25, 2020