คู่มือนี้มีไว้สำหรับผู้เผยแพร่โฆษณาที่สนใจโหลดโฆษณาเสียงลงในแอป Android
ข้อกำหนดเบื้องต้น
- IMA Android SDK เวอร์ชัน 3.16.1 ขึ้นไป
เราขอแนะนำให้ผู้เผยแพร่โฆษณาดูตัวอย่างโปรแกรมเล่นเสียงใน GitHub เป็นจุดเริ่มต้นหากยังไม่มีแอปโปรแกรมเล่นเสียง ตัวอย่างนี้ใช้ ExoPlayer เป็นโปรแกรมเล่นที่ทำงานอยู่เบื้องหน้า ส่วนที่เหลือของคู่มือนี้จะอธิบายฟีเจอร์ที่จําเป็นสําหรับการเล่นเสียงในเบื้องหลังของโฆษณา IMA
การเพิ่มการเล่นโฆษณาขณะล็อกหน้าจอหรือขณะใช้แอปอื่นลงในแอป
เพื่อให้การเล่นโฆษณาเพลงและเสียงเล่นต่อเมื่อแอปอยู่ในโหมดทำงานเบื้องหลัง คุณสามารถสร้างคอมโพเนนต์ Service
ที่มีโปรแกรมเล่นเสียงที่กำหนดเองและตัวโหลดโฆษณา
หากแอปมี MainActivity
และ AudioPlayerService
สำหรับการเล่นเสียง
คุณสามารถแก้ไขไฟล์ AndroidManifest.xml
ได้ดังที่แสดงด้านล่างนี้
<?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>
ซึ่งในบริการนี้ คุณจะสร้างโปรแกรมเล่นเสียงที่กำหนดเองได้ ซึ่งอาจเป็นมีเดียเพลเยอร์ใดก็ได้ ตราบใดที่เครื่องมือนี้ใช้อินเทอร์เฟซ VideoAdPlayer
สำหรับการโต้ตอบกับ IMA SDK
IMA SDK v. 3.16.1 เพิ่มฟังก์ชันใหม่ createAudioAdDisplayContainer
เพื่อสร้างคอนเทนเนอร์เฉพาะสำหรับโปรแกรมโหลดโฆษณาเพื่อขอโฆษณาเสียง
ข้อมูลโค้ดต่อไปนี้แสดงตัวอย่างของ AudioPlayerService
สำหรับเริ่มต้นและสร้างคำขอโฆษณาเสียง
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);
}
...
}
การใช้โฆษณากับช่องโฆษณาประกอบ
คุณสามารถเริ่มแสดงโฆษณาไม่ว่าจะมีหรือไม่มีช่องโฆษณาที่แสดงร่วมก็ได้ หากเลือกแสดงผลโฆษณาที่แสดงร่วม คุณจะต้องให้สิทธิ์เข้าถึงคลาส MainActivity
ของ AudioPlayerService
ผ่านการเชื่อมโยงบริการดังที่แสดงด้านล่าง
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()
และส่งคอนเทนเนอร์ UI เพื่อแสดงผลโฆษณาแบนเนอร์ประกอบขณะเริ่มต้นโฆษณาจากคลาส 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);
}
...
}
คุณสามารถเปรียบเทียบการใช้งานของคุณกับ ตัวอย่างโปรแกรมเล่นเสียง หากพบปัญหา หากมีคำถามเพิ่มเติมเกี่ยวกับการเล่นโฆษณาเสียงที่เล่นอยู่เบื้องหลัง โปรดติดต่อเราในฟอรัม IMA SDK เพื่อขอรับการสนับสนุน