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를 통해
AdobeMobileLibraryAPI를 이용합니다. - 예상 출력 데이터 변수에 대한
adbmobileTask에 응답 콜백을 등록합니다.
AdobeMobileLibrary:
- 커넥터 브리지 API를 비롯한 공개 API(기존) 세트를 노출합니다.
- 모든 기존 공개 API를 래핑하는 SceneGraph 커넥터 인스턴스를 반환합니다.
- API 실행을 위해
adbmobileTaskSceneGraph 노드와 통신합니다.
adbmobileTask 노드:
- 백그라운드 스레드에서
AdobeMobileLibraryAPI를 실행하는 SceneGraph 작업 노드입니다. - 애플리케이션 화면으로 다시 데이터를 반환하기 위한 위임 역할을 합니다.
공개 SceneGraph APIs public-scenegraph-apis
ADBMobileConnector
sceneGraphConstantsSceneGraphConstants가 포함된 개체를 반환합니다. 자세한 내용은 위의 테이블을 참조하십시오.setDebugLogginggetDebugLoggingsetPrivacyStatusgetPrivacyStatustrackStatetrackActiontrackingIdentifieruserIdentifiersetUserIdentifiergetAllIdentifiersvisitorSyncIdentifiersvisitorMarketingCloudIDaudienceSubmitSignalaudienceVisitorProfileaudienceDpidaudienceDpuuidaudienceSetDpidAndDpuuidmediaTrackLoadmediaTrackUnloadmediaTrackPlaymediaTrackCompletemediaTrackErrormediaUpdatePlayheadmediaUpdateQoSSceneGraphConstants
API_RESPONSEadbmobileTask 노드의 adbmobileApiResponse 필드에서 검색하는 데 사용됩니다.DEBUG_LOGGINGgetDebugLogging에 apiName으로 사용됨PRIVACY_STATUSgetPrivacyStatus에 apiName으로 사용됨TRACKING_IDENTIFIERtrackingIdentifier에 apiName으로 사용됨USER_IDENTIFIERuserIdentifier에 apiName으로 사용됨VISITOR_MARKETING_CLOUD_IDvisitorMarketingCloudID에 apiName으로 사용됨AUDIENCE_VISITOR_PROFILEaudienceVisitorProfile에 apiName으로 사용됨AUDIENCE_DPIDaudienceDpid에 apiName으로 사용됨AUDIENCE_DPUUIDaudienceDpuuid에 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 상수
versionPRIVACY_STATUS_OPT_INPRIVACY_STATUS_OPT_OUT레거시 AdobeMobileLibrary에 전역으로 정의된 유틸리티 MediaHeartbeat API는 SceneGraph 노드에서 사용할 수 없는 Brightscript 구성 요소를 사용하지 않으므로 SceneGraph 환경에서 그대로 액세스할 수 있습니다. 이러한 메서드에 대한 자세한 내용은 아래 테이블을 참조하십시오.
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 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() -
모든
AdbMobileAPI 호출에 대한 응답 개체를 수신하기 위해 콜백을 등록합니다.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