Repository navigation
v0.6.0
-
New:
ChatMessagegains optionalidandcreatedAt, and both are sent
to Elo. The ad request carriesidas the message'smessage_idand
createdAt(ajava.time.Instant) as itstimestamp, so Elo knows when
each turn happened and can connect a turn to a Search API call that sends
the same id asX-Elo-Message-Id. Set them once, when the turn is created,
and reuse them on every request; aMessageRole.SUMMARYmessage should
carry the id and time of the turn it summarizes. An id longer than 256
Unicode code points or containing non-printable characters, and a time
before 2020 or more than a day ahead, are left out with a warning. Neither
affects the preload cache. The two-argument constructor is unchanged for
Kotlin and Java alike; Kotlin callers compiled against an earlier version
that useChatMessage.copyor destructure a message need to recompile,
because both now cover the new properties. -
New: report your own in-app browser. If you open ad clicks in your own
browser, callElo.trackBrowserOpened(ad)when it opens and
Elo.trackBrowserClosed(ad)when it closes. The SDK reports how long the
user stayed on the advertiser's page. Both events reach your debug observer
asEloTrackingEvent.BROWSER_OPENandBROWSER_CLOSE. -
New: the SDK reports where the ad was on screen when it became viewable.
Once an Elo-served ad has been at least 50% visible for one second,
EloAdViewposts one analytics event with the ad view's size and position
in the window, the window size, the visible fraction, and the time since
render, so Elo can verify that ads render in the SDK's own view. Nothing
about the surrounding app is sent. It reaches your debug observer as
EloTrackingEvent.VIEWABLE. -
New:
EloAdStyle.fontFamily. Draws the headline, description, CTA
label, and disclosure badge in your typeface. The SDK keeps its own sizes
and weights, so the ad's height does not change. -
New:
EloAdStyle.chromeandEloAdChrome.Bare. A bare ad draws no
background, border, or rounded clip, so it can sit inside your own chat row.
The card also drops its inner padding, apart from a 4dp top and end inset
for the "Ad" badge; the strip keeps its padding. The loading
placeholder follows the same setting. -
Change: the CTA label contrasts with a custom fill. When you set
callToActionBackgroundwithoutcallToActionForeground, the label is now
black or white, whichever reads better on your color as drawn over the card,
instead of the theme'sonPrimary. Renderer-backed fills receive the same
color. -
Change:
AdRenderOptionsgainschrome. AConfigurableAdRenderer
receivesEloAdChrome.Barealongside the transparent fill and zero border,
so it can also drop its corner clip and inner padding. -
Recompile against this version.
EloAdStyleandAdRenderOptionsgain
fields, which changes their constructors andcopymethods. Kotlin and Java
code compiled against an earlier version and calling them fails with
NoSuchMethodErroruntil it is rebuilt; source code needs no change. -
Breaking:
Elo.trackRender,Elo.trackImpression, andElo.trackClick
are removed.EloAdViewsends render, impression, and click tracking
itself; render ads withEloAdView(orEloKeyboardBannerAd).
EloAdListenercallbacks are unchanged. -
Breaking:
AdTrackerandEloAd.copyare no longer public. The public
EloAdconstructor drops itstrackerandonReleaseparameters and builds
a display-only ad that sends no events. -
New:
maxHeightandmaxWidthdescribe the ad slot, and the server picks
the format.Elo.loadAd,Elo.preloadAd, andEloAdView(messages = ...)
takemaxHeight: Dp?andmaxWidth: Dp?, bothnull(unbounded) by
default. The SDK sends them as the request'sdimensionsin whole dp, and
the ad arrives with the format that fits: the card, or the strip for a slot
shorter than 80dp.EloAdView(result = ...)andEloAdView(ad = ...)render
that format. The loading placeholder followsmaxHeight, and a preloaded ad
is only served to a load with the samemaxHeightandmaxWidth.
EloKeyboardBannerAdsends the strip's 76dp height. Kotlin callers compiled
against an earlier version need to recompile, because the default-argument
methods ofloadAdandpreloadAdchanged; Java callers keep the same
loadAdandpreloadAdmethods. -
Breaking:
EloAdLayout, everylayoutparameter, and
AdRenderOptions.layoutare removed. PassmaxHeight(andmaxWidth)
for the slot; the server chooses the format. -
Change: requests no longer send
display_position. The request's
dimensionsreplace it. -
New:
EloDebugEvent.AdOperationreports the slot and the ad's format.
It gainsformat,maxHeight,maxWidth,ctaEnabled,ctaVariant, and
tapInset, eachnullwhen it does not apply. -
Breaking: AdMob mediation and the client-side auction are removed. The
ad.elo:elo-android-mediation-admobadapter (last published as 0.1.4) is
no longer built or published, and the SDK no longer runs an auction: every
request goes straight to Elo's server. Elo is now a single demand source;
a publisher who also runs another network keeps the fallback in their own
code — request Elo first and, onNoFillorError, hand the slot to the
backup network. The README's "Falling back to another network" section
shows the pattern, including the two-request variant for chat UIs. What
changed on the public surface:- The
AdNetworkAdapter,AdBid,AdBidRequest,AdConsent,
AdAdapterError,AdMediator, andParallelAuctionMediatortypes are
removed, as isEloConfiguration.adapters. AdResult.Loadedis nowLoaded(ad, eCpm); thenetworkIdfield is
gone because every fill is Elo's.NoFillReason.AuctionTimeoutis renamedNoFillReason.Timeout(the
request did not complete within the SDK's deadline).NoBidsnow means
the server returned no ad, andNetworkErrormeans the request failed
with a transport or server error.- The
AuctionStarted,AdapterStartStarted,AdapterStartFinished,
AdapterStartFailed,AdapterOutcome, andAuctionFinisheddebug
events are removed, along withEloAdapterAuctionOutcome,
EloAuctionOutcome, andEloErrorCategory.Adapter.
EloAdLoadOutcome.Loadedcarries onlyeCpm, and
EloDebugEvent.ConfiguredreportsrequestTimeoutMsinstead of
adapterIdsandauctionTimeoutMs. - The hidden binary-compatibility constructor and
copyoverload that
EloAdkept for adapters built against 0.3.0 and earlier are removed.
- The
-
Breaking: the on-device diagnostics and mediation-debug snapshots are gone,
replaced by a debug event observer.Elo.diagnosticsSnapshot(),
Elo.mediationDebugSnapshot(), andElo.setRequestPayloadCaptureEnabled()
are removed, along with theEloDiagnosticsSnapshot,EloDiagnosticsEntry,
EloTrackingDiagnosticsEntry,EloTrackingTotals,EloIntegrationStatus,
EloMediationDebugSnapshot, andEloAuctionDebugOutcometypes.
Elo.setDebugObserver(observer, capturePayloads)replaces all of them: the
SDK reports eachEloDebugEventas it happens — load and preload outcomes,
and tracking attempts and their outcomes — and keeps no history of its own.
An app that wants a recent-loads list or tracking totals records the events
itself; the example app's Diagnostics tab shows how. With no observer
attached the SDK stores no load history, no tracking history, and no
request payloads.
PasscapturePayloads = trueto also receive the redacted request payload
and decoded ad response thatsetRequestPayloadCaptureEnabled(true)used to
enable. -
Breaking: the deprecated
Elo.initialize(...)is removed. It was sugar
overconfigureand has warned since 0.1.9. Use
Elo.configure(context, publisherId, adUnitId), or build an
EloConfigurationand callElo.configure(context, configuration)for
COPPA/TFUA,logLevelorbaseUrl. -
Breaking: the deprecated
EloAd.release()alias is removed. Call
releaseResources(), which it has forwarded to since the cross-platform
rename.