The Android Pulse SDK is now available through the JitPack package repository. Just add it to your list of dependencies.
// Example implementation 'com.github.INVIDITechnologies:pulse-sdk-android-release:2.6.23.6.0'
Maintenance release.
Added support for "[TIMESTAMP]" macro, where the macro is replaced with the date and time using the formatting conventions of ISO 8601.
Maintenance Release.
Gradle version has been upgraded from 6.3 to 7.5.
`targetSdkVersion` and `compileSdkVersion` have been upgraded from API level 26 to 33.
The SDK no longer throws an error when receiving non-linear ads, it just ignores them.
Maintenance release.
Upgraded the Open Measurement SDK to version 1.3.30.
Changed how the Open Measurement SDK is embedded into the Pulse SDK to avoid build errors when using newer gradle versions.
Maintenance release.
Added support for tracking the ViewUndetermined event. This event will be tracked in cases where the SDK is unable to measure viewability on an ad.
StartAdTimeout parameter from ticket inline extensions node can now be parsed by the SDK
Added support for tracking ViewableImpression events. This feature needs to be enabled for your Pulse account and requires you to create an OmidAdSession for each ad. Contact your Account Manager if you want to use this feature.
Below attributes can now be parsed by the SDK:
Fixed a bug where Pulse Android SDK was crashing because Open Measurement SDK (OM SDK) classes were not accessible via Android Pulse framework.
Integrated Open Measurement SDK (OM SDK) version 1.3.13 with Pulse Android SDK. Previously, OM SDK version 1.2.22 was integrated. See Open Measurement Guide to know how to use OM SDK integration. For a more detailed sample, please refer to the sample integration. Following APIs have been updated:
Changed how obfuscation of class and package names is done, to avoid possible name clashes for clients using several different frameworks.
Fixed issue where `preloadNextAd` got triggered in some cases, even though the feature was disabled.
Preload next ad is now supported, enabling you to preload the second ad and any subsequent ads in an ad break. The first ad in an ad break cannot be preloaded.
To preload next ad, implement PulseSessionListener.preloadNextAd(PulseVideoAd ad) method. When PulseVideoAd.adPositionChanged() is called, SDK will trigger `preloadNextAd` if all of the conditions below are fulfilled:
Preload next ad feature is enabled for your Pulse account. Contact your Account Manager if you want to use this feature.
There are more ads to be played in the current ad break.
Time to preload next ad has been reached. This means that the remaining duration of current ad is less than or equal to what has been configured for preloading next ad.
preloadNextAd has not already been triggered for the ad.
Updated OM SDK specific "loaded" event to be triggered just before Impression tracking.
Java compatibility version upgraded to java 8.
Fixed a bug, where OM SDK specific "VerificationNotExecuted" event was tracked, only if tracking url have macro "[REASON]".
Fixed a bug, where all remaining quartiles were not tracked on PulseVideoAd.adFinished(), if given creative duration in vast response is not correct.
Integrated Open Measurement SDK (OM SDK) version 1.2.22 with Pulse Android SDK. See Open Measurement Guide to know how to use OM SDK integration. For a more detailed sample, please refer to the sample integration. Following new methods have been added:
createOmidAdSession can be used to create and start the OMID ad session for each ad. This method should be called for each ad just before playing ad content otherwise ad session events will not be recorded. This notifies all involved measurement providers that the OMID ad session has started and ad view tracking will begin.
Additional methods are available at OmidAdSession but have no effect if called after the OMID ad session has finished.
PulseVideoAd.playerStateChanged() notify all video listeners that the native video player state has changed.
PulseVideoAd.volumeChanged() notify all video listeners that the native video player volume has changed.
vendor data type has been changed from java.net.URL to java.lang.String to follow VAST4.1 standard.
NOTE: Minimum Android SDK API Level increased to 14 (Android 4.0.1).
New timeout parameters, are available in the RequestSettings, allows you to override:
The Core SDK has been removed from version 2.5.17.20.0 and Ooyala will no longer provide any support for the Core SDK from April 3rd, 2018. This means that:
As a result of deprecating the Core SDK, changes were made to the Pulse SDK. All classes and Enums are now moved from the com.ooyala.adtech package to the com.ooyala.pulse package.
To move away from the Core SDK and start using the Pulse SDK instead, use the following tutorial.
You can now log debug messages to the console by setting Pulse.logDebugMessages to true. Debugging is turned off by default.
The Core SDK is deprecated from version 2.4.17.14.0 and will be removed completely in version 2.5.17.20.0, to be released on October 3rd, 2017. This means that:
The following classes were moved from the com.ooyala.adtech package to the com.ooyala.pulse package:
When you upgrade the SDK in your Pulse SDK integration, then you must update the import statements in the files where any of the listed classes are used. For example:
import com.ooyala.adtech.LogListener;
would change to:
import com.ooyala.pulse.LogListener;
An ad without clickThrough URL can now be parsed by the SDK.
Full passback support in the Pulse SDK: Previously, if an ad failed to be shown and the adFailed method was invoked, the Pulse SDK would proceed to the next ad in the ad break, or instruct to play the content. From this version, if you enable the passback functionality in your account through the Pulse UI, a passback ad is provided if an ad failed to show and a passback ad is available.
RequestSettings.setEnforceCachebusting allows you to disable addition of a randomized cache busting parameter to VAST 2.0 tracking URLs, which do not include the "[CACHEBUSTING]" macro.
RequestSettings.disableAssetFiltering allows you to indicate whether all the media files/assets for an ad should be returned or they should be filtered out based on the user agent.
PulseVideoAd.getCompanions() allows you to retrieve the companion ads directly from the PulseVideoAd. Bear in mind that only companion banners with the resources of type StaticResource are returned.
Fixed the VAST parser to parse the third party ticket with empty tags correctly.
Third party VAST4 tickets can now be parsed by the SDK.
Ad.getCandidateNum() allows you to retrieve the candidate ad number in the passback chain.
The application parameters, required for RTB (Real-time bidding), have been added to RequestSettings. Contact your DSP to determine which parameters should be sent.
The ad skipped event is now tracked when a user skips a paused ad.
The tracking urls can now be reached using the getTrackingUrl method of TrackingEvents in the Core SDK.
Session extension: new method extendSession on the Pulse session object. Session extension can be used to dynamically add new ads in a session. An instance of PulseSessionExtensionListener should be implemented to receive the onComplete callback upon session extension completion.
//This call can be done anytime while the content is playing //Let's add a midroll at 50 seconds playback myRequestSetting.setLinearPlaybackPositions(Collections.singletonList(50f)); myRequestSetting.setInsertionPointFilter(Arrays.asList(RequestSettings.InsertionPointType.PLAYBACK_POSITION)); pulseSession.extendSession(myContentMetadata, myRequestSetting, new PulseSessionExtensionListener() { @Override public void onComplete() { Log.i("Pulse Demo Player", "Session was successfully extended. There are now midroll ads at 50th second."); } });For a more detailed sample, please refer to the sample integration.
Fixed a bug where timeSpent was tracked in milliseconds when calling adSkipped.
Pause ads are now supported by the high level portion of the SDK. To display pause ads, implement PulseSessionListener.showPauseAd(PulsePauseAd ad). When your content is paused by the user, call PulseSession.contentPaused(), which will trigger the call to `showPauseAd` if there is a pause ad available, and when resumed, call PulseSession.contentStarted(). For a more detailed sample, please refer to the sample integration.
The Core SDK now supports non linear Ad formats like overlay ads, pause ads and companion banners.
AdRequester.requestSessionExtension() allows you to extend existing sessions with additional ads.
LinearCreative.getLastCompletion() now accounts for server/client time differences.
PulseSession.stopSession() will no longer cause a NullPointerException.
Ad.getTitle() allows you to retrieve the title of the ad, as configured in Pulse or provided by a third party.
PulseVideoAd.adSkipped() allows you to indicate that the user activated a close or skip button for the currently playing ad. Use PulseVideoAd.isSkippable() and PulseVideoAd.getSkipOffset() to determine whether and when to display a skip button.
// Let currentPlaybackPosition be the video player's position in seconds for the currently playing ad if(currentAd.isSkippable() && currentAd.getSkipOffset() <= currentPlaybackPosition) { // Show skip button, call currentAd.adSkipped() if activated }
MediaFile.getURL() changed to MediaFile.getURI(), in order to allow arbitrary protocols.
PulseSessionListener.startAdBreak() now takes a PulseAdBreak object, which provides some information on the currently active ad break.
public void startAdBreak(PulseAdBreak adBreak) { this.currentAdBreak = adBreak; ... }
Removed unnecessary assets from library.
Fixed parsing of skipOffset.
Reporting of timeSpent now correctly uses seconds.
Fixed event flow when content metadata or request settings does not validate.
Ooyala Pulse API for Android. New, higher level, event-based API for easy integration with Pulse.
TIME_SINCE_LINEAR condition type. Required to implement frequency capping of served ads.