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()
}
}