Skip to main content

Examples

Complete working examples for all ad formats in Kotlin, Java, and Jetpack Compose.


📒 Full Banner Example (Kotlin)

Complete implementation showing SDK initialization and banner ad loading:

class MainActivity : AppCompatActivity(), BannerListener {

private lateinit var bannerView: OcmBannerView
private lateinit var loadButton: Button
private lateinit var eventLog: TextView

private val isGdpr = false

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

bannerView = findViewById(R.id.banner)
loadButton = findViewById(R.id.btnLoadAd)
eventLog = findViewById(R.id.eventLog)

val config = OcmConfigBuilder()
.adUnit(
id = "1001-sreq-test-300x250-imp-1",
format = "banner",
size = "300x250",
position = "bottom",
refresh = 30
)
.gam(
networkCode = "75351959",
adUnitPath = "/75351959/testadunit/test_app_320x50"
)
.privacyFromSdk(
gdpr = if (isGdpr) 1 else 0,
ccpa = "",
coppa = 0
)
.build()

lifecycleScope.launch {
OcmAdNetworkSDK.initializeWithConfig(
context = this@MainActivity,
config = config
) { result ->
result.onSuccess {
loadButton.setOnClickListener {
bannerView.load(
configId = "1001-sreq-test-300x250-imp-1",
listener = this@MainActivity
)
}
}
result.onFailure {
Log.e("AdNetworkSDK", "SDK init failed", it)
}
}
}
}

override fun onAdLoaded() {
Log.d("AdNetworkSDK", "Ad loaded")
eventLog.append("✅ Ad loaded\n")
}

override fun onAdFailed(error: Throwable) {
Log.e("AdNetworkSDK", "Ad failed", error)
eventLog.append("❌ Ad failed: ${error.message}\n")
}

override fun onAdClicked() {
Log.d("AdNetworkSDK", "Ad clicked")
eventLog.append("👆 Ad clicked\n")
}

override fun onImpression() {
Log.d("AdNetworkSDK", "Impression")
eventLog.append("📊 Impression tracked\n")
}
}

Layout (activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp">

<Button
android:id="@+id/btnLoadAd"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Load Banner Ad" />

<com.orangeclickmedia.adnetwork.banner.OcmBannerView
android:id="@+id/banner"
android:layout_width="300dp"
android:layout_height="250dp"
android:layout_gravity="center"
android:layout_marginTop="16dp"
android:background="#E0E0E0" />

<TextView
android:id="@+id/eventLog"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:layout_marginTop="16dp"
android:padding="8dp"
android:background="#F5F5F5"
android:textSize="12sp" />

</LinearLayout>

📒 Full Banner Example (Java)

public class MainActivity extends AppCompatActivity implements BannerListener {

private OcmBannerView bannerView;
private Button loadButton;
private TextView eventLog;

private final boolean isGdpr = false;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

bannerView = findViewById(R.id.banner);
loadButton = findViewById(R.id.btnLoadAd);
eventLog = findViewById(R.id.eventLog);

OcmConfig config = new OcmConfigBuilder()
.adUnit(
"1001-sreq-test-300x250-imp-1",
"banner",
"300x250",
"bottom",
30
)
.gam(
"75351959",
"/75351959/testadunit/test_app_320x50"
)
.privacyFromSdk(
isGdpr ? 1 : 0,
"",
0
)
.build();

OcmAdNetworkSDK.initializeWithConfigJava(
this,
config,
"20086",
() -> {
loadButton.setOnClickListener(v -> {
bannerView.load(
"1001-sreq-test-300x250-imp-1",
this
);
});
},
error -> {
Log.e("AdNetworkSDK", "SDK init failed", error);
}
);
}

@Override
public void onAdLoaded() {
Log.d("AdNetworkSDK", "Ad loaded");
eventLog.append("✅ Ad loaded\n");
}

@Override
public void onAdFailed(Throwable error) {
Log.e("AdNetworkSDK", "Ad failed", error);
eventLog.append("❌ Ad failed: " + error.getMessage() + "\n");
}

@Override
public void onAdClicked() {
Log.d("AdNetworkSDK", "Ad clicked");
eventLog.append("👆 Ad clicked\n");
}

@Override
public void onImpression() {
Log.d("AdNetworkSDK", "Impression");
eventLog.append("📊 Impression tracked\n");
}
}

🧩 Jetpack Compose Integration

class MainActivity : ComponentActivity(), BannerListener {

private val scope = MainScope()
private val isGdpr = false
private val bannerConfigId = "1001-sreq-test-300x250-imp-1"
private lateinit var bannerView: OcmBannerView
private val eventLog = mutableStateListOf<String>()

private fun logEvent(text: String) {
eventLog.add("• $text")
}

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

val config = OcmConfigBuilder()
.adUnit(
id = bannerConfigId,
format = "banner",
size = "300x250",
position = "bottom",
refresh = 30
)
.gam(
networkCode = "75351959",
adUnitPath = "/75351959/testadunit/test_app_320x50"
)
.privacyFromSdk(
gdpr = if (isGdpr) 1 else 0,
ccpa = "",
coppa = 0
)
.build()

scope.launch {
OcmAdNetworkSDK.initializeWithConfig(
context = this@MainActivity,
config = config
) { result ->
result.onSuccess {
setContent {
MaterialTheme {
BannerAdScreen()
}
}
}
result.onFailure {
logEvent("❌ SDK init failed: ${it.message}")
}
}
}
}

