Panduan ini ditujukan bagi penayang yang tertarik untuk memuat iklan audio ke aplikasi Android mereka.
Prasyarat
- IMA Android SDK v. 3.16.1 atau yang lebih baru.
Sebaiknya penayang melihat Contoh Pemutar Audio di github sebagai titik awal jika saat ini mereka tidak memiliki aplikasi pemutar audio. Contoh ini menggunakan ExoPlayer sebagai pemutar latar depan. Bagian lainnya dalam panduan ini akan menjelaskan fitur yang diperlukan untuk pemutaran audio latar belakang iklan IMA.
Menambahkan pemutaran iklan latar belakang ke aplikasi
Agar pemutaran musik dan iklan audio berlanjut saat aplikasi dalam mode latar belakang,
Anda dapat membuat komponen
Service
yang berisi
pemutar audio kustom dan loader iklan.
Jika aplikasi Anda memiliki MainActivity
dan AudioPlayerService
untuk pemutaran audio,
Anda dapat mengubah file AndroidManifest.xml
seperti yang ditunjukkan di bawah ini:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="…">
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
<application … >
<activity android:name=".MainActivity" android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<service android:name=".AudioPlayerService"
android:exported="false"/>
</application>
</manifest>
Dalam layanan ini, Anda dapat membuat pemutar audio kustom, yang dapat berupa pemutar
media apa pun selama pemutar tersebut juga menerapkan antarmuka VideoAdPlayer
untuk
berinteraksi dengan IMA
SDK.
IMA SDK v. 3.16.1 menambahkan fungsi baru,
createAudioAdDisplayContainer
,
untuk membuat penampung khusus bagi loader iklan untuk meminta iklan audio.
Cuplikan kode berikut menunjukkan contoh AudioPlayerService
untuk
melakukan inisialisasi dan membuat permintaan iklan audio.
import android.app.Service;
import com.google.ads.interactivemedia.v3.api.AdDisplayContainer;
import com.google.ads.interactivemedia.v3.api.AdsLoader;
import com.google.ads.interactivemedia.v3.api.AdsRequest;
import com.google.ads.interactivemedia.v3.api.CompanionAdSlot;
import com.google.ads.interactivemedia.v3.api.ImaSdkFactory;
import com.google.ads.interactivemedia.v3.api.ImaSdkSettings;
import com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer;
import com.google.common.collect.ImmutableList;
/** Plays music and ads even when the app enters background mode. */
public class AudioPlayerService extends Service {
/**
* A custom audio player that implements the `VideoAdPlayer` interface.
*/
private VideoAdPlayer audioPlayer;
/**
* An object to create other SDK objects: `AdDisplayContainer`, `AdsLoader` and `AdRequest`.
*/
private ImaSdkFactory sdkFactory;
/**
* An object to make ad requests that would return an `AdsManager`.
*/
private AdsLoader adsLoader;
/**
* An optional list of ViewGroup for rendering companion banners.
*/
private ImmutableList<CompanionAdSlot> companionAdSlots;
/**
* Creates an AdsLoader for requesting ads and handling ad events.
*/
public void initializeAds() {
sdkFactory = ImaSdkFactory.getInstance();
ImaSdkSettings imaSdkSettings = ImaSdkFactory.getInstance().createImaSdkSettings();
AdDisplayContainer container = ImaSdkFactory.createAudioAdDisplayContainer(this, audioPlayer);
if (companionAdSlots != null) {
container.setCompanionSlots(companionAdSlots);
}
adsLoader = sdkFactory.createAdsLoader(this, imaSdkSettings, container);
// Adds event handling logic for ads.
// For more details, see
// https://developers.google.com/interactive-media-ads/docs/sdks/android#create-an-adsloader
adsLoader.addAdsLoadedListener(…);
adsLoader.addAdErrorListener(…);
}
/**
* Adds a companion ad slot. This slot is not required but can be set in ads initialization.
*
* @param companionAdSlot UI container for rendering companion banners.
*/
public void addCompanionAdSlot(CompanionAdSlot companionAdSlot) {
this.companionAdSlots = ImmutableList.of(companionAdSlot);
}
/**
* Makes an audio ad request.
*
* @param adTagUrl Url to download an ad tag.
*/
public void requestAd(String adTagUrl) {
AdsRequest request = sdkFactory.createAdsRequest();
request.setAdTagUrl(adTagUrl);
adsLoader.requestAds(request);
}
...
}
Menggunakan iklan dengan slot iklan pendamping
Anda dapat melakukan inisialisasi iklan dengan atau tanpa slot iklan pengiring. Jika memilih untuk
merender iklan pendamping, Anda harus memberikan akses
AudioPlayerService
ke class MainActivity
melalui binder layanan seperti
yang ditunjukkan di bawah:
import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
import androidx.annotation.Nullable;
...
/** Plays music and ads even when the app enters background mode. */
public class AudioPlayerService extends Service {
...
@Nullable
@Override
public IBinder onBind(Intent intent) {
return new ServiceBinder(this);
}
/**
* Provides access to the `AudioPlayerService` instance after binding.
*/
public class ServiceBinder extends Binder {
private final AudioPlayerService boundService;
/**
* @param service The bound instance of the service
*/
public ServiceBinder(AudioPlayerService service) {
boundService = service;
}
public AudioPlayerService getBoundService() {
return boundService;
}
}
}
Anda dapat memanggil fungsi addCompanionAdSlot()
dan meneruskan penampung UI untuk merender iklan banner pengiring saat Anda melakukan inisialisasi iklan dari class MainActivity
.
import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.view.ViewGroup;
import com.google.ads.interactivemedia.v3.api.CompanionAdSlot;
import com.google.ads.interactivemedia.v3.api.ImaSdkFactory;
public class MainActivity extends Activity {
private AudioPlayerService boundService;
private ServiceConnection connection;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);
ImaSdkFactory sdkFactory = ImaSdkFactory.getInstance();
ViewGroup companionView = findViewById(R.id.companionAdSlotFrame);
final CompanionAdSlot companionAdSlot = sdkFactory.createCompanionAdSlot();
companionAdSlot.setContainer(companionView);
companionAdSlot.setSize(640, 640);
connection =
new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder binder) {
boundService = ((AudioPlayerService.ServiceBinder) binder).getBoundService();
boundService.addCompanionAdSlot(companionAdSlot);
boundService.initializeAds();
}
...
};
...
bindService(intent, connection, Context.BIND_AUTO_CREATE);
}
...
}
Anda dapat membandingkan implementasi Anda dengan Contoh Pemutar Audio jika mengalami masalah. Untuk pertanyaan lebih lanjut tentang pemutaran iklan audio latar belakang, hubungi forum IMA SDK untuk mendapatkan dukungan.