Changelog
1.11.6
Behavior Changes
- Fixed NullPointerException regression in Google Mediation adapter from 1.11.5
1.11.5
Behavior Changes
- Fixed issue where refreshing ad does not respect timeout on network error
- Fixed issue where API 7 flag duplicated in request when used with refreshing ad unit
- Fixed issue where connection type was not added to the outbound request
- Added 5 second timeout to close button on Google Mediated Ads
- Updated Blocking Ads to request hardware acceleration for video to add Unity support to the Exoplayer extension
1.11.4
New Features
- Added support for Dynamic Price video ads
Behavior Changes
- Fixed dependency compatibility issue when building with Kotlin 1.4
- Fixed incorrectly removed deprecated properties in 1.11.2 with additional replacements hints
- Fixed crash on Android 5 devices when retrieving network type
1.11.3
Behavior Changes
- Fixed issue where refreshing ad does not respect the refresh interval if the very first response is a NO_BID error.
Dependency Updates
- exoplayer-extension minimum Exoplayer version updated to 2.15.0
1.11.2
New features
- Added NimbusAdManager.setGdprConsent and RequestManager.setGdprConsent helper methods. See Privacy for more information and examples.
Behavior Changes
- Fixed issue where refreshing ads would not fire events. This fixes a regression introduced in version 1.10.10 and 1.11.2 should be use if using refreshing ads.
- Impression bid floor has been removed. To set the bid floor from the client use the banner or video objects accessible in the NimbusRequest.
- Calling
setGsonon the OkHttpNimbusClient is now a no-op. Serialization is handled by Kotlin now.
Breaking Changes
- NimbusRequest helper methods such as
forBannerAdandforInterstitialAdhave been moved to a companion object. If using Kotlin, the imports for those functions will need to be updated or prefixed likeNimbusReqeust.forBannerAdas referenced in the requesting documentation. - NimbusResponse now wraps the BidResponse object. Property calls to NimbusResponse such as
nimbusResponse.positionshould change tonimbusResponse.bid.positionFunction calls as part of the NimbusAd interface such asnimbusResponse.markup()continue to work as before.
1.11.1
New Features
- Added Viewability extension for providing metrics using the OM SDK. To enable Viewability refer to the OM-Viewability page.
Behavior Changes
- Fixed crash if static ad is clicked while rendering.
1.11.0
Behavior Changes
- Fixed issue where LOADED event could fire twice for some static ads.
- Fixed issue preventing Unity Rewarded Video from rendering.
1.10.11
Behavior Changes
- Fixed issue where ads can open without user click action.
1.10.10
Behavior Changes
- Fixed potential crashes when loading or clicking on static ads.
- Fixed issue preventing click-through on video ads after 5 seconds elapsed until video end.
- Added checks to prevent state issue crash dismissing full screen ads.
1.10.9
Dependency Updates
- Downgraded Androidx Core to 1.5.0 to prevent potential dependency conflict
1.10.8
New Features
- Updated dependencies to support Android 12
- Added extension methods for adding parameters to a MoPub ad or Google ad request when using Dynamic price.
Behavior Changes
- Calls to NimbusAdManager.makeRequest() now callback on the main thread.
- Fixed issue where scrolling views placed over a Nimbus Ad with a blank space incorrectly reports the ad as being covered. (NOTE: Blank views placed on ads or within a scrolling view on top of an ad must be marked as invisible or have its alpha set to 0 otherwise the ad will report itself as covered.)
1.10.7
Behavior Changes
- Refreshing ads will always call onAdResponse to notify when the next ad is ready to be shown
- Added small delay between video load and start when loaded as an interstitial
1.10.6
- Fixed crash if blocking ad shown after hosting activity is destroyed.
1.10.5
Behavior Changes
- Fixed issue where refresh logic might not trigger if no layout passes happen on screen.
- AdController now always passed back before firing loaded event.
- Static ads now destroy the WebView after a 1 second delay.
- Static ads only fire resumed event if paused first.
- Fixed issue reporting exposure to MRAID ads.
- Fixed issue resolving OpenRTB request models.
1.10.4
New Features
- Added support for Unity Rewarded Video Demand
Behavior Changes
- The default mapping for Nimbus Dynamic Price has changed. Please ensure your Nimbus Dynamic Price mapping matches your environment if the mapping was not being set on the Nimbus Dynamic Price request.
- Fixed potential crashes if MoPub ad is invalidated during load of Nimbus Ad
1.10.3
Behavior Changes
- All rewarded ads calls will now have an end card automatically included.
- NimbusAdManager.showRewardedVideoAd has been deprecated and replaced by showRewardedAd. Please note if migrating calls from showRewardedVideoAd to showRewardedAd, the close button delay value has been changed from milliseconds to seconds and the calls should be updated with the appropriate values.
- showBlockingAd now has a default 5 second close button delay. To revert to the previous behavior, change the call to
showBlockingAd to use the 4 parameter version.
showBlockingAd(nimbusRequest, 0, activity, listener)
1.10.2
Behavior Changes
- Added support for MoPub MREC ad units in NimbusMoPubAdapter
- Setting the App object during initialization is no longer required
1.10.1
Behavior Changes
- Updated Google Ad SDK to 20.0.0
- Blocking Ads now use the full screen by default
Migration Steps (Google Dynamic Price Only)
Version 20.0.0 of the Google Ad SDK introduces new names for banner and interstitial ad units. For any place NimbusDynamicPrice is being used, make the following changes:
-
Change all instances of
PublisherAdRequest.BuildertoAdManagerAdRequest.Builder -
Change all instances of
PublisherAdViewtoAdManagerAdView
// Old
adView = new PublisherAdView(context);
adView.adUnitId = "google_placement_id";
adView.setAdSizes(AdSize.BANNER);
nimbusAdManager.makeRequest(context, NimbusRequest.forBannerAd(...),
new NimbusDynamicPrice(new PublisherAdRequest.Builder(), builder -> { adView.loadAd(builder.build()); } ));
// New
adView = new AdManagerAdView(context);
adView.adUnitId = "google_placement_id";
adView.setAdSizes(AdSize.BANNER);
nimbusAdManager.makeRequest(context, NimbusRequest.forBannerAd(...),
new NimbusDynamicPrice(new AdManagerAdRequest.Builder(), builder -> { adView.loadAd(builder.build()); } ));
- Change all instances of
PublisherInterstitialAdtoAdManagerInterstitialAd. AdManagerInterstitial changes how interstitial ads are requested from Google. See the below code sample for the new convention.
// Old
interstitial = new PublisherInterstitialAd(requireActivity());
interstitia.adUnitId = "google_placement_id";
interstitial.adListener = new AdListener() {
@Override
public void onAdLoaded() {
interstitial.show();
}
@Override
public void onAdFailedToLoad(@NonNull LoadAdError loadAdError) { }
};
nimbusAdManager.makeRequest(context, NimbusRequest.forInterstitialAd(...),
new NimbusDynamicPrice(new PublisherAdRequest.Builder(), builder -> { interstitial.loadAd(builder.build()); } ));
// New
nimbusAdManager.makeRequest(context, NimbusRequest.forInterstitialAd(...),
new NimbusDynamicPrice(new AdManagerAdRequest.Builder(), builder -> {
AdManagerInterstitialAd.load(context,"google_placement_id",builder.build(),
new AdManagerInterstitialAdLoadCallback() {
@Override
public void onAdLoaded(AdManagerInterstitialAd interstitial) {
interstitial.show(activity);
}
@Override
public void onAdFailedToLoad(LoadAdError loadAdError) { }
});
}));
More information about the API changes in 20.0.0 can be found on the Ad Manager Migration page.
1.10.0
In this release we have migrated our packages from Bintray to S3 and no longer require credentials to access the packages.
Migration Steps
- Remove the following two repository definitions
maven {
url "https://timehop.bintray.com/nimbus-android"
credentials {
username "$username"
password "$password"
}
}
maven {
url "https://timehop.bintray.com/nimbus-openrtb"
credentials {
username "$username"
password "$password"
}
}
- Add the new S3 maven repository
maven {
url = uri("https://adsbynimbus-public.s3.amazonaws.com/android/sdks")
credentials {
username = "*"
}
content {
includeGroup("com.adsbynimbus.openrtb")
includeGroup("com.adsbynimbus.android")
}
}
The updated [Quickstart] guide also contains the new repository for reference.
Behavior Changes
- Fixed keyword delimiter for MoPub Dynamic Price
1.9.1
Behavior Changes
- Fixed issue where APS Demand was not included in outbound requests
1.9.0
New Features
- Added a new NimbusMoPubAdapter to simplify MoPub integration.
- Added new com.adsbynimbus.google.NimbusCustomEvent class to simplify Google integration.
- Added Nimbus.setUsPrivacyString() to set US privacy on requests and demand integrations
Behavior Changes
- Fixed crash in StaticAdController if ad destroyed while scrolling
- Fixed issue where interstitial close button could be blocked by system UI
- com.adsbynimbus.mopub.NimbusBlockingAd and com.adsbynimbus.mopub.NimbusInlineAd have been deprecated
- com.adsbynimbus.google.NimbusCustomEventBanner and com.adsbynimbus.google.NimbusCustomEventInterstitial have been deprecated
- Removed FragmentActivity version of NimbusAdManager.loadBlockingAd(). No code changes should be required.
1.8.0
New Features
- Updated Google Ad Manager Nimbus Dynamic Price to pass through ad id for server use
1.7.3
Behavior Changes
- Fixed issue where ad unit would not refresh if no bid
- Updated NimbusDynamicPrice constructor to work with MoPub interstitial
1.7.2
Behavior Changes
- Fixed crash when refreshing ads in background
- Fixed issue where video playback continues when app backgrounded
1.7.1
Behavior Changes
- Fixed issue where video would not stop playback when in background when blocking ad called with Activity
- Fixed issue causing Mopub interstitial adapter to not call onInterstitialShown callback
1.7.0
New Features
- Added Rewarded Video request helper methods
- Added helper methods for showing the close button on a delay
- Added FANAdRenderer.setLegacyBannerPlacementIds() to mark legacy 320_50 placements
Behavior Changes
- showBlockingAd calls now how have a close button enabled by default
Breaking Changes
- FANAdRenderer will now map a 320x50 NimbusAd to a BANNER_50 Facebook Ad. If your app uses the legacy BANNER_320_50 size, add the placement id to the FANAdRenderer using setLegacyBannerPlacementIds()
1.6.3
New Features
- Added Nimbus Dynamic Price for Google
Breaking Changes
- Mapping, LinearPriceGranularity, and LinearPriceMapping moved to com.adsbynimbus.lineitem package
1.6.2
New Features
- Adds support for Android 11
- Device connection type will fallback to link speed if permissions not granted
1.6.1
Behavior Changes
- Fixed issue where showAd() with a refresh interval did not call onAdRendered()
1.6.0
New features
- Added Nimbus Dynamic Price for MoPub
Behavior Changes
- Fixed issue where MoPub interstitial adapter did not trigger impression/dismissed
- MRAID exposure events will now throttle events under 100ms
1.5.2
Behavior Changes
- Added showAd() override to allow for refreshing ad units
1.5.1
Behavior Changes
- Fixed issue where APS parameters not appended to banner request
- Updated IMA SDK to 3.19.4
1.5.0
New Features
- Interstitial support
- Support for Mopub BaseAd adapters for use with Mopubs SDK >= 5.13.0
Behavior Changes
- Companion objects from Nimbus OpenRTB now removed by R8 (-16 method references, -1.8 kb)
Breaking Changes
- NimbusCustomEvent classes for Mopub moved to mopub-customevent artifact for Mopub <= 5.12.1
dependencies {
implementation "com.adsbynimbus.android:extension-mopub:1.11.6" // Requires Mopub >= 5.13.0
implementation "com.adsbynimbus.android:extension-mopub-customevent:1.11.6" // For Mopub <= 5.12.1
}
1.4.0
New Features
- Companion Ad support
1.3.8
Behavior Changes
- Facebook Ads now send AdEvent.LOADED event on succesful load
- Fixed MRAID not loading when publisher key used to initialize is not lowercase
- Static ads now load with the baseurl http://local.adsbynimbus.com
1.3.7
Behavior Changes
- Device object no longer overwritten on request if previously set
1.3.6
Behavior Changes
- Disabled encoding of Html characters in serialized NimbusRequest
1.3.5
Behavior changes
- Fixed consumer proguard files to prevent obfuscation of responses
1.3.4
Behavior Changes
- Facebook ads destroy properly if AdController destroyed during load.
1.3.3
Behavior Changes
- FAN Renderer implementations no longer check to see if ad is interstitial before rendering; the renderer capability check is handled by the calling function to render the ad.
- Fixed keyword clash when interacting with native impression objects in Java. When accessing use setNative() and getNative()
- NimbusAdViewFragment no longer dismisses upon completion by default. To enable this behavior, call the setDismissOnComplete(true) on the instance of the fragment.
- Updated Static loaded event to fire after controller is returned
1.3.2
Behavior Changes
- Static Ads no longer fail when requesting non-existent local assets.
1.3.1
Behavior Changes
- Added support for native OpenRTB impression requests.
- Fixed crash on click through for ads instantiated with an application context
1.3.0
New Features
- Added OpenRTB model documentation to SDK docs
- OpenRTB models now support usage as Kotlin properties
- Optimized code shrinking rules to library size on release builds
- Added support for Facebook interstitial ad units. Please see note in Demand-Sdk-Integrations
Behavior Changes
- MRAID no longer errors if creative adds unknown event listeners.
Breaking Changes
- All OpenRTB models (App, User, etc) have moved to the com.adsbynimbus.openrtb.request namespace
- OkHttpNimbusClient and ApsDemandProvider have moved to the com.adsbynimbus.request namespace
1.2.0
New Features
- Added Google extension for integration with GAM
Behavior Changes
- Views managed by an AdController will reattach visibility listeners if it's parent changes
1.1.6
New Features
- Added ability to set a global request url for proxy servers
1.1.5
New Features
- Added click tracking for Static and FAN ads
Behavior Changes
- Session Id can now be get and set by calling Nimbus.(get|set)SessionId()
- Video ads no longer automatically destroy on completion. Please call ensure destroy() is called when an ad should no longer be shown.
1.1.1
New Features
- Added MoPub extension for integrating with MoPub.
1.1.0
New Features
- Added Facebook extension for integrating with Facebook
1.0.0
BREAKING CHANGES
NimbusSDKclass has been removed; initialization has been moved to the Nimbus class.Nimbus.initialize(Context context, String publisherKey, String apiKey)must be called before the SDK can be used.- The
api_keyandurlin the application manifest are no longer used and can be removed. - The app object passed to
NimbusSDK.initialize()must now be set by callingNimbusAdManager.setApp(). - Test mode is now enabled by using
Nimbus.setTestMode(true); BidRequestobject has been renamed toNimbusRequest.fillInterstitialAd()andfillBannerAd()have been renamed toforInterstitialAd()andforBannerAd()- Creating a new
NimbusRequestobject can be done using staticforInterstitialAd()andforBannerAd()methods. NimbusAdManagerno longer requires a context.NimbusAdManager.requestAd()has been renamed toshowAd().AdControllerhas been moved to com.adsbynimbus.render package.- The
AdController.render()function has been removed. Calls toshowAd()will immediately render an ad. AdEventListenerhas been relocated to com.adsbynimbus.render.AdEvent.ListenerStaticAdProvider andVideoAdProviderhave been renamed toStaticAdRendererandVideoAdRendererStaticAdProvider.WebViewProviderhas been removed and should be removed from code.ExoPlayerVideoPlayerProviderhas been renamed toExoPlayerVideoDelegate- The provider methods for setting a
DataSource.Factorycan be set by overridingExoPlayerVideoDelegate.ExoPlayerFactoryDelegateand callingExoPlayerVideoDelegate.setExoPlayerFactoryDelegate() VideoAdRendererdelegate for customizing the IMA SDK settings can be set by callingVideoAdRenderer.setDelegate()OkHttpRequestManagerhas been renamed toOkHttpNimbusClient.OkHttpNimbusClientinitializes with default client and gson and can be overridden by callingsetOkHttpClient()andsetGson()ApsDemandProvideris initialized by callingApsDemandProvider.initialize()- Removed dependencies on androidx.lifecycle
- Renamed
Nimbus.LogProviderclass toNimbus.Logger. - Loggers can be added and removed by calling
Nimbus.addLogger()/Nimbus.removeLogger()
Behavior Changes
- Render has been removed and ads will render automatically when calling
showAd() - Video ads will now manage playback state automatically as they move on and off the screen.
- The automatic playback of ads can be controlled by calling
start()andstop()on anAdController. Stopping an ad will always stop playback. - Due to a simplification of
NimbusRequest, if a video only or static only interstitial request is desired, create a newNimbusRequestusingforInterstitialAd()and then set the corresponding object to null;
val req = NimbusRequest.forInterstitialAd("test_static")
req.request.imp[0].video = null
or
val req = NimbusRequest.forInterstitialAd("test_video")
req.request.imp[0].banner = null
- To modify the price (or any other field) of a request, use the included builder methods
val req = NimbusRequest.forInterstitialAd("hybrid")
//Bid floor is a float that represents the floor in CPM
req.builder().impression().video().bidFloor(5.50)
or
req.builder().impression().banner().bidFloor(2.50)
New Features
- COPPA can now be set application wide by calling
Nimbus.setCOPPA(true) - Renderers can be installed using
Renderer.install() - The exoplayer and okhttp extensions install and configure themselves automatically if included in the build.
- DemandProviders can be added by calling
DemandProvider.install() - The BidRequest object can be modified in place by accessing the bid object on the NimbusRequest class.
0.1.6
Behavior Changes
- Changed WebView to raster off screen always
- Remove user interaction block on webview when static ad starts
0.1.3
New Features
- Added ExoPlayerVideoPlayerProvider for using an SDK controlled ExoPlayer instance
0.1.2
New Features
- Added WebViewProvider interface for configuring creation of WebViews for the StaticAdProvider
Breaking Changes from 0.1.0
- Changed parameters of 2nd NimbusSdk.initialize() method. It is now
/*
* Initialize the Nimbus SDK
*
* @param app - {@linkplain AndroidApp} application information
* @param requestProvider - {@linkplain RequestProvider} network request provider
* @param webViewProvider - {@linkplain WebViewProvider} base url for webview ads
* @param playerProvider - {@linkplain VideoPlayerProvider} provider for custom IMA SDK video player
*/
static void initialize(AndroidApp app, RequestProvider requestProvider, WebViewProvider webViewProvider,
VideoPlayerProvider playerProvider);
0.1.0
Breaking Changes from < 0.1.0
- BidRequest object now must be instantiated; this can be done by calling
BidRequest.withContext(context)