Documentation

Interstitial

Interstitial implementation

📘

First you need to load ad from BidMachine

BidMachineSdk.shared.interstitial { [weak self] (interstitial, error) in
    guard error == nil else { return }
    
    self?.bidmachineInterstitial = interstitial;
    self?.bidmachineInterstitial.delegate = self
    self?.bidmachineInterstitial.controller = viewController
    self?.bidmachineInterstitial?.loadAd()
}
__weak typeof(self) weakSelf = self;
[BidMachineSdk.shared interstitial:nil :^(BidMachineInterstitial *interstitial, NSError *error) {
    if (error) {
        return;
    }
    weakSelf.bidmachineInterstitial = interstitial;
    weakSelf.bidmachineInterstitial.controller = weakSelf;
    weakSelf.bidmachineInterstitial.delegate = weakSelf;
    [weakSelf.bidmachineInterstitial loadAd];
}];

📘

After loading the ad, you need to load GAM with BidMachine ad parameters.

❗️

Don't forget to install appEventDelegate

❗️

GAM request params should contains price with x.xx format

let priceFormatter: NumberFormatter = {
    let formatter = NumberFormatter()
    formatter.numberStyle = .decimal
    formatter.locale = Locale(identifier: "en_US_POSIX")
    formatter.roundingMode = .ceiling
    formatter.positiveFormat = "0.00"
    return formatter
}()

// MARK: BidMachineAdDelegate

func didLoadAd(_ ad: BidMachineAdProtocol) {
    var targeting = [String: String]()
    targeting["bm_pf"] = self.priceFormatter.string(from: NSNumber(value: ad.auctionInfo.price))
    
    let request = GAMRequest()
    request.customTargeting = targeting
    
    GADInterstitialAd.load(
        withAdUnitID: "unit id",
        request: request,
        completionHandler: { interstitial, error in
            if let error {
                // FAIL LOAD
            } else {
                self.googleInterstitial = interstitial
                self.googleInterstitial?.appEventDelegate = self
            }
        }
    )
}
- (NSNumberFormatter *)formatter {
    static NSNumberFormatter *roundingFormater = nil;
    if (!roundingFormater) {
        roundingFormater = [NSNumberFormatter new];
        roundingFormater.numberStyle = NSNumberFormatterDecimalStyle;
        roundingFormater.locale = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"];
        roundingFormater.roundingMode = NSNumberFormatterRoundCeiling;
        roundingFormater.positiveFormat = @"0.00";
    }
    return roundingFormater;
}

#pragma mark - BidMachineAdDelegate

- (void)didLoadAd:(id<BidMachineAdProtocol> _Nonnull)ad {
    GAMRequest *googleRequest = [GAMRequest request];
    googleRequest.customTargeting = @{
        @"bm_pf" : [self.formatter stringFromNumber:@(ad.auctionInfo.price)]
    };
    
    __weak typeof(self) weakSelf = self;
    [GAMInterstitialAd loadWithAdManagerAdUnitID:@UNIT_ID
                                         request:googleRequest
                               completionHandler:^(GAMInterstitialAd * _Nullable interstitialAd,
                                                   NSError * _Nullable error) {
        if (error) {
            // FAIL LOAD
        } else {
            // WAIT AD EVENT DELEGATE
            weakSelf.googleInterstitial = interstitialAd;
            weakSelf.googleInterstitial.appEventDelegate = weakSelf;
        }
    }];
}

📘

If the GAM Ad loads successfully, you need to listen events delegate.
If the event name matches the registered event for BidMachine, then you need to show the ad via BidMachine. If it does not match, then show through GAM

// MARK: GADAppEventDelegate

func interstitialAd(_ interstitialAd: GADInterstitialAd, didReceiveAppEvent name: String, withInfo info: String?) {
    switch name {
    case "bidmachine-banner":
        // SHOW BidMachine
    default:
        // SHOW GADInterstitialAd
    }
}
#pragma mark - GADAppEventDelegate

- (void)interstitialAd:(nonnull GADInterstitialAd *)interstitialAd
    didReceiveAppEvent:(nonnull NSString *)name
              withInfo:(nullable NSString *)info {
    
    if ([name isEqualToString:@"bidmachine-interstitial"]) {
        // SHOW BidMachine
    } else {
        // SHOW GADInterstitialAd
    }
}