@Composable
fun BannerAdScreen() {
var bannerLoaded by remember { mutableStateOf(false) }

Column(
modifier = Modifier
.fillMaxSize()
.padding(16.dp),
verticalArrangement = Arrangement.spacedBy(16.dp)
) {
Button(onClick = {
bannerView.load(
configId = bannerConfigId,
listener = this@MainActivity
)
bannerLoaded = true
logEvent("🔄 Load Banner triggered")
}) {
Text("Load Banner Ad")
}

AndroidView(
modifier = Modifier
.fillMaxWidth()
.height(250.dp),
factory = { context ->
OcmBannerView(context).also {
bannerView = it
}
}
)

Divider()

Text("📋 Event Log:", style = MaterialTheme.typography.titleMedium)

Column(
modifier = Modifier
.fillMaxWidth()
.weight(1f)
.verticalScroll(rememberScrollState())
.padding(top = 8.dp)
) {
eventLog.forEach { line ->
Text(text = line, style = MaterialTheme.typography.bodySmall)
}
}
}
}

// BannerListener callbacks
override fun onAdLoaded() {
logEvent("✅ Ad loaded")
}

override fun onAdFailed(error: Throwable) {
logEvent("❌ Ad failed: ${error.localizedMessage}")
}

override fun onAdClicked() {
logEvent("👆 Ad clicked")
}

override fun onImpression() {
logEvent("📊 Impression tracked")
}
}

🏆 Rewarded Ad Example

Kotlin

class RewardedActivity : AppCompatActivity() {

private lateinit var rewardedLoader: OcmRewardedLoader

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_rewarded)

rewardedLoader = OcmRewardedLoader(
adUnitId = "ca-app-pub-3940256099942544/5224354917",
listener = object : OcmRewardedListener {
override fun onRewardedAdLoaded() {
Log.d("SDK", "✅ Rewarded Ad Loaded")
findViewById<Button>(R.id.btnShowRewarded).isEnabled = true
}

override fun onRewardedAdFailedToLoad(code: Int, message: String) {
Log.e("SDK", "❌ Failed to Load: $code $message")
}

override fun onRewardedAdShowFailed(code: Int, message: String) {
Log.e("SDK", "❌ Show Failed: $code $message")
}

override fun onRewardedAdDisplayed() {
Log.d("SDK", "▶️ Ad Displayed")
}

override fun onRewardedAdDismissed() {
Log.d("SDK", "❌ Ad Dismissed")
// Preload next ad
rewardedLoader.load(this@RewardedActivity)
}

override fun onRewardedUserEarnedReward(result: RewardedResult) {
Log.d("SDK", "🏆 Reward: ${result.rewardAmount} ${result.rewardType}")
// Grant reward to user
grantUserReward(result)
}
}
)

// Load the ad
rewardedLoader.load(this)

findViewById<Button>(R.id.btnShowRewarded).setOnClickListener {
rewardedLoader.show(this)
}
}

private fun grantUserReward(result: RewardedResult) {
// Implement your reward logic here
Toast.makeText(
this,
"You earned ${result.rewardAmount} ${result.rewardType}!",
Toast.LENGTH_SHORT
).show()
}
}

Java

public class RewardedActivity extends AppCompatActivity {

private OcmRewardedLoader rewardedLoader;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_rewarded);

rewardedLoader = new OcmRewardedLoader(
"ca-app-pub-3940256099942544/5224354917",
new OcmRewardedListener() {
@Override
public void onRewardedAdLoaded() {
Log.d("SDK", "✅ Rewarded Ad Loaded");
findViewById(R.id.btnShowRewarded).setEnabled(true);
}

@Override
public void onRewardedAdFailedToLoad(int code, String message) {
Log.e("SDK", "❌ Failed to Load: " + code + " " + message);
}

@Override
public void onRewardedAdShowFailed(int code, String message) {
Log.e("SDK", "❌ Show Failed: " + code + " " + message);
}

@Override
public void onRewardedAdDisplayed() {
Log.d("SDK", "▶️ Ad Displayed");
}

@Override
public void onRewardedAdDismissed() {
Log.d("SDK", "❌ Ad Dismissed");
// Preload next ad
rewardedLoader.load(RewardedActivity.this);
}

@Override
public void onRewardedUserEarnedReward(RewardedResult result) {
Log.d("SDK", "🏆 Reward: " + result.getRewardAmount() + " " + result.getRewardType());
grantUserReward(result);
}
}
);

// Load the ad
rewardedLoader.load(this);

findViewById(R.id.btnShowRewarded).setOnClickListener(v -> {
rewardedLoader.show(this);
});
}

