Google AdMobs自定义点击事件无法使用不受支持的网络

问题描述 投票:1回答:1

我正在使用Google AdMobs DFP广告管理系统来提供其他网络的中介横幅广告。我已经添加了Millennial和InMobi,但现在我需要添加一个没有适配器的网络(YOC组),因此我需要实现“自定义事件横幅”。我已经阅读了有关使用自定义事件实现不支持的中介网络的指南和技术文档,但仍然无法理解它如何连接两个SDK(Google AdMobs SDK和中介网络的SDK)。

如果我将yoc广告ID(格式为'9A9A9AA99999999A999AA9A99AA99AAAA999A9AA')硬编码到示例广告并发送请求,则没有适配器(YOC)的网络可以正常工作。横幅回归正常并使用YOC SDK显示交互式/富媒体广告。

但是,在我的应用中,我只有一个Google DFP广告管理系统帐户ID(格式为“/9999/company.app/channel”),我向DFP广告管理系统发送了使用Google AdMobs SDK的请求。然后,请求会返回特定介体广告网络的响应,以尝试从中请求横幅广告。我目前的设置是YOC在DFP广告管理系统中投放100%的广告。

问题:我收到了YOC广告网络返回的横幅广告,并在屏幕上显示。它会记录页面展示次数(使用DFP广告管理系统),但触摸/按下事件的响应方式与其操作方式无关,就像我对yoc广告视图的初始化参数进行硬编码一样。然而,我不能硬编码yoc广告ID(初始化时),因为它只适用于一个横幅广告,我需要为每个频道中的每个特定广告设置不同的横幅。

下面是我试图在方法中使用NSLogs实现的示例代码,以登录到控制台并显示正在调用方法。这是一个非常基本的应用程序,并将所有代码放在一个地方,以方便阅读。

AppDelegate.h

#import < UIKit/UIKit.h>
#import "GADBannerView.h"
#import "GADBannerViewDelegate.h"
#import "GADCustomEventBanner.h"
#import "GADCustomEventBannerDelegate.h"
#import < YOCAdSDK/YOCAdView.h>

@interface AppDelegate : UIResponder <UIApplicationDelegate, GADBannerViewDelegate, GADCustomEventBanner, GADCustomEventBannerDelegate, YOCAdViewDelegate>

@property (strong, nonatomic) UIWindow *window;

@property (strong, nonatomic) UIViewController *root;

@end

AppDelegate.m

#import "AppDelegate.h"
#import "GADBannerView.h"
#import <YOCAdSDK/YOCAdSize.h>

@implementation AppDelegate

@synthesize root;
@synthesize delegate; // GADCustomEventBannerDelegate set on GADCustomEventBanner

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    CGRect bounds = [[UIScreen mainScreen] bounds];
    self.window = [[UIWindow alloc] initWithFrame:bounds];
    self.window.backgroundColor = [UIColor greenColor];

    GADBannerView *banner = [[GADBannerView alloc] initWithAdSize:kGADAdSizeLeaderboard origin:CGPointMake(0, 0)];
    self.root = [[UIViewController alloc] initWithNibName:nil bundle:nil];
    UIView *base = [[UIView alloc] initWithFrame:bounds];
    base.backgroundColor = [UIColor greenColor];
    self.root.view = base;

    // the adUnitID is always of our DFP account number of the format '/9999/company.app/aa_aa<channelName>_<channelName>app'
    banner.adUnitID = @"/9999/company.app/channel_specific_id";

    banner.delegate = self;
    banner.rootViewController = self.root;

    self.delegate = self;

    [base addSubview:banner];
    [base bringSubviewToFront:banner];
    [banner loadRequest:[GADRequest request]];

    [self.window setRootViewController:self.root];

    [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
    [self.window makeKeyAndVisible];
    return YES;
}


#pragma mark GADBannerViewDelegate

- (void)adViewDidReceiveAd:(GADBannerView *)view {
    NSLog(@" adViewDidReceiveAd ");
    NSLog(@" view: %@ ", [view description]);

    // for other ad networks here we get view.mediatedAdView = IMAdView (InMobi) or view.mediatedAdView = MMAdView (Millennial) but with YOC view.mediatedAdView = nil;

    [self.delegate customEventBanner:self didReceiveAd:view];
}

- (void)adView:(GADBannerView *)view didFailToReceiveAdWithError:(GADRequestError *)error {
    NSLog(@" didFailToReceiveAdWithError ");
    [self.delegate customEventBanner:self didFailAd:error];
}

