Dailymotion Swift Player SDK for iOS
我们的 iOS SDK 允许您轻松地将 Dailymotion 视频播放器嵌入到您的 iOS 应用程序中,使用 WebView 和创建我们的旗舰 Dailymotion 应用程序相同的工具。它提供对播放器 API 的访问,并让您对播放器和视频数据有完全的控制权。要了解更多信息,请查看官方 Dailymotion iOS 开发者文档 此处。
要求
- Xcode 9 及更高版本
- Swift 4
- iOS 9+
注意:如果您需要库的 Objective-C 版本或对 iOS < 9 的支持,请使用库的 旧版本。
安装
首选的方式是通过 CocoaPods 安装。要安装,将以下内容添加到您的 Podfile 中
use_frameworks!
pod 'DailymotionPlayerSDK'
用户隐私和数据使用
此SDK使用IDFA收集,您在实例化DMPlayerViewController
时仍然可以禁用它。 (在您将应用程序提交到商店时,Apple将在iTunes Connect中询问您)
从iOS 14.5开始
-
应用程序应使用版本3.9.0或更高版本,从本版本开始,库将使用新的
AppTrackingTransparency
框架来检查用户授权,并要求应用程序邀请用户允许其跨其他公司拥有的应用程序和网站跟踪他们。 -
应用程序应添加
NSUserTrackingUsageDescription
Apple文档 -
应用程序应使用
AppTrackingTransparency
请求跟踪授权来邀请用户授权Apple文档 -
如果应用程序继续使用库的3.8.0版本或更早版本,则不会使用IDFA跟踪用户。
使用方法
在将要提供视频的视图中控制器中,保留Dailymotion播放器的引用,并将您的类设置为您自己的delegate
import UIKit
import DailymotionPlayerSDK
class VideoViewController: UIViewController {
// The player container. See setupPlayerViewController()
@IBOutlet private var containerView: UIView!
private lazy var playerViewController: DMPlayerViewController = {
// If you have an OAuth token, you can pass it to the player to hook up
// a user's view history.
let parameters: [String: Any] = [
"fullscreen-action": "trigger_event", // Trigger an event when the users toggles full screen mode in the player
"sharing-action": "trigger_event" // Trigger an event to share the video to e.g. show a UIActivityViewController
]
let controller = DMPlayerViewController(parameters: parameters)
controller.delegate = self
return controller
}()
override func viewDidLoad() {
super.viewDidLoad()
setupPlayerViewController()
}
// Add the player to your view. e.g. add a container on your storyboard
// and add the player's view as subview to that
private func setupPlayerViewController() {
addChildViewController(playerViewController)
let view = playerViewController.view!
containerView.addSubview(view)
view.translatesAutoresizingMaskIntoConstraints = false
// Make the player's view fit our container view
NSLayoutConstraint.activate([
view.leadingAnchor.constraint(equalTo: containerView.leadingAnchor),
view.trailingAnchor.constraint(equalTo: containerView.trailingAnchor),
view.topAnchor.constraint(equalTo: containerView.topAnchor),
view.bottomAnchor.constraint(equalTo: containerView.bottomAnchor)
])
}
}
extension VideoViewController: DMPlayerViewControllerDelegate {
// The delegate has 4 mandatory functions
func player(_ player: DMPlayerViewController, didReceiveEvent event: PlayerEvent) {
// Sends player events of either .namedEvent(name: String, data: [String: String]?), .timeEvent(name: String, time: Double) or .errorEvent(error: PlayerError)
}
func player(_ player: DMPlayerViewController, openUrl url: URL) {
// Sent when a user taps on an ad that can display more information
}
func playerDidInitialize(_ player: DMPlayerViewController) {
// Sent when the player has finished initializing
}
func player(_ player: DMPlayerViewController, didFailToInitializeWithError error: Error) {
// Sent when the player failed to initialized
}
}
有关事件列表的完整列表,请参阅播放器API事件页面
要播放视频,请调用播放器的load
方法,并传递视频的id
func loadVideo(withId id: String) {
playerViewController.load(videoId: id)
}
在加载视频时,您也可以传递一些其他参数。例如,如果您想从特定时间开始播放视频
func loadVideo(withId id: String) {
let parameters = ["start": 30]
guard
let encoded = try? JSONEncoder().encode(parameters),
let params = String(data: encoded, encoding: .utf8)
else { return }
playerViewController.load(videoId: id, params: params)
}
有关参数列表,请参阅播放器API参数页面。
要处理由播放器发送的事件,让我们实现上面提到的委托方法
func player(_ player: DMPlayerViewController, didReceiveEvent event: PlayerEvent) {
switch event {
case .namedEvent(let name, _) where name == "fullscreen_toggle_requested":
toggleFullScreen()
default:
break
}
}
private func toggleFullScreen() {
// Keep track of the orientation via an isPlayerFullscreen bool
isPlayerFullscreen = !isPlayerFullscreen
updateDeviceOrientation()
updatePlayerSize()
}
private func updateDeviceOrientation() {
let orientation: UIDeviceOrientation = isPlayerFullscreen ? .landscapeLeft : .portrait
UIDevice.current.setValue(orientation.rawValue, forKey: #keyPath(UIDevice.orientation))
}
private func updatePlayerSize() {
if isPlayerFullscreen {
playerHeightConstraint.constant = nextSize.height
} else {
// Keep track of the initial player's height, e.g. via a didSet handler in the constraint outlet
playerHeightConstraint.constant = initialPlayerHeight
}
}
请参阅Example
目录,以查看所有这些功能的实际应用示例。
OM SDK集成
IAB 开放测量 SDK 设计用于简化第三方广告可见性和验证测量,适用于网站视频和移动应用环境中的广告。更多详情请参阅 https://iabtechlab.com/standards/open-measurement-sdk/。
我们已经将 SDK 整合到我们的 Dailymotion Player SDK 中,它提供了大部分默认功能。
- 广告会话管理
- 广告主要信号(播放、缓冲开始、缓冲结束、暂停、恢复、四分位数、点击)
- 设备和播放器音量管理
⚠️ 基本播放器状态处理。根据播放器的全屏状态,选择正常或全屏。
如果您应用程序中存在更多播放器布局,如迷你播放器、画中画等,强烈建议始终更新播放器状态。
为此,只需在您的DMPlayerViewController
实例中更新playerState
属性即可。
player.playerState = .fullscreen
CMP 兼容性
从版本 3.8.0 开始,SDK 完全兼容第三方 CMP(同意管理平台)。更多详情请参阅 https://iabeurope.eu/cmp-list/。
无需添加额外代码即可启用此兼容性,当您集成 SDK 时,与 CMP 的通信将自动处理。
许可
DailymotionPlayerSDK 基于 MIT 许可证。请参阅 LICENSE 文件获取更多信息。