Bu kılavuz, Android uygulamalarına işitsel reklamlar yüklemek isteyen yayıncılar için hazırlanmıştır.
Ön koşullar
- IMA Android SDK'sı v. 3.16.1 veya sonraki bir sürümü.
Şu anda bir ses oynatıcı uygulaması olmayan yayıncıların başlangıç noktası olarak GitHub'daki Ses Oynatıcı Örneği'ne göz atmasını öneririz. Bu örnekte ön plandaki oynatıcı olarak ExoPlayer kullanılmaktadır. Bu kılavuzun geri kalanında, IMA reklamlarının arka planda sesli oynatılması için gereken özellikler açıklanmaktadır.
Uygulamanıza arka planda reklam oynatma özelliği ekleme
Uygulama arka plan modundayken müzik ve sesli reklam oynatmanın devam etmesi için özel bir ses oynatıcı ve reklam yükleyici içeren bir Service
bileşeni oluşturabilirsiniz.
Uygulamanızda ses çalma için MainActivity
ve AudioPlayerService
varsa AndroidManifest.xml
dosyanızı aşağıda gösterildiği gibi değiştirebilirsiniz:
<?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>
Hizmette, VideoAdPlayer
arayüzünü de uygulayan herhangi bir medya oynatıcıyı kullanarak IMA SDK ile etkileşim kurmak için özel bir ses oynatıcı oluşturabilirsiniz.
IMA SDK 3.16.1 sürümünde, reklam yükleyicinin sesli reklam istemesi için özel bir kapsayıcı oluşturmaya yönelik yeni bir işlev olan,
createAudioAdDisplayContainer
,
eklendi.
Aşağıdaki kod snippet'inde, sesli reklam isteklerini başlatma ve gönderme için kullanılan AudioPlayerService
örneği gösterilmektedir.
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);
}
...
}
Tamamlayıcı reklam alanları içeren reklamları kullanma
Reklamları, tamamlayıcı reklam yuvalarıyla veya tamamlayıcı reklam yuvaları olmadan başlatabilirsiniz. Eşlik eden reklamları oluşturmayı seçerseniz aşağıdaki örnekte gösterildiği gibi bir hizmet bağlayıcı aracılığıyla AudioPlayerService
sınıfına MainActivity
sınıfı erişimi sağlamanız gerekir:
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;
}
}
}
addCompanionAdSlot()
işlevini çağırabilir ve MainActivity
sınıfından reklamları başlatırken eşlik eden banner reklamları oluşturmak için bir kullanıcı arayüzü kapsayıcısı iletebilirsiniz.
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);
}
...
}
Sorun yaşarsanız uygulamanızı Audio Player Example ile karşılaştırabilirsiniz. Arka planda sesli reklam oynatma hakkında daha fazla sorunuz varsa lütfen destek için IMA SDK forumu ile iletişime geçin.