تتيح واجهات برمجة التطبيقات الخاصة بعرض الإعلانات على الويب إتاحة إشارات التطبيقات للعلامات في CustomTabSession
، ما يساعد في تحسين تحقيق الربح للناشرين على الويب الذين قدّموا المحتوى وحماية المعلِنين من الرسائل غير المرغوب فيها.
آلية العمل
لا يتم التواصل مع حزمة تطوير البرامج (SDK) الجيل التالي لإعلانات الأجهزة الجوّالة إلا استجابةً لأحداث الإعلانات التي يتم تشغيلها من خلال أي مما يلي:
تسهّل
حزمة Next Gen Mobile Ads SDK
عملية التواصل من خلال فتح قناة postMessage
باستخدام CustomTabsSession
الذي يوفّره إطار عمل Android.
المتطلبات الأساسية
- الإصدار 0.6.0-alpha01 أو إصدار أحدث من حزمة تطوير البرامج (SDK) "الجيل التالي من الإعلانات على الأجهزة الجوّالة"
- تنفيذ حالي لعلامات التبويب المخصّصة في Chrome في تطبيقك على الأجهزة الجوّالة. يمكنك الاطّلاع على الإحماء والجلب المُسبَق: استخدام خدمة علامات التبويب المخصّصة.
- ربط تطبيقك على الأجهزة الجوّالة بموقع إلكتروني باستخدام Digital Asset Links
تمرير رقم تعريف التطبيق إلى حزمة تطوير البرامج (SDK)
إذا كان لديك معرّف تطبيق على "مدير إعلانات Google"، عليك إعداد حزمة تطوير البرامج (SDK) لعرض الإعلانات على الأجهزة الجوّالة من الجيل التالي باستخدام معرّف التطبيق الحالي.
إذا لم يكن لديك رقم تعريف تطبيق على "مدير إعلانات Google"، يمكنك إدخال
InitializationConfig.WEBVIEW_APIS_FOR_ADS_APPLICATION_ID
كرقم تعريف التطبيق
عند إعداد
حزمة تطوير البرامج (SDK) من الجيل التالي للإعلانات على الأجهزة الجوّالة
:
Kotlin
MobileAds.initialize(
this@MainActivity,
// Use this application ID to initialize the
Next Gen Mobile Ads SDK
if
// you don't have an Ad Manager application ID.
InitializationConfig.Builder(InitializationConfig.WEBVIEW_APIS_FOR_ADS_APPLICATION_ID)
.build(),
) {
// Adapter initialization complete.
}
Java
MobileAds.initialize(
this,
// Use this application ID to initialize the
Next Gen Mobile Ads SDK
if
// you don't have an Ad Manager application ID.
new InitializationConfig.Builder(InitializationConfig.WEBVIEW_APIS_FOR_ADS_APPLICATION_ID)
.build(),
initializationStatus -> {
// Adapter initialization is complete.
});
التنفيذ
ضمن عملية تنفيذ "علامات التبويب المخصّصة في Chrome"، عدِّل الرمز في
onCustomTabsServiceConnected()
callback. استبدِل newSession()
بـ MobileAds.registerCustomTabsSession()
. يؤدي ذلك إلى إنشاء اتصال بقناة postMessage لتضمين إشارات حزمة تطوير البرامج (SDK) في علامات الإعلانات. يجب توفّر رابط Digital Asset Link
لربط قناة postMessage. يمكنك اختياريًا ضبط المَعلمة
CustomTabsCallback
للاستماع إلى أحداث "علامات التبويب المخصّصة في Chrome".
سيظل بإمكانك إرسال رسائل من CustomTabsSession
التي تم تلقّيها
من
حزمة تطوير البرامج (SDK) لعرض الإعلانات على الأجهزة الجوّالة من الجيل التالي
ولكن قد يتغيّر المنفذ عندما تطلب حزمة تطوير البرامج (SDK)
قناة جديدة تحلّ محل القناة الحالية.
يوضّح مقتطف الرمز البرمجي التالي كيفية تسجيل CustomTabsSession
باستخدام
الجيل التالي من حزمة SDK لإعلانات الأجهزة الجوّالة
:
Kotlin
import com.google.android.libraries.ads.mobile.sdk.MobileAds
class MainActivity : ComponentActivity() {
private var customTabsClient: CustomTabsClient? = null
private var customTabsSession: CustomTabsSession? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// Get the default browser package name, this will be null if
// the default browser does not provide a CustomTabsService.
val packageName = CustomTabsClient.getPackageName(applicationContext, null);
if (packageName == null) {
// Do nothing as service connection is not supported.
return
}
CustomTabsClient.bindCustomTabsService(
applicationContext,
packageName,
object : CustomTabsServiceConnection() {
override fun onCustomTabsServiceConnected(
name: ComponentName, client: CustomTabsClient,
) {
customTabsClient = client
// Warm up the browser process.
customTabsClient?.warmup(0L)
// Create a new browser session using the
Next Gen Mobile Ads SDK
.
customTabsSession = MobileAds.INSTANCE.registerCustomTabsSession(
client,
// Checks the "Digital Asset Link" to connect the postMessage channel.
ORIGIN,
// Optional parameter to receive the delegated callbacks.
customTabsCallback
)
// Create a new browser session if the
Next Gen Mobile Ads SDK
is
// unable to create one.
if (customTabsSession == null) {
customTabsSession = client.newSession(customTabsCallback)
}
// Pass the custom tabs session into the intent.
val customTabsIntent = CustomTabsIntent.Builder(customTabsSession).build()
customTabsIntent.launchUrl(this@MainActivity,
Uri.parse("YOUR_URL"))
}
override fun onServiceDisconnected(componentName: ComponentName) {
// Remove the custom tabs client and custom tabs session.
customTabsClient = null
customTabsSession = null
}
})
}
// Listen for events from the CustomTabsSession delegated by the
Next Gen Mobile Ads SDK
.
private val customTabsCallback: CustomTabsCallback = object : CustomTabsCallback() {
@Synchronized
override fun onNavigationEvent(navigationEvent: Int, extras: Bundle?) {
// Called when a navigation event happens.
}
@Synchronized
override fun onMessageChannelReady(extras: Bundle?) {
// Called when the channel is ready for sending and receiving messages on both
// ends.
// This frequently happens, such as each time the SDK requests a
// new channel.
}
@Synchronized
override fun onPostMessage(message: String, extras: Bundle?) {
// Called when a tab controlled by this CustomTabsSession has sent a postMessage.
}
override fun onRelationshipValidationResult(
relation: Int, requestedOrigin: Uri, result: Boolean, extras: Bundle?
) {
// Called when a relationship validation result is available.
}
override fun onActivityResized(height: Int, width: Int, extras: Bundle) {
// Called when the tab is resized.
}
override fun extraCallback(callbackName: String, args: Bundle?) {
}
override fun extraCallbackWithResult(callbackName: String, args: Bundle?): Bundle? {
return null
}
}
companion object {
// Replace this URL with an associated website.
const val ORIGIN = "https://www.google.com"
}
}
Java
import com.google.android.libraries.ads.mobile.sdk.MobileAds;
class MainActivity extends ComponentActivity {
// Replace this URL with an associated website.
private static final String ORIGIN = "https://www.google.com";
private CustomTabsClient customTabsClient;
private CustomTabsSession customTabsSession;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Get the default browser package name, this will be null if
// the default browser does not provide a CustomTabsService.
String packageName = CustomTabsClient.getPackageName(getApplicationContext(), null);
if (packageName == null) {
// Do nothing as service connection is not supported.
return;
}
CustomTabsClient.bindCustomTabsService(
getApplicationContext(),
packageName,
new CustomTabsServiceConnection() {
@Override
public void onCustomTabsServiceConnected(@NonNull ComponentName name,
@NonNull CustomTabsClient client) {
customTabsClient = client;
// Warm up the browser process.
customTabsClient.warmup(0);
// Create a new browser session using the
Next Gen Mobile Ads SDK
.
customTabsSession = MobileAds.INSTANCE.registerCustomTabsSession(
client,
// Checks the "Digital Asset Link" to connect the postMessage channel.
ORIGIN,
// Optional parameter to receive the delegated callbacks.
customTabsCallback);
// Create a new browser session if the
Next Gen Mobile Ads SDK
is
// unable to create one.
if (customTabsSession == null) {
customTabsSession = client.newSession(customTabsCallback);
}
// Pass the custom tabs session into the intent.
CustomTabsIntent intent = new CustomTabsIntent.Builder(customTabsSession).build();
intent.launchUrl(MainActivity.this, Uri.parse("YOUR_URL"));
}
@Override
public void onServiceDisconnected(ComponentName componentName) {
// Remove the custom tabs client and custom tabs session.
customTabsClient = null;
customTabsSession = null;
}
}
);
}
// Listen for events from the CustomTabsSession delegated by the
Next Gen Mobile Ads SDK
.
private final CustomTabsCallback customTabsCallback = new CustomTabsCallback() {
@Override
public void onNavigationEvent(int navigationEvent, @Nullable Bundle extras) {
// Called when a navigation event happens.
super.onNavigationEvent(navigationEvent, extras);
}
@Override
public void onMessageChannelReady(@Nullable Bundle extras) {
// Called when the channel is ready for sending and receiving messages on both
// ends.
// This frequently happens, such as each time the SDK requests a
// new channel.
super.onMessageChannelReady(extras);
}
@Override
public void onPostMessage(@NonNull String message, @Nullable Bundle extras) {
// Called when a tab controlled by this CustomTabsSession has sent a postMessage.
super.onPostMessage(message, extras);
}
@Override
public void onRelationshipValidationResult(int relation, @NonNull Uri requestedOrigin,
boolean result, @Nullable Bundle extras) {
// Called when a relationship validation result is available.
super.onRelationshipValidationResult(relation, requestedOrigin, result, extras);
}
@Override
public void onActivityResized(int height, int width, @NonNull Bundle extras) {
// Called when the tab is resized.
super.onActivityResized(height, width, extras);
}
@Override
public void extraCallback(@NonNull String callbackName, @Nullable Bundle args) {
super.extraCallback(callbackName, args);
}
@Nullable
@Override
public Bundle extraCallbackWithResult(@NonNull String callbackName, @Nullable Bundle args) {
return super.extraCallbackWithResult(callbackName, args);
}
};
}