Skip to content

Native_Ad_iOS

AdGeneration edited this page Apr 10, 2017 · 21 revisions

iOS SDK ネイティブ広告

はじめに

開発環境にXcodeを使用することを前提とします。

対応バージョン

iOS 7.0以降

導入の流れ

  1. SDKをダウンロードします
  2. 例を参考に広告表示の実装を行います

1. SDKをダウンロードする

iOS SDK Getting Started / バナー広告からご確認ください。

2. 広告表示を実装する

loadRequestを行う前に、ネイティブ広告オブジェクトをdelegateメソッドで取得するためのsetUsePartsResponseの設定を行います。

self.adg = [[ADGManagerViewController alloc] initWithAdParams:adgparam adView:_adView]; // バナー広告と併用する場合は、adViewに配置するviewを指定してください
self.adg.delegate = self;
[self.adg setFillerRetry:NO];
[self.adg setUsePartsResponse:YES]; // ネイティブ広告オブジェクトを取得する
[self.adg loadRequest];

ネイティブ広告オブジェクトが取得できた場合、delegateメソッドの以下が呼び出されます。

- (void)ADGManagerViewControllerReceiveAd:(ADGManagerViewController *)adgManagerViewController
                        mediationNativeAd:(id)mediationNativeAd

mediationNativeAdからネイティブ広告オブジェクトが取得できます。
ネイティブ広告オブジェクトはADGNativeAdクラスです。
参照するために、該当クラスにimportを追加してください。

#import <ADG/ADGNativeAd.h>

id型からADGNativeAdへキャストし、クラス判定を行ってからアクセスしてください。

ADGNativeAdからネイティブ広告パーツを取得するパラメータは以下の通りです。

  • ADGNativeAd.title.text: タイトル
  • ADGNativeAd.mainImage.url: メイン画像(長方形画像)URL
  • ADGNativeAd.iconImage.url: アイコン画像(正方形画像)URL
  • ADGNativeAd.desc.value: リード文
  • ADGNativeAd.ctatext.value: CTA(Call to action)のテキスト
  • ADGNativeAd.sponsored.value: 広告主

実装例

アプリに応じてカスタマイズください(画像ロード処理の非同期化など)。

作成される広告イメージ

- (void)ADGManagerViewControllerReceiveAd:(ADGManagerViewController *)adgManagerViewController mediationNativeAd:(id)mediationNativeAd {

    if ([mediationNativeAd isKindOfClass:[ADGNativeAd class]]) {
        ADGNativeAd *nativeAd = (ADGNativeAd *)mediationNativeAd;

        // インフォメーションアイコンのデフォルト表示OFF
        // デフォルト表示しない場合は必ずADGInformationIconViewの設置を実装してください
        adgManagerViewController.informationIconViewDefault = false;

        UIView *nativeAdView = [self createAdView:nativeAd];

        // クリックやローテーションの制御に必要なため必ず記述してください
        [_adg delegateViewManagement:nativeAdView nativeAd:nativeAd];

        [_adView addSubview:nativeAdView];
    }
}

