1

Google AdMobs DFP を使用して、他のネットワークからメディエーション バナーを配信しています。Millennial と InMobi は問題なく追加しましたが、DFP 用のアダプターを持たないネットワーク (YOC グループ) を追加する必要があるため、「カスタム イベント バナー」を実装する必要があります。サポートされていないメディエーター ネットワークをカスタム イベントで実装するためのガイドと技術文書を読みましたが、2 つの SDK (Google AdMobs SDK とメディエーター ネットワークの SDK) を接続する方法をまだ理解できません。

サンプル広告に yoc 広告 ID (「9A9A9AA99999999A999AA9A99AA99AAAA999A9AA」の形式) をハードコードして要求を送信すると、アダプター (YOC) を持たないネットワークが機能します。バナーは正常に戻り、YOC SDK を使用してインタラクティブ/リッチ メディア広告を表示します。

ただし、私のアプリでは、Google AdMobs SDK を DFP に使用するためのリクエストを送信する Google DFP アカウント ID (「/9999/company.app/channel」の形式) しかありません。次に、リクエストは特定のメディエーター広告ネットワークを含むレスポンスを返し、バナー広告のリクエストを試みます。私の現在の設定では、YOC が DFP で 100% の広告を配信しています。

問題: YOC 広告ネットワークからバナー広告が返され、画面に表示されます。ページのインプレッションを (DFP を使用して) 登録しますが、yoc 広告ビューの初期化パラメーターをハードコーディングしたかのように、タッチ/プレス イベントに応答しません。ただし、(初期化時に) yoc 広告 ID をハードコードすることはできません。これは、1 つのバナー広告に対してのみ機能し、各チャネルの特定の広告ごとに異なるバナーが必要になるためです。

以下は、コンソールにログを記録し、メソッドが呼び出されていることを示すために、メソッドで NSLogs のみを使用して実装しようとしているサンプル コードです。これは非常に基本的なアプリであり、読みやすいようにすべてのコードを 1 か所にまとめています。

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から広告バナービューを返す方法を試してみてください。

4

1 に答える 1

1

カスタム イベントを作成する方法については、こちらのガイドを参照してください。

広告ユニットでAdMob SDK メディエーションを使用している場合/9999/company.app/channel、この広告ユニットはSDK Mediation creativeDFP 内にある必要があります。ネットワークの 1 つは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

そのデリゲートを使用して、カスタム イベント (および AdMob メディエーション) に YOC が広告を返したか、返さなかったことを伝える必要があります。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です。

于 2013-04-17T23:47:32.303 に答える