Roku - SceneGraph에서 추적 tracking-in-scenegraph-roku
소개 introduction
Roku SceneGraph XML 프로그래밍 프레임워크를 사용하여 애플리케이션을 개발할 수 있습니다. 이 프레임워크는 다음과 같은 두 가지 주요 개념을 제공합니다.
- 애플리케이션 화면의 SceneGraph 렌더링
- SceneGraph 화면의 XML 구성
Roku용 Adobe Mobile SDK는 BrightScript로 작성됩니다. SDK는 SceneGraph에서 실행되는 앱(예: 스레드)에 사용할 수 없는 많은 구성 요소를 사용합니다. 따라서 SceneGraph 프레임워크를 사용하려는 Roku 앱 개발자는 Adobe Mobile SDK API를 호출할 수 없습니다(후자는 기존 BrightScript 앱에서 사용할 수 있는 것과 비슷함).
아키텍처 architecture
AdobeMobile SDK에 SceneGraph 지원을 추가하기 위해 Adobe SDK와 adbmobileTask
사이에 커넥터 브리지를 작성하는 새 API가 추가되었습니다. 후자는 SDK의 API 실행에 사용되는 SceneGraph 노드입니다. (adbmobileTask
사용 방법은 이 문서의 나머지 부분에서 자세히 설명합니다.)
커넥터 브리지는 다음과 같을 작업을 수행하도록 설계되었습니다.
- 브리지는 AdobeMobile SDK의 SceneGraph 호환 인스턴스를 반환합니다. SceneGraph 호환 SDK에는 기존 SDK가 노출하는 모든 API가 있습니다.
- SceneGraph에서 Adobe Mobile SDK API를 사용하는 방법은 기존 API를 사용한 방법과 매우 유사합니다.
- 또한 브리지는 일부 데이터를 반환하는 API에 대한 콜백을 수신하기 위한 메커니즘을 노출합니다.
구성 요소 components
SceneGraph 애플리케이션:
- SceneGraph 커넥터 브리지 API를 통해
AdobeMobileLibrary
API를 이용합니다. - 예상 출력 데이터 변수에 대한
adbmobileTask
에 응답 콜백을 등록합니다.
AdobeMobileLibrary:
- 커넥터 브리지 API를 비롯한 공개 API(기존) 세트를 노출합니다.
- 모든 기존 공개 API를 래핑하는 SceneGraph 커넥터 인스턴스를 반환합니다.
- API 실행을 위해
adbmobileTask
SceneGraph 노드와 통신합니다.
adbmobileTask 노드:
- 백그라운드 스레드에서
AdobeMobileLibrary
API를 실행하는 SceneGraph 작업 노드입니다. - 애플리케이션 화면으로 다시 데이터를 반환하기 위한 위임 역할을 합니다.
공개 SceneGraph APIs public-scenegraph-apis
ADBMobileConnector
sceneGraphConstants
SceneGraphConstants
가 포함된 개체를 반환합니다. 자세한 내용은 위의 테이블을 참조하십시오.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
노드의 adbmobileApiResponse
필드에서 검색하는 데 사용됩니다.DEBUG_LOGGING
getDebugLogging
에 apiName
으로 사용됨PRIVACY_STATUS
getPrivacyStatus
에 apiName
으로 사용됨TRACKING_IDENTIFIER
trackingIdentifier
에 apiName
으로 사용됨USER_IDENTIFIER
userIdentifier
에 apiName
으로 사용됨VISITOR_MARKETING_CLOUD_ID
visitorMarketingCloudID
에 apiName
으로 사용됨AUDIENCE_VISITOR_PROFILE
audienceVisitorProfile
에 apiName
으로 사용됨AUDIENCE_DPID
audienceDpid
에 apiName
으로 사용됨AUDIENCE_DPUUID
audienceDpuuid
에 apiName
으로 사용됨adbmobileTask 노드
AdobeMobileSDK에서 실행된 모든 읽기 전용 API는 이 필드에 대한 응답을 반환합니다. 응답 개체를 수신하려면 이 필드에 대한 업데이트를 수신할 콜백을 등록합니다. 다음은 응답 개체에 대한 형식입니다.
response = {
"apiName" : <SceneGraphConstants.
API_NAME>
"returnValue : <API_RESPONSE>
}
이 응답 개체의 인스턴스는 API 참조 가이드에 따라 값을 반환해야 하는 AdobeMobileSDK의 API 호출에 대해 전송됩니다. 예를 들어 visitorMarketingCloudID()에 대한 API 호출은 다음 응답 개체를 반환합니다.
response = {
"apiName" : m.
adbmobileConstants.
VISITOR_MARKETING_CLOUD_ID
"returnValue : "07050x25671x33760x72644x14"
}
또는 응답 데이터도 올바르지 않을 수 있습니다.
response = {
"apiName" : m.
adbmobileConstants.
VISITOR_MARKETING_CLOUD_ID
"returnValue : invalid
}
adbmobile.brs
getADBMobileConnectorInstance
API 서명: ADBMobile().getADBMobileConnectorInstance()
입력: adbmobileTask
반환 유형: ADBMobileConnector
sgConstants
API 서명: ADBMobile().sgConstants()
입력: 없음
반환 유형: SceneGraphConstants
ADBMobileConnector
API 참조를 참조하십시오.ADBMobile 상수
version
PRIVACY_STATUS_OPT_IN
PRIVACY_STATUS_OPT_OUT
레거시 AdobeMobileLibrary에 전역으로 정의된 유틸리티 MediaHeartbeat
API는 SceneGraph 노드에서 사용할 수 없는 Brightscript 구성 요소를 사용하지 않으므로 SceneGraph 환경에서 그대로 액세스할 수 있습니다. 이러한 메서드에 대한 자세한 내용은 아래 표를 참조하십시오.
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
구현 implementation
-
Roku 라이브러리 다운로드 - 최신 Roku 라이브러리를 다운로드합니다.
-
개발 환경 설정
-
adbmobile.brs
(AdobeMobileLibrary)를pkg:/source/
디렉토리에 복사합니다. -
장면 그래프 지원을 위해
adbmobileTask.brs
및adbMobileTask.xml
을pkg:/components/
디렉토리에 복사합니다.
-
-
초기화
-
장면으로
adbmobile.brs
을 가져옵니다.code language-none <script type="text/brightscript" uri="pkg:/source/adbmobile.brs" />
-
장면에
adbmobileTask
노드의 인스턴스를 생성합니다.code language-none m.adbmobileTask = createObject("roSGNode", "adbmobileTask")
-
adbmobile
인스턴스를 사용하여 SceneGraph에 대한adbmobileTask
커넥터의 인스턴스를 가져옵니다.code language-none m.adbmobile = ADBMobile().getADBMobileConnectorInstance(m.adbmobileTask)
-
SG 상수
adbmobile
를 가져옵니다.code language-none m.adbmobileConstants = m.adbmobile.sceneGraphConstants()
-
모든
AdbMobile
API 호출에 대한 응답 개체를 수신하기 위해 콜백을 등록합니다.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
-
샘플 구현 sample-implementation
레거시 SDK에 대한 샘플 API 호출
'get an instance of SDK
m.adbmobile = ADBMobile()
'execute setter APIs
m.adbmobile.setDebugLogging(true)
'execute getter APIs
debugLogging = m.adbmobile.getDebugLogging()
SG SDK에 대한 샘플 API 호출
'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