Roku - Rastreamento no SceneGraph tracking-in-scenegraph-roku
Introdução introduction
Você pode usar a estrutura de programação XML do Roku SceneGraph para desenvolver aplicativos. Esta estrutura apresenta dois conceitos principais:
- Renderização do SceneGraph das telas do aplicativo
- Configuração XML das telas do SceneGraph
O SDK do Adobe Mobile para Roku foi escrito em BrightScript. O SDK usa muitos componentes que não estão disponíveis para um aplicativo em execução no SceneGraph (por exemplo, threads). Portanto, um desenvolvedor do aplicativo Roku que pretende usar a estrutura do SceneGraph não pode chamar as APIs do SDK do Adobe Mobile (as últimas são semelhantes às disponíveis nos aplicativos herdados do BrightScript).
Arquitetura architecture
Para adicionar suporte do SceneGraph ao SDK do AdobeMobile, a Adobe adicionou uma nova API que cria um conector bridge entre o SDK do AdobeMobile e adbmobileTask. O último é um nó do SceneGraph usado para a execução da API do SDK. (O uso do adbmobileTask é explicado em detalhes mais adiante neste documento.)
A ponte do conector foi projetada para funcionar da seguinte forma:
- A ponte retorna uma instância compatível com o SceneGraph do SDK do AdobeMobile. O SDK compatível com o SceneGraph tem todas as APIs que o SDK herdado expõe.
- Você usa as APIs do SDK do AdobeMobile no SceneGraph de uma forma muito semelhante à forma como usava as APIs herdadas.
- A ponte também expõe um mecanismo para acompanhar retornos de chamada para APIs que retornam alguns dados.
Componentes components
Aplicativo SceneGraph:
- Consume APIs
AdobeMobileLibrarypor meio das APIs do conector bridge do SceneGraph. - Registra retornos de chamada de resposta em
adbmobileTaskpara as variáveis de dados de saída esperadas.
AdobeMobileLibrary:
- Expõe um conjunto de APIs públicas (Herdadas), incluindo a API de ponte do conector.
- Retorna uma instância do conector do SceneGraph que envolve todas as APIs públicas herdadas.
- Comunica-se com um nó
adbmobileTaskdo SceneGraph para a execução de APIs.
Nó adbmobileTask:
- Um nó de tarefa do SceneGraph que executa as APIs
AdobeMobileLibraryem um thread em segundo plano. - Atua como um representante para retornar os dados às cenas do aplicativo.
APIs públicas do SceneGraph public-scenegraph-apis
ADBMobileConnector
sceneGraphConstantsSceneGraphConstants. Consulte os detalhes na tabela acima.setDebugLogginggetDebugLoggingsetPrivacyStatusgetPrivacyStatustrackStatetrackActiontrackingIdentifieruserIdentifiersetUserIdentifiergetAllIdentifiersvisitorSyncIdentifiersvisitorMarketingCloudIDaudienceSubmitSignalaudienceVisitorProfileaudienceDpidaudienceDpuuidaudienceSetDpidAndDpuuidmediaTrackLoadmediaTrackUnloadmediaTrackPlaymediaTrackCompletemediaTrackErrormediaUpdatePlayheadmediaUpdateQoSSceneGraphConstants
API_RESPONSEadbmobileTask do nó adbmobileApiResponseDEBUG_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 audienceDpuuidNó adbmobileTask
Somente leitura. Todas as APIs executadas no AdobeMobileSDK retornarão respostas neste campo. Registre-se para um retorno de chamada para detectar as atualizações desse campo e receber objetos de resposta. A seguir está o formato para o objeto de resposta:
response = {
"apiName" : <SceneGraphConstants.
API_NAME>
"returnValue : <API_RESPONSE>
}
Uma instância desse objeto de resposta será enviada para qualquer chamada de API no AdobeMobileSDK que deveria retornar um valor de acordo com o guia de referência da API. Por exemplo, uma chamada de API para visitorMarketingCloudID() retornará o seguinte objeto de resposta:
response = {
"apiName" : m.
adbmobileConstants.
VISITOR_MARKETING_CLOUD_ID
"returnValue : "07050x25671x33760x72644x14"
}
OU, os dados de resposta também podem ser inválidos:
response = {
"apiName" : m.
adbmobileConstants.
VISITOR_MARKETING_CLOUD_ID
"returnValue : invalid
}
adbmobile.brs
getADBMobileConnectorInstance
Assinatura da API: ADBMobile().getADBMobileConnectorInstance()
Entrada: adbmobileTask
Tipo de retorno: ADBMobileConnector
sgConstants
Assinatura da API: ADBMobile().sgConstants()
Entrada: Nenhum
Tipo de retorno: SceneGraphConstants
ADBMobileConnector para obter mais detalhes.Constantes do ADBMobile
versionPRIVACY_STATUS_OPT_INPRIVACY_STATUS_OPT_OUTAs APIs do MediaHeartbeat definidas globalmente na AdobeMobileLibrary herdada podem ser acessadas como estão no ambiente do SceneGraph porque elas não usam componentes do Brightscript que não estejam disponíveis nos nós do SceneGraph. Para obter mais informações sobre esses métodos, consulte a tabela abaixo:
Métodos globais 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 ObjectImplementação implementation
-
Baixe a biblioteca do Roku - Baixe a biblioteca do Roku mais recente.
-
Configurar o ambiente de desenvolvimento
-
Copie
adbmobile.brs(AdobeMobileLibrary) no diretóriopkg:/source/. -
Para obter suporte ao SceneGraph, copie
adbmobileTask.brseadbMobileTask.xmlno diretóriopkg:/components/.
-
-
Inicializar
-
Importe
adbmobile.brsna cena.code language-none <script type="text/brightscript" uri="pkg:/source/adbmobile.brs" /> -
Crie uma instância do nó
adbmobileTaskna Cena.code language-none m.adbmobileTask = createObject("roSGNode", "adbmobileTask") -
Obtenha uma instância do conector
adbmobilepara o SceneGraph usando a instânciaadbmobileTask.code language-none m.adbmobile = ADBMobile().getADBMobileConnectorInstance(m.adbmobileTask) -
Obtenha as constantes
adbmobiledo SG.code language-none m.adbmobileConstants = m.adbmobile.sceneGraphConstants() -
Registre um retorno de chamada para receber o objeto de resposta para todas as chamadas de 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
-
Exemplo de implementação sample-implementation
Exemplos de chamadas de API no SDK herdado
'get an instance of SDK
m.adbmobile = ADBMobile()
'execute setter APIs
m.adbmobile.setDebugLogging(true)
'execute getter APIs
debugLogging = m.adbmobile.getDebugLogging()
Exemplos de chamadas de API no SDK do 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