هذا الدليل مخصّص للناشرين المهتمين بتحميل إعلانات صوتية في تطبيقات Android.
المتطلبات الأساسية
- الإصدار 3.16.1 أو إصدار أحدث من حزمة تطوير البرامج (SDK) لنظام التشغيل Android لإعلانات الوسائط التفاعلية
ننصح الناشرين بالاطّلاع على مثال مشغّل الصوت على GitHub كنقطة بداية إذا لم يكن لديهم حاليًا تطبيق مشغّل صوت. يستخدم هذا المثال ExoPlayer كمشغّل يعمل في المقدّمة. سيصف باقي هذا الدليل الميزات اللازمة لتشغيل الصوت في الخلفية لإعلانات الوسائط التفاعلية.
جارٍ إضافة تشغيل الإعلانات في الخلفية إلى تطبيقك
لمواصلة تشغيل الموسيقى والإعلانات الصوتية عندما يكون التطبيق في وضع الخلفية،
يمكنك إنشاء 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
من أجل
التفاعل مع حزمة تطوير البرامج (SDK) لـ IMA
.
أضافت أداة تطوير البرامج لإعلانات الوسائط التفاعلية (IMA SDK) الإصدار 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);
}
...
}
استخدام الإعلانات مع الشرائح الإعلانية المصاحبة
يمكنك إعداد الإعلانات باستخدام الخانات الإعلانية المصاحبة أو بدونها. إذا اخترت
عرض إعلانات مصاحبة، عليك منح فئة
AudioPlayerService
إذن الوصول إلى فئة MainActivity
من خلال رابط خدمة كما هو موضح أدناه:
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()
وضبط حاوية واجهة مستخدم لعرض إعلانات البانر المصاحبة أثناء بدء الإعلانات من فئة 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 للحصول على الدعم.