میاناهای برنامهسازی کاربردی نمای وب برای آگهیها نشانهای برنامه را برای برچسبهای موجود در
CustomTabSession دردسترس قرار میدهد،
و به بهبود درآمدزایی برای ناشران وب که محتوا را ارائه کردهاند
و محافظت از تبلیغکنندگان دربرابر هرزنامه کمک میکند.
روش کار
ارتباط با GMA Next-Gen SDK فقط در پاسخ به رویدادهای آگهی اتفاق میافتد که توسط هریک از موارد زیر راهاندازی میشوند:
GMA Next-Gen SDK با باز کردن کانال postMessage با CustomTabsSession ارائهشده توسط چارچوب Android، ارتباط را تسهیل میکند.
پیشنیازها
- GMA Next-Gen SDK نسخه ۰.۶.۰-alpha01 یا بالاتر.
- پیادهسازی برگههای سفارشی Chrome موجود در برنامه تلفن همراهتان. پیشگرم کردن و پیشواکشی: استفاده از «خدمات برگههای سفارشی» را ببینید.
- برنامه تلفن همراهتان را بااستفاده از پیوندهای دارایی دیجیتال به وبسایت مرتبط کنید. برای دستورالعملها، PostMessage برای TWA را ببینید.
شناسه برنامه را به کیت توسعه نرمافزار ارسال کنید
اگر ازقبل شناسه برنامه AdMob دارید، GMA Next-Gen SDK را با شناسه برنامه موجودتان مقداردهی اولیه کنید.
اگر شناسه برنامه AdMob ندارید،
InitializationConfig.WEBVIEW_APIS_FOR_ADS_APPLICATION_ID را بهعنوان شناسه برنامه
وقتی GMA Next-Gen SDK را مقداردهی اولیه میکنید ارسال کنید:
Kotlin
MobileAds.initialize(
this@MainActivity,
// Use this application ID to initialize the GMA Next-Gen SDK if
// you don't have an AdMob application ID.
InitializationConfig.Builder(InitializationConfig.WEBVIEW_APIS_FOR_ADS_APPLICATION_ID)
.build(),
) {
// Adapter initialization complete.
}
جاوا
MobileAds.initialize(
this,
// Use this application ID to initialize the GMA Next-Gen SDK if
// you don't have an AdMob application ID.
new InitializationConfig.Builder(InitializationConfig.WEBVIEW_APIS_FOR_ADS_APPLICATION_ID)
.build(),
initializationStatus -> {
// Adapter initialization is complete.
});
پیادهسازی
در پیادهسازی «برگههای سفارشی Chrome»، کد را در
onCustomTabsServiceConnected()
پاسخگویی اصلاح کنید. newSession() را
با MobileAds.registerCustomTabsSession() جایگزین کنید. این کار اتصالی با کانال
postMessage برقرار میکند تا برچسبهای آگهی را با نشانهای کیت توسعه نرمافزار غنی کند. برای اتصال کانال postMessage، به «پیوند دارایی دیجیتال»
نیاز است. بهصورت اختیاری، میتوانید پارامتر
CustomTabsCallback
را برای گوش دادن به رویدادهای «زبانه سفارشی Chrome» تنظیم کنید.
همچنان باید بتوانید از CustomTabsSession پیام ارسال کنید
که از GMA Next-Gen SDK دریافت شده است، اما وقتی کیت توسعه نرمافزار کانال جدیدی را درخواست میکند
که کانال موجود را ملغی میکند، ممکن است درگاه تغییر کند.
تکهکد زیر نحوه ثبت CustomTabsSession را بااستفاده از
GMA Next-Gen 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 GMA Next-Gen 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 GMA Next-Gen 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 GMA Next-Gen 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"
}
}
جاوا
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 GMA Next-Gen 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 GMA Next-Gen 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 GMA Next-Gen 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);
}
};
}