Seguimiento de Roku en SceneGraph tracking-in-scenegraph-roku
Primeros pasos introduction
Puede utilizar el marco de programación XML de Roku SceneGraph para desarrollar aplicaciones. Este nuevo marco de trabajo incluye dos nuevos conceptos clave:
- Representación SceneGraph en las pantallas de la aplicación
- Configuración de XML en las pantallas de SceneGraph
El SDK de Adobe Mobile para Roku está escrito en BrightScript. El SDK utiliza muchos componentes que no están disponibles para una aplicación que se ejecuta en SceneGraph (por ejemplo, los subprocesos). Por lo tanto, un desarrollador de aplicaciones Roku que pretenda usar el marco de trabajo de SceneGraph no puede llamar las API de SDK de Adobe Mobile (estas últimas son similares a las que están disponibles en aplicaciones heredadas de BrightScript).
Arquitectura architecture
Para que SceneGraph sea compatible con el SDK de AdobeMobile, Adobe ha añadido una nueva API que crea un puente de conector entre el SDK AdobeMobile y adbmobileTask. Este es un nodo SceneGraph utilizado para ejecutar la API del SDK. (El uso de adbmobileTask se explica en detalle en el resto de este documento).
El puente conector está diseñado para funcionar de la siguiente manera:
- El puente devuelve una instancia compatible con SceneGraph del SDK de AdobeMobile. El SDK compatible con SceneGraph tiene todas las API que expone el SDK heredado.
- Las API de SDK de AdobeMobile se usan en SceneGraph de forma muy similar a como se usan las API heredadas.
- El puente también expone un mecanismo para escuchar las llamadas de retorno de las API que arrojan algunos datos.
Componentes components
Aplicación SceneGraph:
- Utiliza las API de
AdobeMobileLibrarygracias al puente conector con SceneGraph. - Registra las llamadas de retorno en
adbmobileTaskpara las variables de datos de salida esperadas.
AdobeMobileLibrary:
- Expone un conjunto de API públicas (heredadas), incluida la API de puente conector.
- Arroja una instancia de conector de SceneGraph que envuelve todas las API públicas heredadas.
- Se comunica con un nodo
adbmobileTaskde SceneGraph para ejecutar las API.
Nodo adbmobileTask:
- Nodo de tareas de SceneGraph que ejecuta la API
AdobeMobileLibraryen un subproceso en segundo plano. - Sirve como delegado para devolver los datos a la aplicación.
API de SceneGraph públicas public-scenegraph-apis
ADBMobileConnector
sceneGraphConstantsSceneGraphConstants. Consulte la tabla anterior para obtener más detalles.setDebugLogginggetDebugLoggingsetPrivacyStatusgetPrivacyStatustrackStatetrackActiontrackingIdentifieruserIdentifiersetUserIdentifiergetAllIdentifiersvisitorSyncIdentifiersvisitorMarketingCloudIDaudienceSubmitSignalaudienceVisitorProfileaudienceDpidaudienceDpuuidaudienceSetDpidAndDpuuidmediaTrackLoadmediaTrackUnloadmediaTrackPlaymediaTrackCompletemediaTrackErrormediaUpdatePlayheadmediaUpdateQoSSceneGraphConstants
API_RESPONSEadbmobileTask del nodo adbmobileApiResponse.DEBUG_LOGGINGapiName para getDebugLoggingPRIVACY_STATUSapiName para getPrivacyStatusTRACKING_IDENTIFIERapiName para trackingIdentifierUSER_IDENTIFIERapiName para userIdentifierVISITOR_MARKETING_CLOUD_IDapiName para visitorMarketingCloudIDAUDIENCE_VISITOR_PROFILEapiName para audienceVisitorProfileAUDIENCE_DPIDapiName para audienceDpidAUDIENCE_DPUUIDapiName para audienceDpuuidNodo adbmobileTask
Solo lectura: Todas las API ejecutadas en AdobeMobileSDK devolverán las respuestas en este campo. Regístrese y reciba una llamada de retorno para conocer las actualizaciones de este campo y recibir los objetos de respuesta. A continuación, se muestra el formato del objeto de respuesta:
response = {
"apiName" : <SceneGraphConstants.
API_NAME>
"returnValue : <API_RESPONSE>
}
Se enviará una instancia de este objeto Response para cualquier llamada de API en AdobeMobileSDK de la que se espera un valor de retorno conforme a la guía de referencia de la API. Por ejemplo, una llamada API para visitorMarketingCloudID() devolverá el siguiente objeto de respuesta:
response = {
"apiName" : m.
adbmobileConstants.
VISITOR_MARKETING_CLOUD_ID
"returnValue : "07050x25671x33760x72644x14"
}
O bien, los datos de respuesta podrían no ser válidos:
response = {
"apiName" : m.
adbmobileConstants.
VISITOR_MARKETING_CLOUD_ID
"returnValue : invalid
}
adbmobile.brs
getADBMobileConnectorInstance
Firma de API: ADBMobile().getADBMobileConnectorInstance()
Entrada: adbmobileTask
Tipo de devolución: ADBMobileConnector
sgConstants
Firma de API: ADBMobile().sgConstants()
Entrada: Ninguno
Tipo de devolución: SceneGraphConstants
ADBMobileConnector para obtener más detalles.Constantes ADBMobile
versionPRIVACY_STATUS_OPT_INPRIVACY_STATUS_OPT_OUTLas API de MediaHeartbeat de utilidades definidas globalmente en el archivo AdobeMobileLibrary heredado son accesibles tal como se encuentran en el entorno de SceneGraph porque no utilizan componentes Brightscript que no estén en los nodos SceneGraph. Para obtener más información sobre estos métodos, consulte la siguiente tabla:
Métodos globales para 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 ObjectImplementación implementation
-
Descargue la biblioteca Roku: Descargue la última biblioteca Roku.
-
Configurar el entorno de desarrollo
-
Copie
adbmobile.brs(AdobeMobileLibrary) en su directoriopkg:/source/. -
Para la compatibilidad con SceneGraph, copie
adbmobileTask.brsyadbMobileTask.xmlen el directoriopkg:/components/.
-
-
Inicializar
-
Importe
adbmobile.brsen la escena.code language-none <script type="text/brightscript" uri="pkg:/source/adbmobile.brs" /> -
Cree una instancia del nodo
adbmobileTasken la escena.code language-none m.adbmobileTask = createObject("roSGNode", "adbmobileTask") -
Obtenga una instancia del conector
adbmobilepara SceneGraph con la instancia deadbmobileTask.code language-none m.adbmobile = ADBMobile().getADBMobileConnectorInstance(m.adbmobileTask) -
Obtenga constantes SG de
adbmobile.code language-none m.adbmobileConstants = m.adbmobile.sceneGraphConstants() -
Registre una llamada de retorno para recibir un objeto Response para todas las llamadas a la 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
-
Implementación de muestra sample-implementation
Llamadas de API de muestra en el SDK heredado
'get an instance of SDK
m.adbmobile = ADBMobile()
'execute setter APIs
m.adbmobile.setDebugLogging(true)
'execute getter APIs
debugLogging = m.adbmobile.getDebugLogging()
Ejemplo de llamadas de API en SG SDK
'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