Skip to main content

Migration Guide from Outbrain SDK to Teads Unified SDK

The standalone Outbrain SDK is deprecated. This guide covers the move to the Teads SDK; widget IDs and installation keys stay the same.

Overview of Changes​

What's Changing​

AspectOutbrain SDKTeads Unified SDK
SDK NameOutbrainSDKTeadsSDK
Import Statementimport OutbrainSDKimport TeadsSDK
InitializationOutbrain.initializeOutbrain()Teads.configure(applicationContext: Context, appKey: String)
Widget ClassSFWebViewWidget / SFWebViewWidgetPollingTeadsAdPlacementFeed
RecommendationsOBRequestTeadsAdPlacementRecommendations
ConfigurationBuilder patternConfiguration objects

What's Preserved​

✅ All widget functionality
✅ Content recommendation algorithms
✅ Viewability tracking
✅ User personalization
✅ Dark mode support
✅ Event tracking

What's New​

🎁 Access to the Media format
🎁 Unified event system
🎁 Improved performance
🎁 Enhanced privacy controls

Step-by-Step Migration​

Step 1: Update Dependencies​

project/build.gradle

repositories {
maven { url "https://teads.jfrog.io/artifactory/SDKAndroid-maven-prod" }
maven {
// Mandatory for Huawei device compatibility
url "https://developer.huawei.com/repo/"
}
}

app/build.gradle

dependencies {
// Remove legacy dependency
// implementation "com.outbrain.mobile:obsdk:${version}

// Add new Teads SDK
implementation("tv.teads.sdk.android:sdk:6.2.3@aar") {
transitive = true
}
}

Manual Installation

Maven repository link

  1. Download the latest TeadsSDK .aar file
  2. Copy it to your app's libs folder
  3. Add to your build.gradle:
dependencies {
implementation files('libs/sdk-6.2.3.aar') {
transitive = true
}
}

Step 2: Update Imports​

Replace all Outbrain imports with Teads:

// Before
import com.outbrain.*

// After
import tv.teads.sdk.*

Step 3: Update SDK Initialization​

Before (Outbrain SDK)​

// App initialization
Outbrain.register(applicationContext, "YOUR_PARTNER_KEY")

// Configuration for testing builds
if (BuildConfig.DEBUG) {
Outbrain.setTestMode(true)
Outbrain.testLocation("us") // Optional: Test specific geolocations
}

After (Teads Unified SDK)​

// App initialization
TeadsSDK.configure(applicationContext, "YOUR_PARTNER_KEY")

// Configuration for testing builds
if (BuildConfig.DEBUG) {
TeadsSDK.testMode = true
TeadsSDK.testLocation = "us" // Optional: Test specific geolocations
}

Step 4: Migrate Widget Implementation​

The widget functionality is now provided through TeadsAdPlacementFeed.

Before (Outbrain SDK)​

import android.content.res.Configuration
import android.os.Bundle
import android.os.Handler
import android.util.Log
import android.view.ViewGroup
import android.widget.ScrollView
import androidx.annotation.NonNull
import androidx.appcompat.app.AppCompatActivity
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
import com.outbrain.OBSDK.SFWebView.SFWebViewClickListener
import com.outbrain.OBSDK.SFWebView.SFWebViewHeightDelegate
import com.outbrain.OBSDK.SFWebView.SFWebViewWidget
import com.outbrain.catalog.databinding.ActivitySfwidgetScrollviewBinding

class SFWebViewScrollViewActivity : AppCompatActivity(), SFWebViewClickListener {

private val LOG_TAG = "SFWebViewScrollActivity"
private lateinit var binding: ActivitySfwidgetScrollviewBinding
private lateinit var sfWidget: SFWebViewWidget

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivitySfwidgetScrollviewBinding.inflate(layoutInflater)
setContentView(binding.root)

// Initialize widget
sfWidget = SFWebViewWidget(
binding.adScrollView,
"http://mobile-demo.outbrain.com",
"MB_2", // Widget ID
0, // Widget Index
"NANOWDGT01", // Installation Key
this, // SFWebViewClickListener
false // Dark Mode
)

// Add widget to layout
binding.adContainerView.addView(sfWidget)

// Optional: Handle clicks on organic urls
sfWidget.setSfWebViewClickListener(this)

// Toggle dark mode at your convenience
sfWidget.toggleDarkMode(true)
}

override fun onConfigurationChanged(newConfig: Configuration) {
super.onConfigurationChanged(newConfig)
sfWidget.onActivityConfigurationChanged()
}

override fun onOrganicClick(url: String) {
// Programmatically open browser with the url
}
}

After (Teads Unified SDK)​

OutbrainTeads
SFWebViewWidgetTeadsAdPlacementFeed

Keep the same widget ID, installation key, article URL, and index. Store feedPlacement as an Activity property, not a local variable, so onConfigurationChanged can reach it.

private lateinit var feedPlacement: TeadsAdPlacementFeed

// In onCreate:
val config = TeadsAdPlacementFeedConfig(
articleUrl = Uri.parse("http://mobile-demo.outbrain.com"),
widgetId = "MB_2",
installationKey = "NANOWDGT01",
widgetIndex = 0,
darkMode = false
)
feedPlacement = TeadsAdPlacementFeed(this, config, this)
binding.adContainerView.addView(feedPlacement.loadAd())

