web-dev-qa-db-ja.com

iPhoneのiAdsインタースティシャル広告?

私の開発者と私は以前、iPhoneとiPadにインタースティシャル広告をロードしようとしましたが、これをiPadで機能させることしかできませんでした。

テスト中に、インタースティシャルがiPhoneでサポートされていないことがわかりましたが、iOS7のリリース以降、これが可能であると言う人もいます。

しかし、私はこれに関するまともなドキュメントを見つけることができません。このスタックの質問は、私が再び疑問に思っています iPhoneでのiAdとAdmobのインタースティシャル統合

それで、iAdsを使用するiPhoneでフルスクリーンインタースティシャルは可能ですか?

16
pixelkicks

また、iAdからiPhone用のインタースティシャル広告を待っていました。私はついにそれを私のアプリの1つに実装しました、そしてそれは実行されてテスト広告をうまく表示しています。アプリは現在審査中です。承認されたら回答を更新し、実際の広告が配信されているかどうかをテストできます。それまでの間、iAdインタースティシャルを実装するために使用したコードは次のとおりです。

ViewController.h

_@interface ViewController : UIViewController <ADInterstitialAdDelegate> {
    ADInterstitialAd *interstitial;
    BOOL requestingAd;
}

-(void)showFullScreenAd;
_

ViewController.m

_-(void)viewDidLoad {
    requestingAd = NO;
}

// Interstitial iAd
-(void)showFullScreenAd {
    // Check if already requesting ad
    if (requestingAd == NO) {
        [ADInterstitialAd release];
        interstitial = [[ADInterstitialAd alloc] init];
        interstitial.delegate = self;
        self.interstitialPresentationPolicy = ADInterstitialPresentationPolicyManual;
        [self requestInterstitialAdPresentation];
        NSLog(@"interstitialAdREQUEST");
        requestingAd = YES;
    }
}

-(void)interstitialAd:(ADInterstitialAd *)interstitialAd didFailWithError:(NSError *)error {
    interstitial = nil;
    [interstitialAd release];
    [ADInterstitialAd release];
    requestingAd = NO;
    NSLog(@"interstitialAd didFailWithERROR");
    NSLog(@"%@", error);
}

-(void)interstitialAdDidLoad:(ADInterstitialAd *)interstitialAd {
    NSLog(@"interstitialAdDidLOAD");
    if (interstitialAd != nil && interstitial != nil && requestingAd == YES) {
        [interstitial presentFromViewController:self];
        NSLog(@"interstitialAdDidPRESENT");
    }
}

-(void)interstitialAdDidUnload:(ADInterstitialAd *)interstitialAd {
    interstitial = nil;
    [interstitialAd release];
    [ADInterstitialAd release];
    requestingAd = NO;
    NSLog(@"interstitialAdDidUNLOAD");
}

-(void)interstitialAdActionDidFinish:(ADInterstitialAd *)interstitialAd {
    interstitial = nil;
    [interstitialAd release];
    [ADInterstitialAd release];
    requestingAd = NO;
    NSLog(@"interstitialAdDidFINISH");
}
_

ユーザーが特定のアクションを実行した後、-(void)showFullScreenAdを呼び出すだけです。詳細については、 IViewController iAd Additions Reference を参照してください。

編集:01/03/14アプリのアップデートが承認され、12時間公開されました。現時点では、インタースティシャルiAdをまだ受け取っていません。 iPhoneのインタースティシャル広告の在庫が不足しているか、iTunesConnectのiAdモジュールで受け取った次のメッセージと関係がある可能性があります。メッセージは次のとおりです

アプリ[アプリ名]を承認のために送信すると、アプリネットワークで使用するためにiAdによってレビューされ、iAd広告主から広告を受信するための適切性が判断されます。アプリが承認されると、アプリで実行される広告の収益を得る準備が整います。

これまでこのメッセージを受け取ったことがありません。通常、App Storeでアップデートがリリースされるとすぐに、「アプリは広告を受信できるようになりました」というメッセージが表示されます。これは、アプリにインタースティシャル広告が新しく実装されたか、AppleがiAdプロシージャの一部を更新したためです。

インタースティシャルiAdの受信を開始した場合は、回答を再度更新します。それまでの間、私のアプリで自分でテストすることができます + Quotes 。上記のコードが呼び出され、ユーザーがアプリ内でFacebookを介して共有すると、インタースティシャル広告が表示されます。

