我正在整合MoPub SDK来调解来自Google AdMob网络的广告。 我可以在实现自己的customEvent和Adapter之后显示AD,但是我无法让AD自己处理点击事件。 就像我点击AdMob原生AD一样,它不会指引我到任何地方。 使用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




`

===============>>#1 票数:0

如果您拥有AdMob广告的自定义用户界面,则会有一个按钮,您将用于callToAction部分。

首先,您需要添加一个选择器来检测click的操作,为该按钮添加选择器

[callToActionButton addTarget:self action:@selector(adCalled:) forControlEvents:UIControlEventTouchUpInside];

之后实现adCalled方法以获得点击并进一步调用方法,下面是您的参考代码。下面是我用来从我的集合视图中获取广告对象的示例,然后我重定向它。

- (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];
        }
    }
}

使用此功能,我可以使用Google跟踪网址打开网站链接。

希望这可以帮助。

  ask by Jacky Wang translate from so

未解决问题?本站智能推荐:

1回复

MoPub SDK:如何删除视频广告?

我使用MoPub SDK(通过AdMob中介,并在Android上使用,但肯定不会更改问题的答案),并且我只希望使用经典的非页内广告(不包含视频广告)。 我能怎么做 ?
1回复

MOPUB,如何创建与本机代码对话的js事件(iOS)

我正在尝试创建MOPUB广告,以使某些事物可以通过object-c方法进行触发。 不知道我该怎么做。 我添加了mraid.addEventlistener('text',textEvent); 和 函数textEvent(state){ } 到js。 因此,现在它
1回复

我可以在另一个中介(Admob)上使用一个移动广告中介(MoPub)吗?

我长时间在多个移动广告源中使用Admob中介,并且一切顺利。 对于某些特定对象,我需要在Admob中介上添加另一个中介MoPub。 有可能/合理吗? 我可以通过实现自己的适配器来实现吗? 我找不到任何相关信息,所以我来寻求帮助。 非常感谢!
2回复

无法通过mopub从admob获取广告

我一直试图在我的应用上投放广告几天。 我有一切设置,订单项,横幅,admob ID(与ca-app ....),我得到了正确的mopub Id和一切。 但是我仍然收到这条消息: 该应用程序不在任何商店,我只是在我的手机上测试它。 这有什么不同吗? 任何帮助是极大的赞赏 :)
10回复

使用Admob在Android中实现原生广告?可能吗?

我正在尝试在我的Android应用程序中实现原生广告。 但我想只使用admob来做。 我搜索了很多解决方案,但找不到确切的方法。 我知道可以使用MoPub 。 我想要做的是:在列表项目中显示广告,这意味着ListView / RecyclerView项目之一可以是一个广告,如下图
1回复

切换到64位时出现MoPub错误

我只是在XCode模拟器上改用iPhone 5 64位来测试我的游戏,而MoPub广告和很多编译错误。 我联系了MoPub,他们说Millennial和AdMob文件可能有问题,但我不知所措是什么问题?
1回复

如何在AdMob中添加中介网络?

我已经在我的应用程序中实现了Admob广告我现在想知道如何在Admob中添加MoPub网络作为中介网络,为此我已经添加了MoPub框架和Mediation采用者,但我无法从MoPub获取广告建议我是否有任何代码/设置来启用它。 提前致谢
1回复

在我的android应用中使用mopub中介弹出多个插页式广告

我正在尝试将mopub集成到我的应用程序中。 我正在使用千禧一代媒体和admob广告网络。 我遇到了这个奇怪的问题,它首先从千禧年媒体中加载非页内广告,然后在仅显示mmedia或admob非页内广告而不同时显示两者时,才加载admob非页内广告。 对于用户而言,看到插页式广告将是非常糟糕的
1回复

用于AdMob中介的Mopub适配器

我正在尝试从Mopub迁移到AdMob中介,但找不到用于中介的自定义适配器来实现Mopub。 有没有人尝试制作适配器? 提前致谢!
1回复

如何在iOS的TableView中使用AdMob横幅广告?

我想在TableView中的每5个结果之间显示不同的广告,我在ios项目中使用过admob标语广告。即使我每5行后使用不同的广告单元ID来加载广告,Tableview在每5个结果之后也显示相同的广告。 有什么解决方案可以在5行后获得不同的广告?