Digiteka vous met à disposition 2 SDK (1 Android, 1 iOS) pour vous faciliter l'intégration des player Digiteka sur vos applications. Ce SDK n'est disponible pour le moment que sur le Simple Player
Ajouter la dépendance à votre projet avec l'une de ces solutions :
Vous pouvez utiliser CocoaPods pour installer InStreamSDK
en ajoutant ce code à votre fichier Podfile
:
pod 'InStreamSDK', '~> 1.0.1
Vous pouvez intégrer InStreamSDK
en tant que package Swift en ajoutant l'URL suivante du repository public dans Xcode :
git@bitbucket.org:beappers/digiteka.instream.xcframework.git
Dans la méthode application(_:, didFinishLaunchingWithOptions:)
de votre class ApplicationDelegate
, ajoutez le code suivant pour initialiser la librairie :
do {
try InStream.shared.initialize(config: DTKISConfig(apiKey: "01357940"))
} catch {
print("Can't init InStream with error \(error.localizedDescription)")
}
Il est possible de définir un logger personnalisé pour récupérer les logs de la librairie. Le logger doit implémenter le protocol DTKISLoggerDelegate
:
extension AppDelegate: DTKISLoggerDelegate {
func InStreamWarn(message: String) {
print("warn " + message)
}
func InStreamError(message: String, error: Error?) {
print("error " + message, error as Any)
}
}
Puis passez le logger à la librairie :
InStream.shared.setLoggerDelegate(self)
mdtk
(String) : api keydebugMode
(Boolean) : optionnelzone
(String) : permet de déterminer sur quelle zone du site la vidéo a été publiéesrc
(String) : permet de définir l’ID de la vidéo à jouerurlreferrer
(String) : permet de définir l’URL correspondant à l’article sur Desktop (URL referrer) → Important pour la monétisation gdprconsentstring
(String) : permet de nous communiquer la chaîne de consentement RGPD de l’utilisateur → Important pour la monétisationtagparam
(String) : permet de nous communiquer des paramètres publicitaires facultatifsplayMode
Déclenchement de la vidéo :.user
: Click to Play.auto
: AutoPlay.scroll
: Scroll to PlayplayerPosition
(VisiblePlayerPosition) : position du visible player (TOP_START, TOP_END, BOTTOM_START, BOTTOM_END)widthPercent
(WidthProportion) : largeur du visible player en pourcentage de la vue parentratio
(Ratio) : ratio du video player largeur / hauteurhorizontalMargin
(CGFloat) : margin du visible playerverticalMargin
(CGFloat) : margin du visible playerRécuperez une instance du MainPlayerView
en appelant :
let myConfig: DTKISMainPlayerConfig = ... votre config
do {
try myMainPlayerView = InStream.shared.initMainPlayerWith(config: myConfig)
} catch {
// peut renvoyer une erreur si mal initialisé
}
Puis la mettre dans une containerview (qui peut être une UIView dans une UITableViewCell, ou juste une UIView) en appelant :
myMainPlayerView?.setIn(containerView: myContainerView)
Dans votre UIViewController, avoir une instance du MainPlayerView Puis utiliser l'extension de UIScrollView :
extension MyViewController: UIScrollViewDelegate {
func scrollViewDidScroll(_ scrollView: UIScrollView) {
if let myMainPlayerView = myMainPlayerCell.myMainPlayerView {
myMainPlayerView.viewDidScroll(scrollView: scrollView)
}
}
}
Dans votre UIViewController
var visiblePlayer: VisiblePlayer?
override func viewDidLoad() {
super.viewDidLoad()
let myConfig: DTKISVisiblePlayerConfig = ... votre config
myVisiblePlayer = InStream.shared.initVisiblePlayerWith(config: myConfig, in: self.view, scrollView: scrollView)
}
extension MyViewController: UIScrollViewDelegate {
func scrollViewDidScroll(_ scrollView: UIScrollView) {
if let myMainPlayerCell = myMainPlayerCell, let myMainPlayerView = myMainPlayerCell.mainPlayerView {
visiblePlayer?.viewDidScroll(mainPlayerView: myMainPlayerView)
}
}
}
Si vous voulez uniquement une instance du MainPlayer (avec playMode = .auto ou .user), vous pouvez simplement appeler
InStream.shared.initMainPlayerRepresentable(config: DTKISMainPlayerConfig)
Cela retourne une View que vous pouvez utiliser dans une ScrollView
Si vous prévoyez d'utiliser d'autres fonctionnalités comme : visiblePlayer ou playMode = .scroll, vous devez utiliser InStreamScrollVStack
, une ScrollView dans laquelle vous pouvez ajouter du contenu
InStreamScrollVStack(config: mainPlayerConfig, visiblePlayerConfig: visiblePlayerConfig, data: mockData, playerInsertPosition: 10) { element in
Text("element.id")
.fixedSize(horizontal: false, vertical: true)
}
Le champ visiblePlayerConfig peut être nul si vous ne voulez pas de visiblePlayer
Type | Code d'erreur | Niveau | Message | Cause |
---|---|---|---|---|
Configuration | DTKIS_CONF_3 | Error | InStream sdk has not yet been initialized. Please call InStream.shared.initialize first. |
InStream.shared.initialize n'a pas encore été appelé |
Ajouter la dépendance à votre fichier `build.gradle`:
kotlin
dependencies {
implementation("com.digiteka.android:instream:1.0.0")
}
Dans la méthode `onCreate` de votre classe `Application`, si vous n'en avez pas, créez-en une, et ajoutez-le code suivant pour initialiser la librairie :
kotlin
//Créer la configuration DTKISConfig
val dtkisConfig: DTKISConfig = DTKISConfig.Builder(
mdtk = "Ma_cle_MDTK",
)
.build()
// Puis initialiser la librairie InStream
InStream.initialize(applicationContext = this.applicationContext, config = dtkisConfig)
- mdtk
(String) : api key
zone
(String) : permet de déterminer sur quelle zone du site la vidéo a été publiéesrc
(String) : permet de définir l’ID de la vidéo à jouerurlreferrer
(String) : permet de définir l’URL correspondant à l’article sur Desktop (URL referrer) → Important pour la monétisationgdprConsentString
(String) : permet de nous communiquer la chaîne de consentement RGPD de l’utilisateur → Important pour la monétisationtagParam
(String) : permet de nous communiquer des paramètres publicitaires facultatifs → Important pour la monétisationplayMode
Mode de déclenchement:ON_CLICK
: Click to PlayAUTOPLAY
: AutoplayVISIBLE_AT_FIFTY_PERCENT
: Scroll to PlayplayerPosition
(Position) : position du visible player (TOP_START, TOP_END, BOTTOM_START, BOTTOM_END)widthPercent
(Float) : largeur du visible player en pourcentage de la vue parentratio
(String) : ratio du video player largeur / hauteurhorizontalMargin
(Float) : margin du visible playerverticalMargin
(Float) : margin du visible playerDans un fichier XML, appeler le `MainPlayerView` comme ceci :
kotlin
<com.digiteka.instream.ui.player.MainPlayerView
android:id="@+id/webview"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintDimensionRatio="16:9"
app:layout_constraintTop_toBottomOf="@id/firstText"
tools:ignore="WebViewLayout" />
Puis configurer le `MainPlayerView` en appelant dans votre activité :
kotlin
val mainPlayerConfig: DTKISMainPlayerConfig = DTKISMainPlayerConfig.Builder(
zone = "11",
gdprConsentString = "a_consent_string",
src = "src",
urlReferrer = "url_referee",
tagParam = null,
).setPlayMode(PlayMode.VISIBLE_AT_FIFTY_PERCENT).build()
val key = InStream.configureMainPlayer(binding.webview, mainPlayerConfig)
Dans votre activité, si vous voulez rajouter un `VisiblePlayer`, il suffit de rajouter ceci :
kotlin
InStream.attachVisiblePlayerTo(
parent = binding.root,
visiblePlayerConfig = DTKISVisiblePlayerConfig(
widthPercent = .66f,
position = Position.BOTTOM_START,
ratio = "16:9",
horizontalMargin = 8f,
verticalMargin = 8f,
),
mainPlayerKey = key
)
Dans votre composant Compose, il faut d'abord rajouter la configuration du `MainPlayerView`
kotlin
val mainPlayerConfig: DTKISMainPlayerConfig = DTKISMainPlayerConfig.Builder(
zone = "11",
gdprConsentString = "a_consent_string",
src = "src",
urlReferrer = "url_referee",
tagParam = null,
).setPlayMode(PlayMode.VISIBLE_AT_FIFTY_PERCENT).build()
Puis dans le `setContent`, il vous devez appeler le composable `MainPlayerComposable`
MainPlayerComposable(
mainPlayerView = mainPlayerView
)
Enfin, dans votre composant parent, si vous voulez rajouter un `VisiblePlayer`, il suffit d'appeler `InStream.attachVisiblePlayerTo :
kotlin
setContent {
MaterialTheme {
Surface {
Box(...) {
... {
MainPlayerComposable(mainPlayerView = mainPlayerView)
}
}
}
InStream.attachVisiblePlayerTo(
parent = findViewById(android.R.id.content),
visiblePlayerConfig = DTKISVisiblePlayerConfig(
widthPercent = .66f,
position = Position.BOTTOM_START,
ratio = "16:9",
horizontalMargin = 8f,
verticalMargin = 8f,
),
mainPlayerKey = key
)
}
}
Il est possible de définir un logger personalisé pour récupérer les logs de la librairie. Le logger doit implémenter l'interface `DTKISLogger
`
kotlin
import android.util.Log
import com.digiteka.instream.core.log.DTKISLogger
object MyLogger : DTKISLogger {
private const val TAG = "MyAppLogger"
override fun debug(message: String) { Log.d(TAG, message) }
override fun info(message: String) { Log.i(TAG, message) }
override fun warning(message: String, throwable: Throwable?) { Log.w(TAG, message, throwable) }
override fun error(message: String, throwable: Throwable?) { Log.e(TAG, message, throwable) }
}
Puis passer le logger à la librairie :
kotlin
InStream.setLogger(logger = MyLogger)
Type | Code d'erreur | Niveau | Message | Cause |
---|---|---|---|---|
Configuration | DTKIS_CONF_1 | Critical | MDTK must not be null, empty or blank. Please provide a valid Api Key | MDTK nul ou vide |
Configuration | DTKIS_CONF_2 | Error | No data were provided for your Api key (MDTK), please check your Api Key is valid, and you do provide data for it in the Digiteka console. | Le tableau data est vide ou aucune zone ne contient de vidéo |
Configuration | DTKIS_CONF_3 | Error | InStream SDK has not yet been initialized. Please call `InStream.initialize` first. |
InStream.initialize n'a pas encore été appelé. |
SDK | DTKIS_SDK_1 | Critical | Unknown player id | Id de player inconnu |