Roku - SceneGraph でのトラッキング tracking-in-scenegraph-roku
はじめに introduction
Roku SceneGraph XML プログラミングフレームワークを使用して、アプリケーションを開発できます。 このフレームワークの特長は、次の 2 つの重要な概念です。
- アプリケーション画面の SceneGraph レンダリング
- SceneGraph 画面の XML 設定
Adobe Mobile SDK for Roku は BrightScript で記述されています。SDK では、SceneGraph 上で実行されるアプリでは利用できない様々なコンポーネントを使用します(スレッドなど)。したがって、SceneGraph フレームワークの使用を考えている Roku アプリケーション開発者は Adobe Mobile SDK API を呼び出すことができません(後者はレガシー BrightScript アプリで利用可能なものに類似しています)。
アーキテクチャ architecture
SceneGraph サポートを AdobeMobile SDK に追加するために、アドビは AdobeMobile SDK と adbmobileTask
の接続ブリッジを作成する新たな API を追加しました。後者は、SDK の API 実行に使用される SceneGraph ノードです(adbmobileTask
の使用方法については、このドキュメントの後半で詳しく説明します)。
コネクタブリッジは以下のように設計されています。
- ブリッジは、AdobeMobile SDK の SceneGraph 互換インスタンスを返します。SceneGraph 互換 SDK は、レガシー SDK で提供されているすべての API を備えています。
- SceneGraph での AdobeMobile SDK API の使用方法は、レガシー API の使用方法とほぼ同じです。
- ブリッジには、データを返す API のコールバックをリッスンするメカニズムも用意されています。
コンポーネント components
SceneGraph アプリケーション:
- SceneGraph 接続ブリッジ API を介して
AdobeMobileLibrary
API を利用します。 - 予期される出力データ変数に関して、
adbmobileTask
で応答コールバックを登録します。
AdobeMobileLibrary:
- コネクタブリッジ API を含む一連の公開 API(レガシー)を提供します。
- 従来の公開 API をすべて含む SceneGraph 接続インスタンスを返します。
- API 実行時には、
adbmobileTask
の SceneGraph ノードと通信します。
adbmobileTask Node:
AdobeMobileLibrary
API をバックグラウンドスレッドで実行する SceneGraph タスクノードです。- データをアプリケーションシーンに戻すデリゲートとして機能します。
公開 SceneGraph API 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/
ディレクトリにコピーします。 -
SceneGraph をサポートするために、
adbmobileTask.brs
およびadbMobileTask.xml
をpkg:/components/
ディレクトリにコピーします。
-
-
初期設定
-
adbmobile.brs
を Scene に読み込みます。code language-none <script type="text/brightscript" uri="pkg:/source/adbmobile.brs" />
-
adbmobileTask
ノードのインスタンスを Scene に作成します。code language-none m.adbmobileTask = createObject("roSGNode", "adbmobileTask")
-
adbmobile
インスタンスを使用して、SceneGraph 用adbmobileTask
コネクタを取得します。code language-none m.adbmobile = ADBMobile().getADBMobileConnectorInstance(m.adbmobileTask)
-
adbmobile
SG 定数を取得します。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