يوضّح هذا الدليل كيفية تنفيذ واجهة المستخدم المخصّصة باستخدام حزمة تطوير البرامج لإعلانات الوسائط التفاعلية لنظام التشغيل Android. لإجراء ذلك، عليك إيقاف واجهة المستخدم التلقائية وإعداد واجهة مستخدم مخصّصة جديدة، ثم تعبئة واجهة المستخدم الجديدة بمعلومات الإعلان التي تم الحصول عليها من حزمة تطوير البرامج (SDK).
إيقاف واجهة مستخدم الإعلان
لعرض واجهة مستخدم مخصّصة، عليك أولاً إيقاف واجهة المستخدم التلقائية للإعلان. لتنفيذ هذا الإجراء، يجب الاتصال بـ
AdsRenderingSettings.setDisableUi()
، ثم تمرير AdsRenderingSettings
إلى
AdsManager.init()
:
MyActivity.java
ImaSdkFactory mSdkFactory = ImaSdkFactory.getInstance(); AdsManager mAdsManager; @Override public void onAdsManagerLoaded(AdsManagerLoadedEvent adsManagerLoadedEvent) { mAdsManager = adsManagerLoadedEvent.getAdsManager(); ... AdsRenderingSettings settings = mSdkFactory.createAdsRenderingSettings(); settings.setDisableUi(true); mAdsManager.init(settings); }
بعد ذلك، كلما احتجت إلى تحديد ما إذا كنت تريد عرض واجهة المستخدم المخصّصة أم لا، تحقّق ممّا إذا
كان هناك إعلان، ثم اتصل بـ Ad.isUiDisabled()
للتحقّق من إيقاف واجهة المستخدم التلقائية للإعلانات.
عرض واجهة المستخدم المخصّصة
بعد إيقاف واجهة المستخدم التلقائية، تكون الخطوة التالية هي عرض واجهة مستخدِم مخصّصة للإعلان.
في هذا المثال، يمكنك إضافة RelativeLayout
جديد إلى تنسيق مشغّل الفيديو الحالي،
ثم عرض هذا التنسيق أثناء عرض إعلان وإخفائه عند عدم تشغيل أي إعلانات.
أضف ما يلي إلى ملف تنسيق الجزء:
fragment_video.xml
<com.google.ads.interactivemedia.v3.samples.samplevideoplayer.SampleVideoPlayer android:id="@+id/sampleVideoPlayer" android:layout_width="match_parent" android:layout_height="match_parent" /> <RelativeLayout android:id="@+id/customUi" android:layout_width="match_parent" android:layout_height="match_parent" android:visibility="invisible"> <TextView android:id="@+id/adCounter" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@android:color/holo_green_light" android:layout_alignParentTop="true" android:layout_alignParentLeft="true" android:text="@string/ad_counter" /> <Button android:id="@+id/learnMoreButton" android:background="@android:color/holo_green_light" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:text="@string/learn_more" android:layout_alignParentRight="true" /> <Button android:id="@+id/skipButton" android:background="@android:color/holo_green_light" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:text="@string/skip_ad" android:enabled="false" android:layout_alignParentRight="true" /> </RelativeLayout>
بعد ذلك، يمكنك إضافة الرمز لاستخدام واجهة المستخدم المخصّصة في Activity
. لتحديث واجهة المستخدم،
أنشئ موقّتًا Handler
وRunnable
يتم تشغيله عليه.
MyActivity.java
// The view containing the custom UI. private View mCustomUi; // The timer handler. private Handler mTimerHandler = new Handler(); // The Runnable that runs your custom UI update loop. private Runnable mTimerRunnable = new Runnable() { @Override public void run() { updateCustomUi(); mTimerHandler.postDelayed(this, 500); } }; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { ... mCustomUi = rootView.findViewById(R.id.customUi); mAdCounterUi = (TextView) rootView.findViewById(R.id.adCounter); } @Override public void onAdEvent(AdEvent adEvent) { ... switch (adEvent.getType()) { ... case STARTED: // Start your update loop. mTimerHandler.post(mTimerRunnable); Break; ... case COMPLETED: mCustomUi.setVisibility(View.INVISIBLE); mTimerHandler.removeCallbacks(mTimerRunnable); ... } } @Override public void onPause() { ... // Stop ad UI update loop. mTimerHandler.removeCallbacks(mTimerRunnable); } @Override Public void onResume() { ... // Start ad UI update loop. mTimerHandler.post(mTimerRunnable); }
عدّاد الإعلانات وزر التخطي
حدِّد الآن الدالة updateCustomUi()
لملء واجهة المستخدم بمعلومات الإعلان.
تختلف التفاصيل حسب شكل الإعلان، ولكن عادةً ما تُدرِج عدّاد الإعلان
وزر التخطي أو عدّاد التخطي إذا كان الإعلان قابلاً للتخطي. أضِف ما يلي:
MyActivity.java
private void updateCustomUi() { // Runs from the update loop to update the custom UI. Ad ad = mAdsManager.getCurrentAd(); if (ad != null && ad.isUiDisabled()) { // Show the UI. Log.i(LOGTAG, "UI disabled, show custom UI!"); AdPodInfo podInfo = ad.getAdPodInfo(); VideoProgressUpdate update = mAdsManager.getAdProgress(); SimpleDateFormat format = new SimpleDateFormat("mm:ss", Locale.US); // Handle ad counter. String adProgress = format.format( (update.getDuration() - update.getCurrentTime()) * 1000); String adUiString = String.format( Locale.US, "Ad %d of %d (%s)", podInfo.getAdPosition(), podInfo.getTotalAds(), adProgress); mAdCounterUi.setText(adUiString); // Handle skippable ads. if (ad.isSkippable()) { if (update.getCurrentTime() >= ad.getSkipTimeOffset()) { // Allow skipping. mSkipButton.setText(getString(R.string.skip_ad)); mSkipButton.setEnabled(true); } else { String skipString = String.format( Locale.US, "You can skip this ad in %d", (int) (ad.getSkipTimeOffset() - update.getCurrentTime())); mSkipButton.setText(skipString); mSkipButton.setEnabled(false); } mSkipButton.setVisibility(View.VISIBLE); } else { mSkipButton.setVisibility(View.INVISIBLE); } mCustomUi.setVisibility(View.VISIBLE); mCustomUi.bringToFront(); } else { // Hide the UI. mCustomUi.setVisibility(View.INVISIBLE); mTimerHandler.removeCallbacks(mTimerRunnable); } }
في الرمز أعلاه، بعد التأكّد من وجود إعلان، ثم استدعاء
Ad.isUiDisabled()
للتحقّق من إيقاف واجهة المستخدم التلقائية للإعلان، اتصل بـ
Ad.getAdPodInfo()
وAdsManager.getAdProgress()
للاطّلاع على موضع الإعلان
في مجموعة الإعلانات المتسلسلة والاطّلاع على مستوى تقدّم الإعلان. بالنسبة إلى الإعلانات القابلة للتخطي، اعرض عدّاد التخطي إذا
لم يكن بإمكانك تخطي الإعلان؛ أو اعرض زر التخطي. في ما يلي ملخّص لمعلومات الإعلانات الشائعة
والمكالمات المرتبطة بها:
المعلومات | الاتصال |
---|---|
الإعلان الحالي في مجموعة الإعلانات المتسلسلة | Ad.getAdPodInfo().getAdPosition() |
إجمالي الإعلانات في مجموعة الإعلانات المتسلسلة | Ad.getPodInfo().getTotalAds() |
قابل للتخطّي أثناء عرض الإعلانات | Ad.isSkippable() |
عدد الثواني المتبقية لتخطّي الإعلان | Ad.getSkipTimeOffset() - AdsManager.getAdProgress().getCurrentTime() |
الثواني المتبقية في الإعلان | (AdsManager.getAdProgress().getDuration() - AdsManager.getAdProgress().getCurrentTime()) * 1000 |
من المفترض أن يؤدي النقر على الزر تخطّي الإعلان إلى تخطي الإعلان، لذا يجب إعداده بالإضافة إلى الزر مزيد من المعلومات:
MyActivity.java
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { ... mCustomUi = rootView.findViewById(R.id.customUi); mAdCounterUi = (TextView) rootView.findViewById(R.id.adCounter); // Set up the 'learn more' button handler for the custom UI. mLearnMoreButton = (Button) rootView.findViewById(R.id.learnMoreButton); mLearnMoreButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { // Only works if the UI has been disabled. mAdsManager.clicked(); } }); // Set up the skip button handler for the custom UI. mSkipButton = (Button) rootView.findViewById(R.id.skipButton); mSkipButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { mAdsManager.skip(); } });
يجب إيقاف واجهة المستخدم لكي يعمل AdsManager.clicked()
.
تحديد المشاكل وحلّها
- هل لديك نموذج لعلامة تم تفعيلها لإيقاف واجهة مستخدم الإعلان؟
- يمكنك نسخ عنوان URL لنموذج العلامة هذا ولصقه في عملية تنفيذ إعلانات الوسائط التفاعلية.
- لا يمكنني إيقاف واجهة المستخدم التلقائية.
- تأكد من الاتصال بـ
AdsRenderingSettings.setDisableUi()
وتمريره إلىAdsManager
. تأكّد من أنّAd.isUiDisabled()
يعرضtrue
. بالإضافة إلى ذلك، يجب تفعيل شبكتك في "مدير الإعلانات" لإيقاف واجهة مستخدم الإعلانات. في حال تفعيلك، يحتوي نموذج عرض إعلانات الفيديو (VAST) علىExtension
على النحو التالي:<Extension type="uiSettings"> <UiHideable>1</UiHideable> </Extension>
إذا استمرّت المشكلة، يُرجى مراجعة مدير حسابك للتأكّد من تفعيلك. تتطلب بعض أنواع الإعلانات واجهة مستخدم محددة، ويتم عرض هذه الإعلانات بقيمة<UiHideable>
تساوي 0. إذا واجهت هذه المشكلة، سيحتاج فريق عدد الزيارات إلى إجراء تغييرات لضمان عدم عرض أنواع الإعلانات هذه.