- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在集成 MoPub SDK 以调节来自 Google AdMob 网络的广告。我可以在实现自己的 customEvent 和 Adapter 后让 AD 显示,但我无法让 AD 自行处理点击事件。正如当我点击 AdMob 原生广告时,它不会将我定向到任何地方。使用 Facebook 和 Flurry 的 CustomEvent 和 Adapter 时,会自动处理点击。任何人都有这方面的经验吗?
提前致谢。代码如下:
MPGoogleAdMobCustomEvent
@interface MPGoogleAdMobCustomEvent()
@property(nonatomic, strong)GADAdLoader *loader;
@end
@implementation MPGoogleAdMobCustomEvent
- (void)requestAdWithCustomEventInfo:(NSDictionary *)info
{
MPLogInfo(@"MOPUB: requesting AdMob Native Ad");
NSString *adUnitID = [info objectForKey:@"adUnitID"];
if (!adUnitID) {
[self.delegate nativeCustomEvent:self didFailToLoadAdWithError:MPNativeAdNSErrorForInvalidAdServerResponse(@"MOPUB: No AdUnitID from GoogleAdMob")];
return;
}
self.loader = [[GADAdLoader alloc] initWithAdUnitID:adUnitID rootViewController:nil adTypes:@[kGADAdLoaderAdTypeNativeContent] options:nil];
self.loader.delegate = self;
GADRequest *request = [GADRequest request];
#if (TARGET_OS_SIMULATOR)
request.testDevices = @[ kGADSimulatorID ];
#endif
CLLocation *location = [[CLLocationManager alloc] init].location;
if (location) {
[request setLocationWithLatitude:location.coordinate.latitude
longitude:location.coordinate.longitude
accuracy:location.horizontalAccuracy];
}
request.requestAgent = @"MoPub";
[self.loader loadRequest:request];
}
- (void)adLoader:(GADAdLoader *)adLoader didReceiveNativeContentAd:(GADNativeContentAd *)nativeContentAd
{
MPLogDebug(@"MOPUB: Did receive nativeAd");
MPGoogleAdMobNativeAdAdapter *adapter = [[MPGoogleAdMobNativeAdAdapter alloc] initWithGADNativeContentAd:nativeContentAd];
adapter.url = nativeContentAd.advertiser;
MPNativeAd *interfaceAd = [[MPNativeAd alloc] initWithAdAdapter:adapter];
NSMutableArray *imageArray = [NSMutableArray array];
for (GADNativeAdImage *images in nativeContentAd.images) {
[imageArray addObject:images.imageURL];
}
[super precacheImagesWithURLs:imageArray completionBlock:^(NSArray *errors) {
if ([errors count]) {
[self.delegate nativeCustomEvent:self didFailToLoadAdWithError:errors[0]];
} else {
[self.delegate nativeCustomEvent:self didLoadAd:interfaceAd];
}
}];
}
- (void)adLoader:(GADAdLoader *)adLoader didFailToReceiveAdWithError:(GADRequestError *)error
{
MPLogDebug(@"MOPUB: AdMob ad failed to load with error (customEvent): %@", error.description);
[self.delegate nativeCustomEvent:self didFailToLoadAdWithError:error];
}
@end
MPGoogleAdMobNativeAdAdapter
@interface MPGoogleAdMobNativeAdAdapter()<GADNativeAdDelegate>
@property(nonatomic, strong)NSDictionary *properties;
@end
@implementation MPGoogleAdMobNativeAdAdapter
- (instancetype)initWithGADNativeContentAd:(GADNativeContentAd *)contentAD
{
self = [super init];
if (self) {
self.contentAd = contentAD;
self.contentAd.delegate = self;
self.properties = [self convertAssetsToProperties:contentAD];
}
return self;
}
- (NSDictionary *)convertAssetsToProperties:(GADNativeContentAd *)adNative
{
self.contentAd = adNative;
NSMutableDictionary * dictionary = [NSMutableDictionary dictionary];
if (adNative.headline) {
dictionary[kAdTitleKey] = adNative.headline;
}
if (adNative.body) {
dictionary[kAdTextKey] = adNative.body;
}
if (adNative.images[0]) {
dictionary[kAdMainImageKey] = ((GADNativeAdImage *)adNative.images[0]).imageURL.absoluteString;
}
if (adNative.callToAction) {
dictionary[kAdCTATextKey] = adNative.callToAction;
}
return [dictionary copy];
}
#pragma mark MPNativeAdAdapter
- (NSTimeInterval)requiredSecondsForImpression
{
return 0.0;
}
- (NSURL *)defaultActionURL
{
return nil;
}
- (BOOL)enableThirdPartyClickTracking
{
return YES;
}
- (void)willAttachToView:(UIView *)view
{
self.contentAd.rootViewController = [self.delegate viewControllerForPresentingModalView];
}
- (void)didDetachFromView:(UIView *)view
{
self.contentAd.rootViewController = nil;
}
#pragma mark GADNativeAdDelegate
- (void)nativeAdWillPresentScreen:(GADNativeAd *)nativeAd
{
if ([self.delegate respondsToSelector:@selector(nativeAdWillPresentModalForAdapter:)]) {
[self.delegate nativeAdWillPresentModalForAdapter:self];
}
}
- (void)nativeAdDidDismissScreen:(GADNativeAd *)nativeAd
{
if ([self.delegate respondsToSelector:@selector(nativeAdDidDismissModalForAdapter:)]) {
[self.delegate nativeAdDidDismissModalForAdapter:self];
}
}
- (void)nativeAdWillLeaveApplication:(GADNativeAd *)nativeAd
{
if ([self.delegate respondsToSelector:@selector(nativeAdWillLeaveApplicationFromAdapter:)]) {
[self.delegate nativeAdWillLeaveApplicationFromAdapter:self];
}
}
@end
`
最佳答案
如果您拥有 AdMob 广告的自定义用户界面,那么您将在 callToAction
部分使用一个按钮。
首先你需要添加一个选择器来检测点击 Action ,为那个按钮添加选择器
[callToActionButton addTarget:self action:@selector(adCalled:) forControlEvents:UIControlEventTouchUpInside];
然后实现adCalled方法获取点击并进一步调用该方法,下面是代码供您引用下面是我用来从我的 Collection View 中获取广告对象然后重定向它的示例。
- (void)adCalled:(id)sender
{
CGPoint buttonPosition = [sender convertPoint:CGPointZero toView:mainCollectionView]; // Get the button position
NSIndexPath *indexPath = [collectionView indexPathForItemAtPoint:buttonPosition]; // Get the index path of button so that I can retrieve the correct ad object
id selectedAd = [adArray objectAtIndex:indexPath.row];
if ([selectedAd isKindOfClass:[GADNativeContentAd class]]) {
NSString *url = [selectedAd valueForKey:@"googleClickTrackingURLString"];
NSLog(@"URL is :%@", url);
NSURL *googleUrl = [NSURL URLWithString:url];
if ([[UIApplication sharedApplication] canOpenURL: googleUrl]) {
[[UIApplication sharedApplication] openURL:googleUrl];
}
}
}
使用它我可以使用谷歌跟踪 url 打开网络链接。
希望这对您有所帮助。
关于ios - 使用 MoPub 显示 AdMob 原生广告 (iOS),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37159588/
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 1年前关闭。 Improve thi
当我在 Admob 页面中创建插页式广告单元时,它要求输入 Interstitial timeout : Determine how long to display the interstitial
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 2年前关闭。 Improve thi
我的应用使用奖励视频广告,但在我看来,有时广告太长了。如何设置广告的时长限制? 最佳答案 这不是 AdMob 提供的功能。不过,感觉太长的广告通常会获得较少的点击次数,因此随着系统的调整,展示次数会越
我正在使用 admob 插页式广告,它通过 onCreate 加载 所以我可以使用它一次,但不能使用两次。我必须重新加载它然后使用它... 我想在显示后立即重新加载它,但似乎没有这样的回调监听器...
我有 admob 帐户,并且广告单元已成功放入我的应用程序中。 现在我想在我的应用程序中打印 admob 报告,就像用户 ABC 在这个应用程序中点击了“_”次赚取和应用程序的 RPM 我该怎么做,有
这可能是题外话,但请这对我们所有人都非常有帮助,他们从未知来源获得虚假点击,只是为了暂停我们的 admob 帐户。 最佳答案 对于 iOS 您应该使用 here 所述的委托(delegate)方法计算
Admob 几天前迁移到了较新的版本。他们成功转移了我的应用程序,但似乎我必须从 0,00 美元重新开始。我的旧 Admob 大约有 15 美元。我怎样才能把它转移到新的,否则它会丢失吗?支付限额为
我认为有人试图让我在 AdMob 中被禁止 - 在来自“未知”国家/地区的地理统计点击中,点击率达到 80%-90%(其他国家/地区 < 3%)。 如果用户来自“未知”国家/地区,是否有办法阻止展示广
我在展示来自 admob 的广告时在布局上遇到了一些问题。 应用刚启动时没有广告,一切正常。布局占据整个屏幕。然后当应用程序可以加载广告时(在顶部),整个布局将向下移动以显示广告。 如果有广告时整个布
是否可以在 Android 上以多种语言显示 GDPR 同意对话框? 我只能用一种语言发布一条消息。 在ump sdk中没有看到拟合方法。 我的意思是必须有办法做到这一点,如果没有,那么这个 sdk
我在 iOS 游戏中使用 AdMob,我最近更新了它以在我的 Info.plist 文件中包含 AdMob SKAdNetworkIdentifier(因为我的 AdMob 帐户中有警告要求这样做)。
这是我的代码: gAdView=[[GADBannerView alloc] initWithFrame:CGRectMake(0,self.view.bounds.size.height-GAD_S
Google 对使用 是否有限制或警告?奖励广告 限时? 因此,在我的应用程序中,如果我让我的用户按他/她想要的次数观看激励广告,将 谷歌 将其视为 无效流量这会导致帐户停用? 最佳答案 不,激励广告
我在 Google Play 上发布了一个游戏,我在上面放了 admob 广告。 由于无效的点击事件,我的 admob 帐户被禁用。 现在我创建了另一个帐户,将我的游戏链接到它。 我显示广告的代码是正
关于 AdSense 报告 API - GET/accounts/accountId/reports 它是仅检索 AdMob 数据(作为广告网络)还是也可以包括来自其他中介广告网络的数据? 最佳答案
我已经知道这个问题的答案,但我之所以这么问,是因为我花了几个小时才找到它,并且想让其他人轻松获得它。 自 2020 年 12 月 8 日起,Apple 已强制要求开发人员发布正在收集的数据以及这些数据
使用 AdWhirl 我得到了这些异常(exception)... 我无法从我这边发现错误...... 任何人都可以对此提出建议.. FATAL EXCEPTION: main E/AndroidRu
这就是我的 Admob 横幅的实现方式。 在 Layout.xml 中 在 AdActivity.java 中 private void initBannerViewGroup()
我想在同一事件中同时展示横幅广告和插页式广告。但我不确定这是否会违反 Google admob 政策,因为当显示插页式广告时,它会覆盖横幅广告。 谢谢。 最佳答案 这是允许的。事实上,建议您这样做以增
我是一名优秀的程序员,十分优秀!