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.0
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é |
Ajoutez la dépendance suivante au fichier build.gradle
de votre module :
dependencies {
implementation("com.github.digiteka:SDK-instream-Android:1.1.0-0")
}
Initialisez la librairie dans la méthode onCreate()
de votre classe Application
:
class MyApplication : Application() {
override fun onCreate() {
super.onCreate()
// Créer la configuration
val dtkisConfig = DTKISConfig.Builder(
mdtk = "VOTRE_CLE_MDTK"
).build()
// Initialiser la librairie InStream
InStream.initialize(
applicationContext = this.applicationContext,
config = dtkisConfig
)
}
}
Objet de configuration principal pour la librairie InStream.
Paramètre | Type | Obligatoire | Description |
---|---|---|---|
mdtk |
String | Oui | Votre clé API Digiteka |
Configuration pour le composant principal de lecture vidéo.
Paramètre | Type | Obligatoire | Description |
---|---|---|---|
zone |
String | Oui | Identifie la zone du site web où la vidéo est publiée |
src |
String | Oui | ID de la vidéo à lire |
urlreferrer |
String | Oui | URL de l’article desktop (URL référente) |
gdprConsentString |
String | Non | Chaîne de consentement RGPD de l’utilisateur |
tagParam |
String | Non | Paramètres publicitaires optionnels |
playMode |
PlayMode | Non | Comportement de lecture vidéo (par défaut : ON_CLICK ) |
ON_CLICK
: La vidéo démarre quand l’utilisateur tape sur le lecteurAUTOPLAY
: La vidéo démarre automatiquement au chargementVISIBLE_AT_FIFTY_PERCENT
: La vidéo démarre quand elle est visible à 50% dans la vueConfiguration pour le lecteur visible flottant (composant optionnel).
Paramètre | Type | Obligatoire | Description |
---|---|---|---|
playerPosition |
Position | Oui | Position du lecteur à l’écran |
widthPercent |
Float | Oui | Largeur du lecteur en pourcentage de la vue parent (0.0-1.0) |
ratio |
String | Oui | Ratio d’aspect (ex: “16:9”) |
horizontalMargin |
Float | Oui | Marge horizontale en dp |
verticalMargin |
Float | Oui | Marge verticale en dp |
TOP_START
: Coin supérieur gaucheTOP_END
: Coin supérieur droitBOTTOM_START
: Coin inférieur gaucheBOTTOM_END
: Coin inférieur droit<com.digiteka.instream.ui.player.MainPlayerView
android:id="@+id/main_player"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintDimensionRatio="16:9"
app:layout_constraintTop_toBottomOf="@id/content"
tools:ignore="WebViewLayout" />
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val mainPlayerConfig = DTKISMainPlayerConfig.Builder(
zone = "11",
gdprConsentString = "votre_chaine_consentement",
src = "id_video",
urlReferrer = "https://votre-site-web.com/article",
tagParam = null
).setPlayMode(PlayMode.VISIBLE_AT_FIFTY_PERCENT).build()
val mainPlayerKey = InStream.configureMainPlayer(
binding.mainPlayer,
mainPlayerConfig
)
}
}
Le lecteur visible est un composant flottant optionnel qui apparaît quand le lecteur principal sort de la vue. Si attachVisiblePlayerTo
n’est pas appelé, le MainPlayerView continuera de jouer sans se mettre en pause quand il sort de l’écran.
// Optionnel : Ajouter le lecteur visible flottant
InStream.attachVisiblePlayerTo(
parent = binding.root,
visiblePlayerConfig = DTKISVisiblePlayerConfig(
widthPercent = 0.66f,
position = Position.BOTTOM_START,
ratio = "16:9",
horizontalMargin = 8f,
verticalMargin = 8f
),
mainPlayerKey = mainPlayerKey
)
@Composable
fun VideoScreen() {
val mainPlayerConfig = DTKISMainPlayerConfig.Builder(
zone = "11",
gdprConsentString = "votre_chaine_consentement",
src = "id_video",
urlReferrer = "https://votre-site-web.com/article",
tagParam = null
).setPlayMode(PlayMode.VISIBLE_AT_FIFTY_PERCENT).build()
val mainPlayerView = remember { MainPlayerView(LocalContext.current) }
val mainPlayerKey = remember {
InStream.configureMainPlayer(mainPlayerView, mainPlayerConfig)
}
MainPlayerComposable(mainPlayerView = mainPlayerView)
}
@Composable
fun App() {
MaterialTheme {
Surface {
Box {
VideoScreen()
}
}
// Optionnel : Ajouter le lecteur visible flottant
// Si non appelé, MainPlayerView ne se mettra pas en pause quand hors écran
InStream.attachVisiblePlayerTo(
parent = findViewById(android.R.id.content),
visiblePlayerConfig = DTKISVisiblePlayerConfig(
widthPercent = 0.66f,
position = Position.BOTTOM_START,
ratio = "16:9",
horizontalMargin = 8f,
verticalMargin = 8f
),
mainPlayerKey = mainPlayerKey
)
}
}
Implémentez un logger personnalisé pour capturer les logs de la librairie en implémentant l’interface DTKISLogger
:
import android.util.Log
import com.digiteka.instream.core.log.DTKISLogger
object LoggerPersonnalise : DTKISLogger {
private const val TAG = "DigitekaInStream"
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)
}
}
Enregistrez votre logger personnalisé :
InStream.setLogger(logger = LoggerPersonnalise)
La librairie fournit des codes d’erreur structurés et des logs :
Type | Code d’erreur | Niveau | Description | Cause |
---|---|---|---|---|
Configuration | DTKIS_CONF_1 | Critical | Clé API invalide | mdtk est null, vide ou blank |
Configuration | DTKIS_CONF_2 | Error | Aucune donnée de configuration | Tableau de données vide ou aucune zone ne contient de vidéo |
Configuration | DTKIS_CONF_3 | Error | Librairie non initialisée | InStream.initialize() non appelé |
Configuration | DTKIS_CONF_4 | Error | Format d’URL invalide | URL referrer malformée |
SDK | DTKIS_SDK_1 | Critical | Lecteur inconnu | ID de lecteur invalide fourni |