Нативное объявление Flutter AdMob: действие запускается при нажатии в любом месте объявления, но действие требуется тольAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Нативное объявление Flutter AdMob: действие запускается при нажатии в любом месте объявления, но действие требуется толь

Сообщение Anonymous »

Я интегрирую нативную рекламу AdMob в свое приложение Flutter и столкнулся с проблемой, когда нажатие в любом месте объявления запускает соответствующее действие. Однако я хочу, чтобы действие вызывалось только тогда, когда пользователь нажимает кнопку действия в объявлении.
Вот фрагмент моего кода Android, связанный с отображением собственного объявления: Я новичок в Android. . Я скомпилировал этот код, просматривая документацию и используяchatgpt.
feed_ad_1.xml
























FeedItemAdFactory.java
package com.myapp.app;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import com.google.android.gms.ads.nativead.MediaView;
import com.google.android.gms.ads.nativead.NativeAd;
import com.google.android.gms.ads.nativead.NativeAdView;
import io.flutter.plugins.googlemobileads.GoogleMobileAdsPlugin.NativeAdFactory;
import java.util.Map;

class FeedItemAdFactory implements NativeAdFactory {
private final Context context;

FeedItemAdFactory(Context context) {
this.context = context;
}

@Override
public NativeAdView createNativeAd(
NativeAd nativeAd, Map customOptions) {
final NativeAdView adView =
(NativeAdView) LayoutInflater.from(context).inflate(R.layout.feed_ad_1, null);

adView.setMediaView((MediaView) adView.findViewById(R.id.ad_media));

adView.setHeadlineView(adView.findViewById(R.id.ad_headline));
adView.setCallToActionView(adView.findViewById(R.id.ad_call_to_action));
adView.setAdvertiserView(adView.findViewById(R.id.ad_advertiser));

String headlineText = nativeAd.getHeadline();
if (nativeAd.getBody() != null) {
headlineText += "\n" + nativeAd.getBody();
}
((TextView) adView.getHeadlineView()).setText(headlineText);

adView.getMediaView().setMediaContent(nativeAd.getMediaContent());

if (nativeAd.getCallToAction() == null) {
adView.getCallToActionView().setVisibility(View.INVISIBLE);
} else {
adView.getCallToActionView().setVisibility(View.VISIBLE);
((Button) adView.getCallToActionView()).setText(nativeAd.getCallToAction());
}
adView.getIconView()).setImageDrawable(nativeAd.getIcon().getDrawable());
if (nativeAd.getAdvertiser() == null) {
adView.getAdvertiserView().setVisibility(View.INVISIBLE);
} else {
adView.getAdvertiserView().setVisibility(View.VISIBLE);
((TextView) adView.getAdvertiserView()).setText(nativeAd.getAdvertiser());
}

adView.setNativeAd(nativeAd);

return adView;
}
}

Может ли кто-нибудь подсказать мне, как обеспечить, чтобы действие, связанное с объявлением, запускалось только тогда, когда пользователь нажимает кнопку действия внутри объявления, а не где-либо в объявлении?
Может кто-нибудь подсказать мне, как обеспечить, чтобы действие, связанное с объявлением, запускалось только тогда, когда пользователь нажимает кнопку действия внутри объявления, а не где-либо в объявлении?
Может кто-нибудь подсказать мне, как обеспечить, чтобы действие, связанное с объявлением, запускалось только тогда, когда пользователь нажимает кнопку действия внутри объявления, а не где-либо в нем?
Может кто-нибудь подсказать мне, как обеспечить, чтобы действие, связанное с объявлением, запускалось только тогда, когда пользователь нажимает кнопку действия внутри объявления, а не где-либо в нем?
p>
Заранее благодарим за любую помощь!
Я попробовал добавить этот фрагмент кода, рекомендованный чатгптом, но это ничего не меняет.

// Wrap CTA button with GestureDetector for click handling
Button ctaButton = (Button) adView.getCallToActionView();
GestureDetector gestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
@Override // Remove this annotation
public boolean onTap(View v) {
// Replace with the correct method for getting the click URL from your AdMob library
launch(nativeAd.getClickToAction() /* or appropriate method name */);
return true;
}
});
ctaButton.setOnTouchListener(gestureDetector);
}

// Disable clickability for the NativeAdView
adView.setClickable(false);
adView.setEnabled(false);

// Disable clickability for other views
adView.getHeadlineView().setClickable(false);
adView.getMediaView().setClickable(false);
adView.getAdvertiserView().setClickable(false);

// Enable clickability for the call-to-action button
adView.getCallToActionView().setClickable(true);
adView.getCallToActionView().setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
nativeAd.performClick(new Bundle());
}
});


Подробнее здесь: https://stackoverflow.com/questions/785 ... ut-want-ac
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»