編集:01/07/14 iAdに直接連絡し、今日応答を受け取りました

こんにちはダニエル、初期の広告掲載率はiOS 7でのインタースティシャルの最近のリリースを反映します。広告配信を増やしていくので、しばらくお待ちください。まだ行っていない場合は、アプリに標準の縦向きと横向きのiAdバナーを統合して、利用可能なすべてのタイプの広告枠を活用することをお勧めします。最後に、今後の参考のために、承認のためにアプリを送信すると、iAdによってレビューされ、iAd広告主から広告を受信するための適切性が判断されます。そのため、新しいiAd対応アプリが広告の表示回数を受け取り始めるまでに数日かかる場合があります。よろしくお願いいたします。iAdアプリネットワークサポート

そのため、iPhone用のインタースティシャルiAdはiOS 7.0以降で動作しますが、現在、広告掲載率は低くなっています。

20
Daniel Storm

私の元の答えは古くなり始めているので、ここに新しいSwift実装:

この実装ではManualADInterstitialPresentationPolicyを使用するため、インタースティシャルを独自の間隔で表示できます。インタースティシャルを手動で提示する場合、それ自体を閉じるための独自の閉じるボタンが読み込まれません。したがって、私が行ったことは、インタースティシャルを提示するためにUIViewを作成し、インタースティシャルのデリゲートメソッドを使用してUIViewを閉じることです。テスト時に、iAdネットワークからの広告の受信との不整合が依然として発生します。広告を受け取ったり、ロードに失敗して新しい広告をリクエストしたり、まったく何も起こらない場合があります。これは、iAdのインタースティシャルの性質のようです。

import UIKit
import iAd // Import iAd

class ViewController: UIViewController, ADInterstitialAdDelegate { // Include the delegate

    var iAdInterstitial = ADInterstitialAd() // Our ad
    var iAdInterstitialView = UIView() // View to present our ad in
    var adLoaded = false // Bool to keep track if an ad is loaded or not

    override func viewDidLoad() {
        super.viewDidLoad()
        setupAd()
    }

    func setupAd() {
        // Set presentation to manual so we can choose when to present the interstitial
        // Setting this will also fetch an interstitial ad for us
        self.interstitialPresentationPolicy = ADInterstitialPresentationPolicy.Manual
        iAdInterstitial.delegate = self // Set the delegate

        // Make our view the same size as the view we will be presenting in
        iAdInterstitialView.frame = self.view.bounds
    }

    func requestNewAd() {
        // This will fetch an ad for us
        ViewController.prepareInterstitialAds()
        println("Requesting new ad")
    }

    @IBAction func presentAdButton(sender: AnyObject) {
        if (adLoaded) {
            // We have an ad that is loaded so lets present it
            self.view.addSubview(iAdInterstitialView)
            iAdInterstitial.presentInView(iAdInterstitialView)
        }
        else {
            // No ad has been loaded
            println("Ad not loaded")
        }
    }

    func interstitialAdDidUnload(interstitialAd: ADInterstitialAd!) {
        // Kinda works as expected
        // Sometimes is called prematurely
        // Sometimes takes minutes after ad is dismissed to be called
        println("interstitialAdDidUnload")

        // Get new ad
        adLoaded = false
        iAdInterstitialView.removeFromSuperview()
        requestNewAd()
    }

    func interstitialAd(interstitialAd: ADInterstitialAd!, didFailWithError error: NSError!) {
        // Failed to load ad so lets try again
        println("didFailWithError: \(error)")
        requestNewAd()
    }

    func interstitialAdWillLoad(interstitialAd: ADInterstitialAd!) {
        // There is an ad and it has begun to download
        println("interstitialAdWillLoad")
    }

    func interstitialAdDidLoad(interstitialAd: ADInterstitialAd!) {
        // We got an ad
        println("interstitialAdDidLoad")
        adLoaded = true
    }

    func interstitialAdActionShouldBegin(interstitialAd: ADInterstitialAd!, willLeaveApplication willLeave: Bool) -> Bool {
        println("interstitialAdActionShouldBegin")
        return true;
    }

    func interstitialAdActionDidFinish(interstitialAd: ADInterstitialAd!) {
        // Done with this ad. Lets get a new one
        println("interstitialAdActionDidFinish")
        iAdInterstitialView.removeFromSuperview()
        adLoaded = false
        requestNewAd()
    }
2
Daniel Storm