private void grantUserReward(RewardedResult result) {
Toast.makeText(
this,
"You earned " + result.getRewardAmount() + " " + result.getRewardType() + "!",
Toast.LENGTH_SHORT
).show();
}
}

🎬 Interstitial Ad Example

Kotlin

class InterstitialActivity : AppCompatActivity() {

private lateinit var interstitialLoader: OcmInterstitialLoader

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_interstitial)

lifecycleScope.launch {
OcmAdNetworkSDK.initialize(this@InterstitialActivity, "test_pub_001") { result ->
result.onSuccess {
setupInterstitial()
}
result.onFailure {
Log.e("SDK", "Init failed", it)
}
}
}
}

private fun setupInterstitial() {
interstitialLoader = OcmInterstitialLoader(
context = this,
prebidConfigId = "1001-sreq-test-inters",
gamAdUnitId = "75351959/testadunit/test_app_interstitial",
listener = object : OcmInterstitialListener {
override fun onInterstitialLoaded() {
Log.d("SDK", "✅ Interstitial Loaded")
findViewById<Button>(R.id.btnShowInterstitial).isEnabled = true
}

override fun onInterstitialFailedToLoad(error: String) {
Log.e("SDK", "❌ Failed: $error")
}

override fun onInterstitialShown() {
Log.d("SDK", "▶️ Interstitial Shown")
}

override fun onInterstitialClosed() {
Log.d("SDK", "✖️ Interstitial Closed")
// Reload ad for next time
interstitialLoader.loadAd()
}

override fun onInterstitialClicked() {
Log.d("SDK", "👆 Interstitial Clicked")
}
}
).apply {
setFetchTimeout(5000)
loadAd()
}

findViewById<Button>(R.id.btnShowInterstitial).setOnClickListener {
if (interstitialLoader.isAdReady()) {
interstitialLoader.show(this)
} else {
Toast.makeText(this, "Ad not ready yet", Toast.LENGTH_SHORT).show()
}
}
}
}

📱 Native Ad Example

Kotlin

class NativeAdActivity : AppCompatActivity() {

private lateinit var nativeLoader: OcmNativeAdLoader

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_native)

nativeLoader = OcmNativeAdLoader(
this,
"ca-app-pub-3940256099942544/2247696110",
object : OcmNativeAdListener {
override fun onAdLoaded(ad: OcmNativeAd) {
val nativeView = OcmNativeAdViewFactory.create(this@NativeAdActivity, ad)
val adContainer: FrameLayout = findViewById(R.id.nativeAdContainer)
adContainer.removeAllViews()
adContainer.addView(nativeView)

Log.d("SDK", "✅ Native Ad Loaded")
}

override fun onAdFailed(error: String) {
Log.e("SDK", "❌ Native Ad Failed: $error")
}
}
)

findViewById<Button>(R.id.btnLoadNative).setOnClickListener {
nativeLoader.load()
}
}
}

Java

public class NativeAdActivity extends AppCompatActivity {

private OcmNativeAdLoader nativeLoader;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_native);

nativeLoader = new OcmNativeAdLoader(
this,
"ca-app-pub-3940256099942544/2247696110",
new OcmNativeAdListener() {
@Override
public void onAdLoaded(OcmNativeAd ad) {
View nativeView = OcmNativeAdViewFactory.create(NativeAdActivity.this, ad);
FrameLayout adContainer = findViewById(R.id.nativeAdContainer);
adContainer.removeAllViews();
adContainer.addView(nativeView);

Log.d("SDK", "✅ Native Ad Loaded");
}

@Override
public void onAdFailed(String error) {
Log.e("SDK", "❌ Native Ad Failed: " + error);
}
}
);

findViewById(R.id.btnLoadNative).setOnClickListener(v -> {
nativeLoader.load();
});
}
}

Best Practices

1. Initialize Early

Initialize the SDK in your Application class:

class MyApplication : Application() {
override fun onCreate() {
super.onCreate()

lifecycleScope.launch {
OcmAdNetworkSDK.initialize(this@MyApplication, "your-config-id") { result ->
result.onSuccess {
Log.d("App", "SDK initialized")
}
}
}
}
}

2. Preload Ads

For better user experience, preload ads before showing them:

// In onCreate or onResume
interstitialLoader.loadAd()

// Later, when needed
if (interstitialLoader.isAdReady()) {
interstitialLoader.show(this)
}

3. Handle Lifecycle

Properly manage ad lifecycles with Activity/Fragment lifecycles:

override fun onPause() {
super.onPause()
bannerView.pause()
}

override fun onResume() {
super.onResume()
bannerView.resume()
}

override fun onDestroy() {
super.onDestroy()
bannerView.destroy()
}

4. Error Handling

Always implement error listeners:

override fun onAdFailed(error: Throwable) {
Log.e("SDK", "Ad failed: ${error.message}")
// Show fallback content or retry
}

🛠️ Upcoming Features

  • Remote config fetch
  • React Native wrapper
  • Flutter plugin
  • UI Customization options

📞 Support

For support and documentation, contact us at [email protected]