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
AdobeMobileLibrary
por meio das APIs do conector bridge do SceneGraph. - Registra retornos de chamada de resposta em
adbmobileTask
para 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ó
adbmobileTask
do SceneGraph para a execução de APIs.
Nó adbmobileTask:
- Um nó de tarefa do SceneGraph que executa as APIs
AdobeMobileLibrary
em 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
sceneGraphConstants
SceneGraphConstants
. Consulte os detalhes na tabela acima.setDebugLogging
getDebugLogging
setPrivacyStatus
getPrivacyStatus
trackState
trackAction
trackingIdentifier
userIdentifier
setUserIdentifier
getAllIdentifiers
visitorSyncIdentifiers
visitorMarketingCloudID
audienceSubmitSignal
audienceVisitorProfile
audienceDpid
audienceDpuuid
audienceSetDpidAndDpuuid
mediaTrackLoad
mediaTrackUnload
mediaTrackPlay
mediaTrackComplete
mediaTrackError
mediaUpdatePlayhead
mediaUpdateQoS
SceneGraphConstants
API_RESPONSE
adbmobileTask
do nó adbmobileApiResponse
DEBUG_LOGGING
apiName
para getDebugLogging
PRIVACY_STATUS
apiName
para getPrivacyStatus
TRACKING_IDENTIFIER
apiName
para trackingIdentifier
USER_IDENTIFIER
apiName
para userIdentifier
VISITOR_MARKETING_CLOUD_ID
apiName
para visitorMarketingCloudID
AUDIENCE_VISITOR_PROFILE
apiName
para audienceVisitorProfile
AUDIENCE_DPID
apiName
para audienceDpid
AUDIENCE_DPUUID
apiName
para audienceDpuuid
Nó 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
version
PRIVACY_STATUS_OPT_IN
PRIVACY_STATUS_OPT_OUT
As 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_mediainfo
Function adb_media_init_mediainfo(name As String, id As String, length As Double, streamType As String) As Object
adb_media_init_adinfo
Function adb_media_init_adinfo(name As String, id As String, position As Double, length As Double) As Object
adb_media_init_chapterinfo
Function adb_media_init_adbreakinfo(name As String, startTime as Double, position as Double) As Object
adb_media_init_adbreakinfo
Function adb_media_init_chapterinfo(name As String, position As Double, length As Double, startTime As Double) As Object
adb_media_init_qosinfo
Function adb_media_init_qosinfo(bitrate As Double, startupTime as Double, fps as Double, droppedFrames as Double) As Object
Implementaçã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.brs
eadbMobileTask.xml
no diretóriopkg:/components/
.
-
-
Inicializar
-
Importe
adbmobile.brs
na cena.code language-none <script type="text/brightscript" uri="pkg:/source/adbmobile.brs" />
-
Crie uma instância do nó
adbmobileTask
na Cena.code language-none m.adbmobileTask = createObject("roSGNode", "adbmobileTask")
-
Obtenha uma instância do conector
adbmobile
para o SceneGraph usando a instânciaadbmobileTask
.code language-none m.adbmobile = ADBMobile().getADBMobileConnectorInstance(m.adbmobileTask)
-
Obtenha as constantes
adbmobile
do 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