- (UIView *)createAdView:(ADGNativeAd *)nativeAd {
    // アイコン画像
    UIImageView *iconImageView = [[UIImageView alloc] initWithFrame:CGRectMake(4, 4, 30, 30)];
    if (nativeAd.iconImage.url.length > 0) {
        NSURL *iconImageUrl = [NSURL URLWithString:nativeAd.iconImage.url];
        NSData *iconImageData = [NSData dataWithContentsOfURL:iconImageUrl];
        iconImageView.image = [UIImage imageWithData:iconImageData];
        iconImageView.contentMode = UIViewContentModeScaleAspectFit;
    }

    // タイトル
    UILabel *titleLbl = [[UILabel alloc] initWithFrame:CGRectMake(38, 4, 258, 15)];
    if (nativeAd.title.text.length > 0) {
        titleLbl.numberOfLines = 1;
        titleLbl.font = [titleLbl.font fontWithSize:13];
        titleLbl.text = nativeAd.title.text;
    }

    // 広告マーク
    UILabel *adTextLabel = [[UILabel alloc] initWithFrame:CGRectMake(40, 20, 28, 14)];
    adTextLabel.textColor = [UIColor lightGrayColor];
    adTextLabel.font = [adTextLabel.font fontWithSize:11];
    adTextLabel.text = @"広告";

    // リード文
    UILabel *descriptionLbl = [[UILabel alloc] initWithFrame:CGRectMake(4, 30, 296, 40)];
    if (nativeAd.desc.value.length > 0) {
        descriptionLbl.numberOfLines = 2;
        descriptionLbl.font = [descriptionLbl.font fontWithSize:11];
        descriptionLbl.text = nativeAd.desc.value;
        descriptionLbl.textColor = [UIColor lightGrayColor];
    }

    // メイン画像
    UIImageView *mainImageView = [[UIImageView alloc] initWithFrame:CGRectMake(4, 64, 292, 156)];
    if (nativeAd.mainImage.url.length > 0) {
        NSURL *mainUrl = [NSURL URLWithString:nativeAd.mainImage.url];
        NSData *mainImageData = [NSData dataWithContentsOfURL:mainUrl];
        mainImageView.image = [UIImage imageWithData:mainImageData];
        mainImageView.contentMode = UIViewContentModeScaleAspectFit;
        mainImageView.clipsToBounds = YES;
    }

    // インフォメーションアイコン
    ADGInformationIconView *infoIconView = [[ADGInformationIconView alloc] initWithNativeAd:nativeAd];
    if (infoIconView) {
        [mainImageView addSubview:infoIconView];
        [infoIconView updateFrameFromSuperview:UIRectCornerTopRight];
    }

    // 広告主
    UILabel *sponsoredLbl = [[UILabel alloc] initWithFrame:CGRectMake(4, 228, 150, 20)];
    sponsoredLbl.numberOfLines = 1;
    sponsoredLbl.font = [sponsoredLbl.font fontWithSize:10];
    sponsoredLbl.textColor = [UIColor colorWithRed:0.7 green:0.7 blue:0.7 alpha:1.0];
    if (nativeAd.sponsored.value.length > 0) {
        sponsoredLbl.text = [NSString stringWithFormat:@"sponsored by %@", nativeAd.sponsored.value];
    } else {
        sponsoredLbl.text = @"sponsored";
    }

    // CTA
    UIButton *actionBtn = [[UIButton alloc] initWithFrame:CGRectMake(178, 223, 114, 25)];
    if (nativeAd.ctatext.value.length > 0) {
        [actionBtn setTitle:nativeAd.ctatext.value forState:UIControlStateNormal];
        [actionBtn setTitleColor:[UIColor colorWithRed:0.12 green:0.56 blue:1.00 alpha:1.0]
                        forState:UIControlStateNormal];
        [actionBtn.titleLabel setFont:[UIFont boldSystemFontOfSize:14]];
        actionBtn.backgroundColor = [UIColor whiteColor];
        actionBtn.layer.borderWidth = 1.0f;
        actionBtn.layer.borderColor = [[UIColor colorWithRed:0.12 green:0.56 blue:1.00 alpha:1.0] CGColor];
        actionBtn.layer.cornerRadius = 5.0f;
        actionBtn.titleEdgeInsets = UIEdgeInsetsMake(1.0f, 1.0f, 1.0f, 1.0f);
        actionBtn.titleLabel.adjustsFontSizeToFitWidth = YES;
        [nativeAd setTapEvent:actionBtn];  // ボタンへのタップ反応追加
    }

    UIView *nativeAdView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 300, 250)];
    [nativeAdView addSubview:iconImageView];
    [nativeAdView addSubview:titleLbl];
    [nativeAdView addSubview:adTextLabel];
    [nativeAdView addSubview:mainImageView];
    [nativeAdView addSubview:descriptionLbl];
    [nativeAdView addSubview:sponsoredLbl];
    [nativeAdView addSubview:actionBtn];

    return nativeAdView;
}

注意事項

  • 広告破棄のタイミングにて、delegateViewManagementにセットされたUIViewインスタンスに対してremoveFromSuperViewが呼び出されます。
  • 広告の破棄は画面のdealloc等、広告の表示が終わるタイミングで行ってください。
  • テストではタップの確認も行ってください。
  • ADGManagerViewControllerクラスは1つの広告枠に対して1つのインスタンスを生成してください。
  • 広告枠の設定によっては各ネイティブ広告オブジェクトのパラメータの値がnilになる場合があります。 例えば、GunosyAdsではCTA取得できません。画像の縦横サイズも含め、すべてがoptionalな値です。画像の縦横サイズも含め、すべてがoptionalな値です。
  • PR表記をつける等して広告であることを示してください。
  • 画像を歪めることはしないでください。
  • レスポンスにSponsoredがある場合は表示してください。
  • Facebook Audience Networkも併用配信したい場合は、別途SDK連携が必要になります。Facebook Audience Network ネイティブ広告 SDK連携 iOS

インフォメーションアイコン(オプトアウトリンク)について

※ 2016/12/8(v2.4.2)より必須項目となりました

v2.4.2より、ターゲティングを行っている広告の場合にはデフォルトでインフォメーションアイコン(オプトアウトリンク)が表示されるようになります(ターゲティングを行っていない広告の場合は表示されません)。
インフォメーションアイコンはタップすることで、DSP事業者が指定したオプトアウトWebサイトページへ遷移します。
オプトアウトリンクはユーザーが広告のターゲティングをオプトアウト(拒否)することにより、ユーザーに関する情報の関連付けを防ぐことを可能とし、設置することで配信できるDSP事業者が増加します。

表示される場所は、delegateViewManagement:nativeAd:で指定したViewの右上に設置されます。
デフォルトの表示位置から変更する場合は、ADGManagerViewController.informationIconViewDefaultを設定し、ADGInformationIconViewを生成してください。
ターゲティングを行っていない広告の場合は、ADGInformationIconViewを生成してもアイコンは表示されません。

テスト用ID

テスト広告の表示に使用するAd Genrationの広告枠IDです。
このIDをセットしたままアプリをリリースしないようご注意ください。

ID 説明
48635 RTB/Gunosy/自社広告のテスト広告

Home

導入マニュアルのドキュメントはコチラに移行しました。

お手数ですがリンクから遷移してください。 https://docs.sdk.ad-generation.jp/

Clone this wiki locally