Objective-C


引入 SDK

#import

#import


@interface ViewController ()

@property (nonatomic, strong) MFPreRollView *preroll;

@property (weak, nonatomic) IBOutlet UIView *videoView;

@property (nonatomic, strong) AVPlayerViewController *playerViewController;

@end

@implementation ViewController

- (void)viewDidLoad {

    [super viewDidLoad];

    [self setupPlayerViewController];

    [self setBanner];

}

- (void)setupPlayerViewController {

    self.playerViewController = [[AVPlayerViewController alloc] init];

    NSURL *videoURL = [NSURL URLWithString:@"https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4"];

    AVPlayer *player = [AVPlayer playerWithURL:videoURL];

    self.playerViewController.player = player;

    UIView *playerView = self.playerViewController.view;

    playerView.frame = self.videoView.bounds;

    [self.videoView addSubview:playerView];

    [self addChildViewController:self.playerViewController];

    [self.playerViewController didMoveToParentViewController:self];

}

- (void)setBanner {

    if (!self.playerViewController) return;

    self.preroll = [[MFPreRollView alloc] initWithPlayerViewController:self.playerViewController];

    [self.preroll debugInfo:@"info"];

    self.preroll.delegate = self;

    [self.view addSubview:self.preroll];

    // 測試單廣告

    // [self.preroll setPreRollZoneID:@"22114" getViewController:self];

    // 測試多廣告

    [self.preroll setVMAPZoneID:@[@"22114", @"22114", @"22114"] getViewController:self];

    [self.preroll setPlayer];

    NSLog(@"SDK Version: %@", [MFPreRollView sdkVersion]);

}

#pragma mark - MFPreRollDelegate

- (void)onClickAd {

    NSLog(@"點擊廣告");

}

- (void)onSuccessToVast {

    NSLog(@"廣告載入成功!");

}

- (void)onStartPlaying {

    NSLog(@"開始播放廣告!");

}

- (void)readyPlayVideo {

    [self.preroll removeFromSuperview];

    self.preroll = nil;

    NSLog(@"廣告播放完成");

}

- (void)onFailedToVast {

    [self.preroll removeFromSuperview];

    self.preroll = nil;

    NSLog(@"廣告載入失敗");

    [self.playerViewController.player play];

}

@end

 

Swift

引入 SDK

import iMFADVAST

import AVKit


class ViewController: UIViewController {

    

    var preroll: MFPreRollView?

    @IBOutlet weak var videoView: UIView!

    var playerViewController: AVPlayerViewController?

    

    override func viewDidLoad() {

        super.viewDidLoad()

        

        setupPlayerViewController()

        setBanner()

    }

    

    func setupPlayerViewController() {

        

        playerViewController = AVPlayerViewController()

        let videoURL = URL(string: "https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4")!

        let player = AVPlayer(url: videoURL)

        playerViewController?.player = player

        

        guard let playerView = playerViewController?.view else { return }

        playerView.frame = videoView.bounds

        videoView.addSubview(playerView)

        

        addChild(playerViewController!)

        playerViewController?.didMove(toParent: self)

    }

    

    func setBanner() {

        

        guard let playerViewController = playerViewController else {

            return

        }

        preroll = MFPreRollView(playerViewController: playerViewController)

        preroll?.debugInfo("info")

        preroll?.delegate = self

        self.view.addSubview(preroll!)

        

        // 測試單廣告

//        preroll?.setPreRollZoneID("22114", getViewController: self)

        // 測試多廣告

        preroll?.setVMAPZoneID(["22114", "22114", "22114"], getViewController: self)

        preroll?.setPlayer() // 立即開始播放廣告

        print(MFPreRollView.sdkVersion())

    }

}

extension ViewController: MFPreRollDelegate {

    

    func onClickAd() {

        

        print("點擊廣告")

    }

    

    func onSuccessToVast() {

        

        print("廣告載入成功!")

    }

    

    func onStartPlaying() {

        

        print("開始播放廣告!")

    }

    

    func readyPlayVideo() {

        

        preroll?.removeFromSuperview()

        preroll = nil

        print("廣告播放完成")

    }

    

    func onFailedToVast() {

        

        preroll?.removeFromSuperview()

        preroll = nil

        print("廣告載入失敗")

        // 如果廣告載入失敗

        playerViewController?.player?.play()

    }

}

 

SwiftUI

引入 SDK

import iMFADVAST

import AVKit


struct ContentView: View {

    @StateObject private var preRollController = PreRollAdController()

    var body: some View {

        ZStack {

            if let playerVC = preRollController.playerViewController {

                VideoPlayerView(playerViewController: playerVC)

                    .aspectRatio(16/9, contentMode: .fit)

                    .frame(maxWidth: .infinity)

                    .frame(maxHeight: .infinity)

                    .ignoresSafeArea(.container, edges: [.top, .bottom])

                    .onAppear {

                        preRollController.setupPreRoll()

                    }

            } else {

                ProgressView()

                    .onAppear {

                        preRollController.setupPreRoll()

                    }

            }

        }

    }

}

struct VideoPlayerView: UIViewControllerRepresentable {

    let playerViewController: AVPlayerViewController

    func makeUIViewController(context: Context) -> AVPlayerViewController {

        return playerViewController

    }

    func updateUIViewController(_ uiViewController: AVPlayerViewController, context: Context) {

        // 無需更新

    }

}

class PreRollAdController: NSObject, ObservableObject, MFPreRollDelegate {

    

    @Published var playerViewController: AVPlayerViewController? = nil

    var preRollView: MFPreRollView?

    let player = AVPlayer(url: URL(string: "https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4")!)

    func setupPreRoll() {

        let playerVC = AVPlayerViewController()

        playerVC.player = player

        self.playerViewController = playerVC

        preRollView = MFPreRollView(playerViewController: playerVC)

        preRollView?.debugInfo("info")

        preRollView?.delegate = self

        if let playerView = playerVC.view, let preRollView = preRollView {

            playerView.addSubview(preRollView)

            preRollView.translatesAutoresizingMaskIntoConstraints = false

            NSLayoutConstraint.activate([

                preRollView.topAnchor.constraint(equalTo: playerView.topAnchor),

                preRollView.leadingAnchor.constraint(equalTo: playerView.leadingAnchor),

                preRollView.trailingAnchor.constraint(equalTo: playerView.trailingAnchor),

                preRollView.bottomAnchor.constraint(equalTo: playerView.bottomAnchor)

            ])

        }

        // 測試單廣告

        preRollView?.setPreRollZoneID("22114", getViewController: playerVC)

        // 測試多段 VMAP 廣告

//        preRollView?.setVMAPZoneID(["22114", "22114", "22114"], getViewController: playerVC)

        preRollView?.setPlayer()

        print(MFPreRollView.sdkVersion())

    }

    // MARK: - MFPreRollDelegate

    func onClickAd() {

        print("點擊廣告")

    }

    func onSuccessToVast() {

        print("廣告載入成功!")

    }

    func onStartPlaying() {

        print("開始播放廣告!")

    }

    func readyPlayVideo() {

        preRollView?.removeFromSuperview()

        preRollView = nil

        print("廣告播放完成")

    }

    func onFailedToVast() {

        preRollView?.removeFromSuperview()

        preRollView = nil

        print("廣告載入失敗")

        player.play()

    }

}