Я интегрирую нативную рекламу 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