- (void)adViewWillPresentScreen:(GADBannerView *)adView {
    NSLog(@" adViewWillPresentScreen ");
    [self.delegate customEventBanner:self clickDidOccurInAd:adView];
    [self.delegate customEventBannerWillPresentModal:self];
}

- (void)adViewWillDismissScreen:(GADBannerView *)adView {
    NSLog(@" adViewWillDismissScreen ");
    [self.delegate customEventBannerWillDismissModal:self];
}

- (void)adViewDidDismissScreen:(GADBannerView *)adView {
    NSLog(@" adViewDidDismissScreen ");
    [self.delegate customEventBannerDidDismissModal:self];
}

- (void)adViewWillLeaveApplication:(GADBannerView *)adView {
    NSLog(@" adViewWillLeaveApplication ");
    [self.delegate customEventBannerWillLeaveApplication:self];
}


#pragma mark GADCustomEventBanner

- (void)requestBannerAd:(GADAdSize)adSize
              parameter:(NSString *)serverParameter
                  label:(NSString *)serverLabel
                request:(GADCustomEventRequest *)request {
    NSLog(@" requestBannerAd ");

    // not sure if we initialiase the YOC tag here or how we would do this if can't hard code the yocTag to the format '9A9A9AA99999999A999AA9A99AA99AAAA999A9AA'
    // and we only have the banner view returned from DFP with the id '/9999/company.app/channel_specific_id)'

    YOCAdView *yocAdView = [[YOCAdView alloc] initWithYOCTag:serverParameter delegate:self size:kLeaderboard728x90 position:CGPointMake(0, 0)];
    yocAdView.delegate = self;
    [yocAdView load];

    [self.root.view addSubview:yocAdView];
}


#pragma mark GADCustomEventBannerDelegate

- (void)customEventBanner:(id<GADCustomEventBanner>)customEvent didReceiveAd:(UIView *)view {
    NSLog(@" [(GADBannerView *)view adUnitID]: %@ ", [(GADBannerView *)view adUnitID]);
    NSLog(@" [(GADBannerView *)view delegate]: %@ ", [(GADBannerView *)view delegate]);
    NSLog(@" [(id<YOCAdViewDelegate>)[customEvent delegate] viewControllerForPresentingYOCAdView]: %@ ", [(id<YOCAdViewDelegate>)[customEvent delegate] viewControllerForPresentingYOCAdView]);

    // not sure if we initialiase the YOC tag here or how we would do this if can't hard code the yocTag to '9A9A9AA99999999A999AA9A99AA99AAAA999A9AA"
    // and we only have the banner view returned from DFP with the id '/9999/company.app/channel_specific_id'
    [customEvent requestBannerAd:kGADAdSizeLeaderboard parameter:@"???" label:nil request:nil];

    // the key might be that the [customEvent delegate] is of type YOCAdViewDelegate and we can do code specific to YOC here...
    // but again not sure how to initialize the YOCAdView because we already have the banner view returned from DFP (with a different format account id)
    // [(id<YOCAdViewDelegate>)[customEvent delegate] yocAdViewDidInitialize:yocAdView];
}

- (void)customEventBanner:(id<GADCustomEventBanner>)customEvent didFailAd:(NSError *)error {
    NSLog(@" customEventBanner:didFailAd ");
}

- (void)customEventBanner:(id<GADCustomEventBanner>)customEvent clickDidOccurInAd:(UIView *)view {
    NSLog(@" customEventBanner:clickDidOccurInAd ");
}

- (void)customEventBannerWillPresentModal:(id<GADCustomEventBanner>)customEvent {
    NSLog(@" customEventBannerWillPresentModal ");
}

- (void)customEventBannerWillDismissModal:(id<GADCustomEventBanner>)customEvent {
    NSLog(@" customEventBannerWillDismissModal ");
}

- (void)customEventBannerDidDismissModal:(id<GADCustomEventBanner>)customEvent {
    NSLog(@" customEventBannerDidDismissModal ");
}

- (void)customEventBannerWillLeaveApplication:(id<GADCustomEventBanner>)customEvent {
    NSLog(@" customEventBannerWillLeaveApplication ");
}


#pragma mark YOCAdViewDelegate

- (UIViewController *)viewControllerForPresentingYOCAdView {
    NSLog(@" viewControllerForPresentingYOCAdView ");
    return self.root;
}