// In onConfigurationChanged:
feedPlacement.onActivityConfigurationChanged()

Step 5: Migrate Recommendations API​

Before (Outbrain SDK)​

import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.outbrain.OBSDK.Entities.OBRecommendationsResponse
import com.outbrain.OBSDK.FetchRecommendations.OBRequest
import com.outbrain.OBSDK.FetchRecommendations.RecommendationsListener
import com.outbrain.OBSDK.Outbrain
import com.outbrain.catalog.databinding.ActivityRecommendationsScrollviewBinding

class RecommendationsScrollViewActivity : AppCompatActivity(), RecommendationsListener {

private val LOG_TAG = "RecommendationsScrollViewActivity"
private lateinit var binding: ActivityRecommendationsScrollviewBinding
private lateinit var recommendationsList: ArrayList<OBRecommendation>

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityClassicWithImageBinding.inflate(layoutInflater)
setContentView(binding.root)

// Request recommendations
loadRecommendations()
}

private fun loadRecommendations() {
val request = OBRequest()
request.setWidgetId("SDK_1")
request.setUrl("http://mobile-demo.outbrain.com/2013/12/15/test-page-2")
request.setWidgetIndex(0)
Outbrain.fetchRecommendations(request, this)
}

override fun onOutbrainRecommendationsSuccess(recommendationsResponse: OBRecommendationsResponse) {
recommendationsResponse.all.forEach { recommendation ->
// Iterate recommendationsResponse list and inflate your views

// Configure viewability tracking
Outbrain.configureViewabilityPerListingFor(recommendationContainerView, recommendation)
}
}

override fun onOutbrainRecommendationsFailure(ex: Exception) {
// Failure callback
ex.printStackTrace()
}
}

After (Teads Unified SDK)​

OutbrainTeads
Outbrain.fetchRecommendationsTeadsAdPlacementRecommendations.loadAdSuspend()

loadAd is the callback equivalent. Keep the same widget ID. Viewability stays configureViewabilityPerListingFor.

Configurations migration map​

SDK top level configurations​

Legacy Outbrain.java MethodNew TeadsSDK.kt MethodNotes
register(Context, String)configure(Context, String)Renamed to keep parity with iOS implementation
SDKInitialized()isSDKConfigured()Renamed for better readability
setIronSourceIntegration()setIronSourceIntegration()Direct copy, same signature
setTestMode(boolean)testMode property setterConverted to property with setter
testLocation(String)testLocation property setterConverted to property with setter

TeadsAdPlacementFeed configurations​


Legacy Outbrain.java MethodNew TeadsAdPlacementFeed.kt MethodNotes
setDisplayTest(boolean)testDisplay field on TeadsAdPlacementFeedConfigCalled internally during Feed placement initialization based on TeadsAdPlacementFeedConfig
handleExploreMore(Activity, Runnable)handleExploreMore(Activity, Runnable)Static companion method, direct copy

TeadsAdPlacementRecommendations configurations​


Legacy Outbrain.java MethodNew TeadsAdPlacementRecommendations.kt MethodNotes
getUrl(OBRecommendation)getUrl(OBRecommendation)Static companion method, direct copy
getOutbrainAboutURL()getAdChoicesURL()Static companion method, direct copy
testRTB(boolean)setTestRTB(boolean)Static companion method, renamed for consistency
configureViewabilityPerListingFor(ViewGroup, OBRecommendation)configureViewabilityPerListingFor(ViewGroup, OBRecommendation)Static companion method, direct copy
configureViewabilityPerListingFor(OBFrameLayout, OBRecommendation)configureViewabilityPerListingFor(OBFrameLayout, OBRecommendation)Static companion method, direct copy

New Opportunities with Teads SDK​

Media and Media Native are available alongside Feed.

Common Questions​

Q: Will my existing Outbrain widgets stop working?​

A: No, but the legacy Outbrain SDK is being deprecated. However, migration to the Teads Unified SDK preserves all functionality with minimal code changes.

Q: Do I need to change my widget IDs or installation keys?​

A: No. All your existing Outbrain configuration parameters (widget IDs, installation keys, etc.) remain the same.

Q: Can I still use the same recommendations UI?​

A: Yes, you just need to comply with the new ad request using the placement TeadsAdPlacementRecommendations.

Q: Will my analytics and tracking continue to work?​

A: Yes. All existing analytics continue to work, and the new unified event system provides additional insights.

Q: Can I add Media format to my existing app?​

A: Yes. The unified SDK gives you access to Teads Media placements alongside your content recommendations, but this need to be arranged with your Publisher Manager.

Migration Checklist​

Pre-Migration​

  • Review current Outbrain SDK implementation
  • Identify all widgets and API usage
  • Plan migration timeline
  • Set up test environment

During Migration​

  • Update dependencies to Teads SDK v6.2.0. See Installation.
  • Replace imports throughout codebase
  • Update SDK initialization
  • Migrate widget implementations
  • Update event handling
  • Migrate recommendations API usage
  • Update dark mode handling
  • Update viewability handling for recommendations API usage
  • Test each migrated component

Post-Migration​

  • Remove Outbrain SDK dependency
  • Verify all features work correctly
  • Update documentation
  • Monitor performance metrics
  • Consider adding Media placements

Support and Resources​

Migration Support​

Next Steps​

  1. Learn about Privacy Compliance

We're here to help make your migration smooth and successful. Contact our support team with any questions.