# Ads Plugin for ByteArk Player SDK iOS
# คุณสมบัติ
- Integrated Google IMA SDK เข้ากับ ByteArk Player SDK for iOS เพื่อให้สามารถเล่นวิดีโอโฆษณาในรูปแบบ VAST ได้
# ความต้องการ ของ Plugin
- iOS 14 หรือสูงกว่า
- XCode
- Swift 5.5
- ByteArkPlayerSDK version >= 0.2.1
# การติดตั้ง Plugin
# CocoaPods (แนะนำ)
CocoaPods (opens new window) เป็นเครื่องมือจัดการ dependencies สำหรับโปรเจกต์ Cocoa คุณสามารถติดตั้งได้ด้วยคำสั่งดังนี้:
gem install cocoapods
1
การติดตั้ง Ads Plugin ด้วย Cocoapods
- รันคำสั่งต่อไปนี้เพื่อเพิ่ม ByteArk Player SDK สำหรับ iOS ลงใน Cocoapods repo:
pod repo add byteark-player-sdk-ios-specs https://github.com/byteark/byteark-player-sdk-ios-specs.git
1
- แก้ไขไฟล์ Podfile โดยเพิ่มบรรทัดต่อไปนี้ที่จุดเริ่มต้นของไฟล์:
source 'https://github.com/CocoaPods/Specs.git'
source 'https://github.com/byteark/byteark-player-sdk-ios-specs.git'
1
2
2
- กำหนดแพลตฟอร์มเป็น iOS 14:
platform :ios, '14.0'
1
- เพิ่มบรรทัดต่อไปนี้ลงในไฟล์ Podfile:
pod 'ByteArkPlayerSDKAdsPlugin', '~> BYTEARK_PLAYER_SDK_ADS_PLUGIN_VERSION'
1
Note
แทนที่ BYTEARK_PLAYER_SDK_ADS_PLUGIN_VERSION
ด้วยหมายเลขเวอร์ชันของ ByteArkPlayerSDKAdsPlugin ที่คุณต้องการใช้
- รันคำสั่ง
pod install
ใน Terminal:
pod install
1
Note
Cocoapods จะติดตั้ง SDK โดยตรงจาก Github private repository โดยใช้ ssh key หากคุณยังไม่ได้ตั้งค่า ssh key ในบัญชี Github ของคุณ โปรดดูเอกสาร Adding a new SSH key to your GitHub account (opens new window) บนเว็บไซต์ของ Github
# Swift Package Manager
ใช้ Swift Package Manager เพื่อติดตั้ง Ads Plugin และ Google IMA SDK.
- ใน Xcode ไปที่เมนู File > Add Packages
- ใส่ URL:
https://github.com/byteark/byteark-player-sdk-ios
- เลือกเวอร์ชันของ Ads Plugin
- เมื่อเสร็จสิ้น Xcode จะดาวน์โหลดปลั๊กอินโดยอัตโนมัติ
- Add Google IMA SDK dependencies https://developers.google.com/interactive-media-ads/docs/sdks/ios/client-side#spm
# การใช้งาน
import UIKit
import ByteArkPlayerSDK
// Step 1: Import the necessary plugins for ads integration
import ByteArkPlayerSDKAdsPlugin
class PlayerViewController: ByteArkPlayerViewController, ByteArkPlayerAdsPluginDelegate {
override func viewDidLoad() {
super.viewDidLoad()
// Step 2: Set up the ad tag URL for VAST ads
let adTagUrl = "https://pubads.g.doubleclick.net/gampad/ads?iu=/21775744923/external/vmap_ad_samples&sz=640x480&cust_params=sample_ar%3Dpremidpostpod&ciu_szs=300x250&gdfp_req=1&ad_rule=1&output=vmap&unviewed_position_start=1&env=vp&impl=s&cmsid=496&vid=short_onecue&correlator="
do {
// Step 3: Create a ByteArkPlayerAdsConfig using ByteArkPlayerAdsConfigBuilder and set the VAST ad tag URL
let adsConfig = try ByteArkPlayerAdsConfigBuilder(adsTagUrl: adTagUrl).build()
// Step 4: Create a ByteArkPlayerAdsPlugin instance using the config from step 3
let adsPlugin = ByteArkPlayerAdsPlugin(with: adsConfig)
// Step 5: Assign the ByteArkPlayerAdsPluginDelegate to receive ad callback events
adsPlugin.delegate = self
// Step 6: Set up the media item using ByteArkPlayerItemBuilder
let item = try ByteArkPlayerItemBuilder()
.media(URL(string: "https://byteark-playertzxedwv.stream-playlist.byteark.com/streams/TZyZheqEJUwC/playlist.m3u8")!)
.title("Big Buck Bunny")
.build()
// Step 7: Configure the player using ByteArkPlayerConfigBuilder, add the ads plugin to the config
let config = try ByteArkPlayerConfigBuilder()
.item(item)
.autoplay(true)
.addPlugin(plugin: adsPlugin, name: ByteArkPlayerAdsPlugin.PluginName) // Adding the ads plugin
.build()
// Step 8: Apply the configuration to the player
player.configure(with: config)
} catch {
print(error.localizedDescription)
}
}
// MARK: - ByteArkPlayerAdsPluginDelegate Methods
// Step 9: Implement the ads delegate method to handle when ads are loaded
func adsLoader(_ loader: IMAAdsLoader, adsLoadedWith adsLoadedData: IMAAdsLoadedData) {
print("Ads loaded successfully.")
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# การใช้งาน API ของ Plugin
Plugin นี้มีเมธอดและตัวแปรที่สามารถเรียกใช้งานจาก instance ของ Plugin เพื่อควบคุมพฤติกรรมหรือดึงข้อมูลได้
# Methods
Name | Description |
---|---|
func playAd(adTagUrl url: String, adType: ByteArkPlayerAdsPluginAdsType?) | Play ad |
func skipAd() | Skip current ad |
# Variables
Name | Description |
---|---|
var delegate: ByteArkPlayerAdsPluginDelegate? { get, set } | Get/Set a ads plugin delegate |
var isAdsPlaying : Bool { get} | Check is ads playing |
var adMetadata: ByteArkPlayerAdMetadata? { get } | Get the ad metadata |
# Listen plugin's events
/// A protocol which must be used to monitor playback event from IMA instance
@objc public protocol ByteArkPlayerAdsPluginDelegate {
/// Fired when ads requested
@objc optional func adsRequest(_ request: IMAAdsRequest)
/// Fired when ads loaded
@objc optional func adsLoader(_ loader: IMAAdsLoader, adsLoadedWith adsLoadedData: IMAAdsLoadedData)
/// Fired when ads load fail
@objc optional func adsLoadFail(_ loader: IMAAdsLoader, failedWith adErrorData: IMAAdLoadingErrorData)
/// Fired when IMA SDK is going to play ads, so pause the content.
@objc optional func adsManagerDidRequestContentPause()
/// Fired when IMA SDK is done playing ads (at least for now), so resume the content.
@objc optional func adsManagerDidRequestContentResume()
/// Fired when IMA manager receive an event
@objc optional func didReceiveEvent(_ adsManager: IMAAdsManager, didReceive event: IMAAdEvent)
/// Fired when IMA manager give an error
@objc optional func didReceiveError(_ adsManager: IMAAdsManager, didReceive error: IMAAdError)
/// Fired every 200ms to provide time updates for the current ad.
@objc optional func adsManager(_ adsManager: IMAAdsManager, adDidProgressToTime mediaTime: TimeInterval, totalTime: TimeInterval)
/// Fired when the current ad is sufficiently buffered such that ad playback is not likely to outrun the buffer.
@objc optional func adsManagerAdPlaybackReady(_ adsManager: IMAAdsManager)
/// Fired when an ad that already started playing has stopped to buffer.
@objc optional func adsManagerAdDidStartBuffering(_ adsManager: IMAAdsManager)
/// Fired as an ad buffers. This method is called repeatedly as long as an ad is buffering.
@objc optional func adsManager(_ adsManager: IMAAdsManager, adDidBufferToMediaTime mediaTime: TimeInterval)
/// Fired when open link on ads
@objc optional func linkOpenerWillOpenExternalApplication(_ linkOpener: NSObject)
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40