Interstitial

Display interstitial ads

To display interstitial ads, use the showAd function as shown in the example below:

#import <Bidease/Bidease.h>

NS_ASSUME_NONNULL_BEGIN

@interface ViewController : UIViewController<BideaseShowDelegate>

@property(nonatomic) BideaseInterstitial* interstitial;

@end

NS_ASSUME_NONNULL_END

@implementation ViewController

- (id)initWithCoder:(NSCoder *)coder
{
    if (self = [super initWithCoder:coder])
    {
        _interstitial = [[BideaseInterstitial alloc]initWithPlacementId:@"PlacementID"];
    }

    return self;
}

-(void)showAd
{
    __weak typeof(self)weakSelf = self;
    [_interstitial bidWithContext:nil bidfloor:nil completion:^(id<BDEAuctionBid> bid, NSString* requestId, NSError* error) {

        if (nil == bid)
        {
            NSLog(@"Bid failed %@", error);
            return;
        }

        [bid onWin:nil];

        [weakSelf.interstitial loadWithBid:bid completion:^(id<BideaseAd> ad, NSError* error) {

            if (nil == ad)
            {
                NSLog(@"Load failed %@", error);
                return;
            }

            ViewController* strongSelf = weakSelf;
            if (nil != strongSelf)
            {
                [strongSelf.interstitial showWithDelegate:strongSelf];
            }
        }];
    }];
}

#pragma mark - BideaseShowDelegate methods

-(void)onAdWillAppear:(id<BideaseAd>)ad sender:(BideaseAdvertising*)sender
{
    NSLog(@"onAdWillAppear");
}

-(void)onAdDidDisappear:(id<BideaseAd>)ad sender:(BideaseAdvertising*)sender
{
    NSLog(@"onAdDidDisappear");
}

-(void)onAdClicked:(id<BideaseAd>)ad error:(NSError*)error sender:(BideaseAdvertising*)sender
{
    NSLog(@"onAdClicked");
}

-(void)onAdReported:(id<BideaseAd>)ad reason:(NSString *)reason sender:(BideaseAdvertising*)sender
{
    NSLog(@"onAdReported");
}

-(BOOL)shouldShowAd:(BideaseAdvertising*)sender
{
    return YES;
}

-(void)onAdFailedToAppear:(id<BideaseAd>)ad error:(NSError*)error sender:(BideaseAdvertising *)sender
{
    NSLog(@"onAdFailedToAppear %@", error.localizedDescription);
}

@end
import Bidease

class ViewController: UIViewController , BideaseShowDelegate {

    let interstitial:BideaseInterstitial

    func showAd() {

        let inter = interstitial
        inter.bid(withContext: nil, bidfloor: nil) { [weak self] bid, requestId, error in

            guard let bid = bid else {
                print("Bid failed")
                return
            }

            bid.onWin(nil)

            inter.load(with: bid) { ad, error in

                guard nil != ad else {
                    print("Load failed")
                    return
                }

                if let delegate = self {
                    inter.show(with: delegate)
                }
            }
        }
    }

    required init?(coder: NSCoder) {
        interstitial = BideaseInterstitial(placementId: "PlacementID")

        super.init(coder: coder)
    }

    func onAdWillAppear(_ ad: any BideaseAd, sender: BideaseAdvertising) {
        print("onAdWillAppear");
    }

    func onAdDidDisappear(_ ad: any BideaseAd, sender: BideaseAdvertising) {
        print("onAdFailedToAppear")
    }

    func onAdFailed(toAppear ad: (any BideaseAd)?, error: Error, sender: BideaseAdvertising) {
        print("onAdFailedToAppear")
    }

    func onAdClicked(_ ad: any BideaseAd, sender: BideaseAdvertising) {
        print("onAdClicked");
    }

    func shouldShowAd(_ sender: BideaseAdvertising) -> Bool {
        return true
    }
}
import SwiftUI
import Bidease

final class BideaseInterstitialController: NSObject, ObservableObject, BideaseShowDelegate {

    private let interstitial: BideaseInterstitial

    override init() {
        self.interstitial = BideaseInterstitial(placementId: "PlacementID")
        super.init()
    }

    func showAd(from viewController: UIViewController) {

        interstitial.bid(withContext: nil, bidfloor: nil) { [weak self] bid, requestId, error in

            guard let self, let bid else {
                print("Bid failed")
                return
            }

            bid.onWin(nil)

            self.interstitial.load(with: bid) { ad, error in

                guard ad != nil else {
                    print("Load failed")
                    return
                }

                self.interstitial.show(with: viewController, delegate: self)
            }
        }
    }

    // MARK: - BideaseShowDelegate

    func onAdWillAppear(_ ad: any BideaseAd, sender: BideaseAdvertising) {
        print("onAdWillAppear")
    }

    func onAdDidDisappear(_ ad: any BideaseAd, sender: BideaseAdvertising) {
        print("onAdDidDisappear")
    }

    func onAdFailed(toAppear ad: (any BideaseAd)?, error: Error, sender: BideaseAdvertising) {
        print("onAdFailedToAppear")
    }

    func onAdClicked(_ ad: any BideaseAd, sender: BideaseAdvertising) {
        print("onAdClicked")
    }

    func shouldShowAd(_ sender: BideaseAdvertising) -> Bool {
        true
    }
}

//////////////////////////////////////////////////////////////////

//UIViewController Provider for SwiftUI

struct ViewControllerResolver: UIViewControllerRepresentable {

    let onResolve: (UIViewController) -> Void

    func makeUIViewController(context: Context) -> UIViewController {
        let vc = UIViewController()
        DispatchQueue.main.async {
            onResolve(vc)
        }
        return vc
    }

    func updateUIViewController(_ uiViewController: UIViewController, context: Context) {}
}

////////////////////////////////////////////////////////////////////

//USAGE

struct ContentView: View {

    @StateObject private var interstitial = BideaseInterstitialController()
    @State private var presenter: UIViewController?

    var body: some View {
        VStack(spacing: 20) {

            Button("Show Interstitial") {
                if let presenter {
                    interstitial.showAd(from: presenter)
                }
            }
        }
        .background(
            ViewControllerResolver { vc in
                presenter = vc
            }
        )
    }
}

Placement ID & floors

  • Placement ID: use the format AdFormat_ecpm_X.X , where ecpm is the required separator and X.X is the floor price value (any number).
    • Example: Interstitial_ecpm_1.3 ➡️ floor price = $1.3

Tips

  • Always call show on the main thread.
  • Handle both bid and load failures; avoid retry loops without backoff.
  • Keep the interstitial instance alive (e.g., as a view controller property) across the full load/show lifecycle.