Roku – Tracking in SceneGraph
Erstellt für:
- Benutzende
- Admin
- Entwickler
Einführung
Sie können das Roku SceneGraph XML-Programmier-Framework verwenden, um Anwendungen zu entwickeln. Dieses Framework umfasst zwei Schlüsselkonzepte:
- SceneGraph-Rendering der Anwendungsszenen
- XML-Konfiguration der SceneGraph-Screens
Das Adobe Mobile SDK for Roku wurde in BrightScript geschrieben. Das SDK verwendet viele Komponenten, die nicht für eine App verfügbar sind, die auf SceneGraph ausgeführt wird (z. B. Threads). Daher kann ein Roku-App-Entwickler, der das SceneGraph-Framework verwenden möchte, Adobe Mobile SDK-APIs nicht aufrufen (letztere sind ähnlich wie die in älteren BrightScript-Apps verfügbaren APIs).
Architektur
Damit das AdobeMobile-SDK SceneGraph unterstützt, hat Adobe eine neue API hinzugefügt, die eine Connector-Verbindung zwischen dem AdobeMobile-SDK und adbmobileTask
herstellt. Letzterer ist ein SceneGraph-Knoten, der für die API-Ausführung des SDK verwendet wird. (Die Verwendung von adbmobileTask
wird im Rest dieses Dokuments ausführlich erklärt.)
Die Connector-Verbindung ist wie folgt ausgelegt:
- Die Verbindung gibt eine SceneGraph-kompatible Instanz des AdobeMobile SDK zurück. Das SceneGraph-kompatible SDK verfügt über alle APIs, die vom alten SDK bereitgestellt werden.
- Sie verwenden die AdobeMobile SDK-APIs in SceneGraph ähnlich wie die alten APIs.
- Die Verbindung stellt auch einen Mechanismus zum Abhören von Callbacks für APIs, die Daten zurückgeben, bereit.
Komponenten
SceneGraph-Anwendung:
- Nutzt
AdobeMobileLibrary
-APIs über die APIs der SceneGraph-Connector-Verbindung. - Überwacht Antwort-Callbacks in
adbmobileTask
auf unerwartete Ausgabedatenvariablen.
AdobeMobileLibrary:
- Stellt eine Reihe öffentlicher APIs (Legacy) bereit, einschließlich der Connector Bridge-API.
- Gibt eine SceneGraph-Connector-Instanz zurück, die alle älteren öffentlichen APIs einpackt.
- Kommuniziert mit einem SceneGraph-
adbmobileTask
-Knoten für die Ausführung der APIs.
adbmobileTask-Knoten:
- Ein SceneGraph-Aufgabenknoten, der
AdobeMobileLibrary
-APIs im Hintergrund-Thread ausführt. - Dient als Delegate, der Daten an die Anwendungsszenen zurückgeben kann.
Öffentliche SceneGraph-APIs
ADBMobileConnector
sceneGraphConstants
SceneGraphConstants
enthält. Ausführliche Informationen finden Sie in der oben stehenden Tabelle.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
adbmobileApiResponse
-Feld des adbmobileTask
-Knotens abzurufen.DEBUG_LOGGING
apiName
für getDebugLogging
verwendetPRIVACY_STATUS
apiName
für getPrivacyStatus
verwendetTRACKING_IDENTIFIER
apiName
für trackingIdentifier
verwendetUSER_IDENTIFIER
apiName
für userIdentifier
verwendetVISITOR_MARKETING_CLOUD_ID
apiName
für visitorMarketingCloudID
verwendetAUDIENCE_VISITOR_PROFILE
apiName
für audienceVisitorProfile
verwendetAUDIENCE_DPID
apiName
für audienceDpid
verwendetAUDIENCE_DPUUID
apiName
für audienceDpuuid
verwendetadbmobileTask-Knoten
Nur lesen. Alle APIs, die im AdobeMobileSDK ausgeführt werden, geben Antworten in diesem Feld zurück. Registrieren Sie einen Callback, der auf Aktualisierungen dieses Felds wartet, um Antwortobjekte zu empfangen. Das Antwortobjekt hat folgendes Format:
response = {
"apiName" : <SceneGraphConstants.
API_NAME>
"returnValue : <API_RESPONSE>
}
Eine Instanz dieses Antwortobjekts wird für jeden API-Aufruf des AdobeMobileSDK gesendet, bei dem gemäß API-Referenzhandbuch die Rückgabe eines Wertes erwartet wird. Ein API-Aufruf für visitorMarketingCloudID() gibt beispielsweise folgendes Antwortobjekt zurück:
response = {
"apiName" : m.
adbmobileConstants.
VISITOR_MARKETING_CLOUD_ID
"returnValue : "07050x25671x33760x72644x14"
}
Auch Antwortdaten können ungültig sein:
response = {
"apiName" : m.
adbmobileConstants.
VISITOR_MARKETING_CLOUD_ID
"returnValue : invalid
}
adbmobile.brs
getADBMobileConnectorInstance
API-Signatur: ADBMobile().getADBMobileConnectorInstance()
Eingabe: adbmobileTask
Rückgabetyp: ADBMobileConnector
sgConstants
API-Signatur: ADBMobile().sgConstants()
Eingabe: Keine
Rückgabetyp: SceneGraphConstants
ADBMobileConnector
-API-Referenz.ADBMobile-Konstanten
version
PRIVACY_STATUS_OPT_IN
PRIVACY_STATUS_OPT_OUT
Auf global definierte MediaHeartbeat
-APIs für Dienstprogramme in der älteren AdobeMobileLibrary kann wie in der SceneGraph-Umgebung zugegriffen werden, da keine in SceneGraph-Knoten nicht verfügbaren Brightscript-Komponenten verwendet werden. Weitere Informationen zu diesen Methoden finden Sie in der unten stehenden Tabelle:
Globale Methoden für 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
Implementierung
-
Roku-Bibliothek herunterladen - Laden Sie die aktuelle Roku-Bibliothek herunter.
-
Entwicklungsumgebung einrichten
-
Kopieren Sie
adbmobile.brs
(AdobeMobileLibrary) in das Verzeichnispkg:/source/
. -
Kopieren Sie für die SceneGraph-Unterstützung
adbmobileTask.brs
undadbMobileTask.xml
in das Verzeichnispkg:/components/
.
-
-
Initialisieren
-
Importieren Sie
adbmobile.brs
in Ihre Szene.<script type="text/brightscript" uri="pkg:/source/adbmobile.brs" />
-
Erstellen Sie eine Instanz des
adbmobileTask
-Knotens in Ihrer Szene.m.adbmobileTask = createObject("roSGNode", "adbmobileTask")
-
Rufen Sie mit
adbmobile
eine Instanz desadbmobileTask
-Connectors für SceneGraph ab.m.adbmobile = ADBMobile().getADBMobileConnectorInstance(m.adbmobileTask)
-
Rufen Sie die
adbmobile
-SceneGraph-Konstanten ab.m.adbmobileConstants = m.adbmobile.sceneGraphConstants()
-
Registrieren Sie einen Callback, der das Antwortobjekt für alle
AdbMobile
-API-Aufrufe empfängt.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
-
Beispielimplementierung
API-Beispielaufrufe im Legacy-SDK
'get an instance of SDK
m.adbmobile = ADBMobile()
'execute setter APIs
m.adbmobile.setDebugLogging(true)
'execute getter APIs
debugLogging = m.adbmobile.getDebugLogging()
API-Beispielaufrufe im SceneGraph-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