Roku — Tracciamento in SceneGraph tracking-in-scenegraph-roku
Introduzione introduction
Per sviluppare le applicazioni, è possibile utilizzare l’infrastruttura di programmazione XML Roku SceneGraph. Questa infrastruttura è caratterizzata da due concetti chiave:
- Rendering SceneGraph delle schermate dell’applicazione
- Configurazione XML delle schermate SceneGraph
L’SDK di Adobe Mobile per Roku è scritto in BrightScript. L’SDK utilizza molti componenti che non sono disponibili per un’app in esecuzione su SceneGraph (ad esempio, thread). Pertanto, uno sviluppatore di app Roku che intende utilizzare l’infrastruttura SceneGraph non può effettuare chiamate alle API SDK di Adobe Mobile (queste ultime sono simili a quelle disponibili sulle applicazioni legacy BrightScript).
Architettura architecture
Per aggiungere il supporto SceneGraph all’SDK di AdobeMobile, Adobe ha aggiunto una nuova API che crea un ponte connettore tra l’SDK di AdobeMobile e adbmobileTask. Quest’ultimo è un nodo SceneGraph utilizzato per l’esecuzione dell’API dell’SDK. (L’utilizzo di adbmobileTask viene descritto in dettaglio all’interno di questo documento).
Il ponte connettore è progettato per eseguire le seguenti operazioni:
- Il ponte restituisce un’istanza dell’SDK di AdobeMobile compatibile con SceneGraph. L’SDK compatibile con SceneGraph dispone di tutte le API che l’SDK legacy espone.
- In SceneGraph, l’utilizzo delle API SDK di AdobeMobile e quello delle API legacy è molto simile.
- Il ponte espone inoltre un meccanismo che consente di ascoltare i callback per le API che restituiscono determinati dati.
Componenti components
Applicazione SceneGraph:
- Utilizza le API
AdobeMobileLibrarytramite il ponte connettore SceneGraph. - Registra i callback di risposta su
adbmobileTaskper le variabili di dati di output previste.
AdobeMobileLibrary:
- Espone un set di API pubbliche (legacy), tra cui l’API del ponte connettore.
- Restituisce un’istanza del connettore SceneGraph che esegue il wrapping di tutte le API pubbliche legacy.
- Comunica con un nodo
adbmobileTaskdi SceneGraph per l’esecuzione di API.
Nodo adbmobileTask:
- Un nodo attività SceneGraph che esegue API
AdobeMobileLibrarysu un thread in background. - Agisce come delegato per restituire dati alle scene dell’applicazione.
API pubbliche di SceneGraph public-scenegraph-apis
ADBMobileConnector
sceneGraphConstantsSceneGraphConstants. Per ulteriori informazioni, consulta la tabella precedente.setDebugLogginggetDebugLoggingsetPrivacyStatusgetPrivacyStatustrackStatetrackActiontrackingIdentifieruserIdentifiersetUserIdentifiergetAllIdentifiersvisitorSyncIdentifiersvisitorMarketingCloudIDaudienceSubmitSignalaudienceVisitorProfileaudienceDpidaudienceDpuuidaudienceSetDpidAndDpuuidmediaTrackLoadmediaTrackUnloadmediaTrackPlaymediaTrackCompletemediaTrackErrormediaUpdatePlayheadmediaUpdateQoSSceneGraphConstants
API_RESPONSEadbmobileTask del nodo adbmobileApiResponseDEBUG_LOGGINGapiName per getDebugLoggingPRIVACY_STATUSapiName per getPrivacyStatusTRACKING_IDENTIFIERapiName per trackingIdentifierUSER_IDENTIFIERapiName per userIdentifierVISITOR_MARKETING_CLOUD_IDapiName per visitorMarketingCloudIDAUDIENCE_VISITOR_PROFILEapiName per audienceVisitorProfileAUDIENCE_DPIDapiName per audienceDpidAUDIENCE_DPUUIDapiName per audienceDpuuidNodo adbmobileTask
Tutte le API eseguite su AdobeMobileSDK restituiranno risposte in questo campo di sola lettura. Registrati per un callback per ascoltare gli aggiornamenti a questo campo e ricevere gli oggetti di risposta. Di seguito è riportato il formato dell'oggetto di risposta:
response = {
"apiName" : <SceneGraphConstants.
API_NAME>
"returnValue : <API_RESPONSE>
}
Un’istanza di questo oggetto di risposta verrà inviata per qualsiasi chiamata API su AdobeMobileSDK che dovrebbe restituire un valore come indicato nella guida di riferimento API. Ad esempio, una chiamata API per visitorMarketingCloudID() restituirà il seguente oggetto di risposta:
response = {
"apiName" : m.
adbmobileConstants.
VISITOR_MARKETING_CLOUD_ID
"returnValue : "07050x25671x33760x72644x14"
}
OPPURE, anche i dati di risposta possono non essere validi:
response = {
"apiName" : m.
adbmobileConstants.
VISITOR_MARKETING_CLOUD_ID
"returnValue : invalid
}
adbmobile.brs
getADBMobileConnectorInstance
Firma API: ADBMobile().getADBMobileConnectorInstance()
Input: adbmobileTask
Tipo di ritorno: ADBMobileConnector
sgConstants
Firma API: ADBMobile().sgConstants()
Input: nessuno
Tipo di ritorno: SceneGraphConstants
ADBMobileConnector.Costanti ADBMobile
versionPRIVACY_STATUS_OPT_INPRIVACY_STATUS_OPT_OUTUtilità definita a livello globale MediaHeartbeat. Le API legacy di AdobeMobileLibrary sono accessibili così come sono nell’ambiente SceneGraph perché non utilizzano componenti BrightScript non disponibili nei nodi SceneGraph. Per ulteriori informazioni su questi metodi, consulta la tabella seguente:
Metodi globali per MediaHeartbeat
adb_media_init_mediainfoFunction adb_media_init_mediainfo(name As String, id As String, length As Double, streamType As String) As Objectadb_media_init_adinfoFunction adb_media_init_adinfo(name As String, id As String, position As Double, length As Double) As Objectadb_media_init_chapterinfoFunction adb_media_init_adbreakinfo(name As String, startTime as Double, position as Double) As Objectadb_media_init_adbreakinfoFunction adb_media_init_chapterinfo(name As String, position As Double, length As Double, startTime As Double) As Objectadb_media_init_qosinfoFunction adb_media_init_qosinfo(bitrate As Double, startupTime as Double, fps as Double, droppedFrames as Double) As ObjectImplementazione implementation
-
Scarica la libreria Roku: scarica la libreria Roku più recente.
-
Configurare l'ambiente di sviluppo
-
Copia
adbmobile.brs(AdobeMobileLibrary) nella directorypkg:/source/. -
Per il supporto di SceneGraph, copia
adbmobileTask.brseadbMobileTask.xmlnella directorypkg:/components/.
-
-
Inizializza
-
Importa
adbmobile.brsnella Scene.code language-none <script type="text/brightscript" uri="pkg:/source/adbmobile.brs" /> -
Crea un’istanza di
adbmobileTasknella Scene.code language-none m.adbmobileTask = createObject("roSGNode", "adbmobileTask") -
Ottieni un’istanza del connettore
adbmobileper SceneGraph utilizzando l’istanzaadbmobileTask.code language-none m.adbmobile = ADBMobile().getADBMobileConnectorInstance(m.adbmobileTask) -
Ottieni costanti SG
adbmobile.code language-none m.adbmobileConstants = m.adbmobile.sceneGraphConstants() -
Registra un callback per ricevere l’oggetto di risposta per tutte le chiamate API
AdbMobile.code language-none m.adbmobileTask.ObserveField(m.adbmobileConstants.API_RESPONSE, "onAdbmobileApiResponse") ' Sample implementation of the callback ' Listen for all the constants for which API calls are made on the SDK function onAdbmobileApiResponse() as void responseObject = m.adbmobileTask[m.adbmobileConstants.API_RESPONSE] if responseObject <> invalid methodName = responseObject.apiName retVal = responseObject.returnValue if methodName = m.adbmobileConstants.DEBUG_LOGGING if retVal print "API Response: DEBUG LOGGING: " + "True" else print "API Response: DEBUG LOGGING: " + "False" endif else if methodName = m.adbmobileConstants.PRIVACY_STATUS print "API Response: PRIVACY STATUS: " + retVal else if methodName = m.adbmobileConstants.TRACKING_IDENTIFIER if retVal <> invalid print "API Response: TRACKING IDENTIFIER: " + retVal else print "API Response: TRACKING IDENTIFIER: " + "invalid" endif else if methodName = m.adbmobileConstants.USER_IDENTIFIER if retVal <> invalid print "API Response: USER IDENTIFIER: " + retVal else print "API Response: USER IDENTIFIER: " + "invalid" endif else if methodName = m.adbmobileConstants.VISITOR_MARKETING_CLOUD_ID if retVal <> invalid print "API Response: MCID: " + retVal else print "API Response: MCID: " + "invalid" endif else if methodName = m.adbmobileConstants.AUDIENCE_DPID if retVal <> invalid print "API Response: AUDIENCE DPID: " + retVal else print "API Response: AUDIENCE DPID: " + "invalid" endif else if methodName = m.adbmobileConstants.AUDIENCE_DPUUID if retVal <> invalid print "API Response: AUDIENCE DPUUID: " + retVal else print "API Response: AUDIENCE DPUUID: " + "invalid" endif else if methodName = m.adbmobileConstants.AUDIENCE_VISITOR_PROFILE if retVal <> invalid print "API Response: AUDIENCE VISITOR PROFILE: Valid Object" else print "API Response: AUDIENCE VISITOR PROFILE: " + "invalid" endif endif endif end function
-
Implementazione di esempio sample-implementation
Chiamate API di esempio per l’SDK legacy
'get an instance of SDK
m.adbmobile = ADBMobile()
'execute setter APIs
m.adbmobile.setDebugLogging(true)
'execute getter APIs
debugLogging = m.adbmobile.getDebugLogging()
Chiamate API di esempio per l’SDK SG
'create adbmobileTask instance
m.adbmobileTask = createObject("roSGNode", "adbmobileTask")
'get an instance of SDK using task instance
m.adbmobile =
ADBMobile().getADBMobileConnectorInstace(m.adbmobileTask)
m.adbmobileConstants = m.adbmobile.sceneGraphConstants()
'execute setter APIs
m.adbmobile.setDebugLogging(true)
'execute getter APIs
m.adbmobileTask.ObserverField(m.adbConstants.API_RESPONSE,
"onAdbmobileApiResponse")
m.adbmobile.getDebugLogging()
'listen for return data in registered callbacks
function onAdbmobileApiResponse() as void
responseObject = m.adbmobileTask[m.adbmobileConstants.API_RESPONSE]
if responseObject <> invalid
methodName = responseObject.apiName
retVal = responseObject.returnValue
if methodName = m.adbmobileConstants.DEBUG_LOGGING
if retVal
print "API Response: DEBUG LOGGING: " + "True"
else
print "API Response: DEBUG LOGGING: " + "False"
endif
endif
end function