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
Banner Example (Compose)
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]