- (void)yocAdViewDidInitialize:(YOCAdView *)yocAdView {
    NSLog(@" yocAdViewDidInitialize ");
}

- (void)yocAdView:(YOCAdView *)yocAdView didFailWithError:(NSError *)error {
    NSLog(@" didFailWithError: %@ ", error);
}

- (void)yocAdViewDidHide:(YOCAdView *)yocAdView {
    NSLog(@" yocAdViewDidHide ");
}

- (void)yocAdViewDidReload:(YOCAdView *)yocAdView {
    NSLog(@" yocAdViewDidReload ");
}

- (void)yocAdViewWillPresentModalViewController:(YOCAdView *)yocAdView {
    NSLog(@" yocAdViewWillPresentModalViewController ");
}

- (void)yocAdViewWillDismissModalViewController:(YOCAdView *)yocAdView {
    NSLog(@" yocAdViewWillDismissModalViewController ");
}


@end

请有人帮忙给我一些尝试,并了解如何从Google DFP广告管理系统返回的广告横幅视图回复点击事件!

ios objective-c admob google-dfp custom-events
1个回答
1
投票

有关如何开发自定义事件的指南here

如果您将AdMob SDK Mediation与广告单元/9999/company.app/channel一起使用,则此广告单元应为DFP广告管理系统中的SDK Mediation creative。您的一个网络应该是Custom Event,具有以下设置:

Parameter: 9A9A9AA99999999A999AA9A99AA99AAAA999A9AA (or whatever your YOC tag is)
Label: YOC Group (This is just a label so you remember what this custom event is for)
Class Name: AppDelegate (You should really implement the custom event in it's own
                         class, and replace the class name with that class)

然后在实现自定义事件时,您可以将serverParameter引用为您已有的YOCTag。

你不想自己实现GADCustomEventBannerDelegate。由您的班级实施GADCustomEventBanner,并添加:

@synthesize delegate

在您的实现的顶部,您可以通过以下方式访问此对象的实例:

self.delegate

您将希望使用该委托告知YOC返回或未能返回广告的自定义事件(以及AdMob Mediation)。基于YOC委托,您的映射可能如下所示:

- (UIViewController *)viewControllerForPresentingYOCAdView {
  NSLog(@" viewControllerForPresentingYOCAdView ");
  return self.root;
}

- (void)yocAdViewDidInitialize:(YOCAdView *)yocAdView {
  NSLog(@" yocAdViewDidInitialize ");
  // Assuming this means the yocAdView was received.
  [self.delegate customEventBanner:self didReceiveAd:yocAdView];
}

- (void)yocAdView:(YOCAdView *)yocAdView didFailWithError:(NSError *)error {
  NSLog(@" didFailWithError: %@ ", error);
  [self.delegate customEventBanner:self didFailAd:error];
}

- (void)yocAdViewDidHide:(YOCAdView *)yocAdView {
  NSLog(@" yocAdViewDidHide ");
}

- (void)yocAdViewDidReload:(YOCAdView *)yocAdView {
  NSLog(@" yocAdViewDidReload ");
  [self.delegate customEventBanner:self didReceiveAd:yocAdView];
}

- (void)yocAdViewWillPresentModalViewController:(YOCAdView *)yocAdView {
  NSLog(@" yocAdViewWillPresentModalViewController ");
  [self.delegate customEventBanner:self clickDidOccurInAd:yocAdView];
  [self.delegate customEventBannerWillPresentModal:self];
  [self.delegate customEventBannerWillLeaveApplication:self];
}

- (void)yocAdViewWillDismissModalViewController:(YOCAdView *)yocAdView {
  NSLog(@" yocAdViewWillDismissModalViewController ");
  [self.delegate customEventBannerWillDismissModal:self];
}

最后,您不想在GADCustomEventBannerDelegate回调方法中调用GADBannerViewDelegate方法。 AdMob会调用这些内容,告诉您调解是通过广告返回的。 GADBannerViewDelegate实现是您的主应用程序的一部分,应该远离您的自定义事件类的实现。

我知道该指南在其GADBannerViewDelegate实现中调用自定义事件委托方法。不同之处在于指南正在编写自定义事件以实现AdMob,因此在指南的上下文中,GADBannerViewDelegate的行为类似于示例中的YOCAdViewDelegate

© www.soinside.com 2019 - 2024. All rights reserved.