Rewarded

Display Rewarded ads

To display rewarded 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) BideaseRewarded* rewarded;

@end

NS_ASSUME_NONNULL_END

@implementation ViewController

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

    return self;
}

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

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

        [bid onWin:nil];

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

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

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

#pragma mark - BideaseShowDelegate methods

-(void)onAdWillAppear:(BideaseAd*)ad providerId:(int)providerId sender:(BideaseAdvertising*)sender
{
    NSLog(@"onAdWillAppear");
}

-(void)onAdDidDisappear:(BideaseAd*)ad providerId:(int)providerId sender:(BideaseAdvertising*)sender
{
    NSLog(@"onAdDidDisappear");
}

-(UIViewController*)viewControllerForPresentingModalView
{
    return self;
}

-(void)onAd:(BideaseAd*)ad didReceiveReward:(int)reward currency:(NSString*)gameCurrency providerId:(int)providerId  sender:(BideaseAdvertising*)sender
{
    NSLog(@"onAddidReceiveReward");
}

-(void)onAdClicked:(BideaseAd*)ad providerId:(int)providerId sender:(BideaseAdvertising*)sender
{
    NSLog(@"onAdClicked");
}

-(void)onAdReported:(BideaseAd*)ad reason:(NSString*)reason providerId:(int)providerId sender:(BideaseAdvertising*)sender
{
    NSLog(@"onAdReported");
}

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

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

@end
import Bidease

class ViewController: UIViewController , BideaseShowDelegate {

    let rewarded:BideaseRewarded

    func showAd() {

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

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

            bid.onWin(nil)

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

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

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

    required init?(coder: NSCoder) {
        rewarded = BideaseRewarded(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
    }
  
    func onAd(_ ad: BideaseAd,
          didReceiveReward reward: Int,
          currency gameCurrency: String,
          providerId: Int,
          sender: BideaseAdvertising) {
        print("onAdDidReceiveReward")
    }
}
import SwiftUI
import Bidease

final class BideaseRewardedController: NSObject, ObservableObject, BideaseShowDelegate {

    private let rewarded: BideaseRewarded

    override init() {
        self.rewarded = BideaseRewarded(placementId: "PlacementID")
        super.init()
    }

    func showAd(from viewController: UIViewController) {

        rewarded.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.rewarded.load(with: bid) { ad, error in

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

                self.rewarded.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
    }

    func onAd(
        _ ad: BideaseAd,
        didReceiveReward reward: Int,
        currency gameCurrency: String,
        providerId: Int,
        sender: BideaseAdvertising
    ) {
        print("onAdDidReceiveReward \(reward) \(gameCurrency)")
    }
}

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

//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 rewarded = BideaseRewardedController()
    @State private var presenter: UIViewController?

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

            Button("Show Rewarded Ad") {
                if let presenter {
                    rewarded.showAd(from: presenter)
                }
            }
        }
        .background(
            ViewControllerResolver { vc in
                presenter = vc
            }
        )
    }
}