遙測服務提供可設定的發布者登錄檔,做為資料收集的次要方式。應用程式和服務可以在註冊資料庫中將自己註冊為遙測發布者,進而供遙測服務使用。如要進一步瞭解我們支援的資料來源類型,請參閱「資料來源」。
媒體庫
遙測會透過 Binder 與可設定的發布商登錄發布商通訊。我們強烈建議您使用實驗性的可設定發布商登錄程式庫,該程式庫是 Telemetry SDK 的一部分,而不是手動實作 AIDL 介面。這個程式庫會抽象化 AIDL 介面,並提供乾淨且型別安全的 API,用於定義發布商、發布遙測資料,以及管理通訊協定緩衝區訊息到線路格式的轉換。
如要進一步瞭解如何使用這個程式庫,請參閱「可設定的發布商登錄程式庫」。
手動導入及註冊發布商
如果您不想使用提供的程式庫,可以手動實作必要的 Binder 介面。以下各節將簡要說明實作發布商,並在可設定的發布商登錄檔中註冊發布商的必要步驟。
註冊
與 SDV 服務不同,後者的中繼資料 (例如訊息結構) 是在 VSIDL 中定義,且可供系統使用,但使用可設定發布商登錄的發布商必須明確提供中繼資料。您可以在註冊期間透過 PublisherInfo 物件提供這項中繼資料。
您可以使用 IConfigurablePublisherRegistry
AIDL 介面註冊這些發布者。因此,您可以使用 AIDL 支援的任何語言 (包括 Java、C++ 和 Rust) 撰寫發布者。介面提供兩種方法:
使用
registerPublisher方法向遙測服務註冊新的發布者:void registerPublisher(in PublisherInfo publisherInfo, in IConfigurablePublisher publisher)使用
unregisterPublisher方法,從 Telemetry 服務取消註冊先前註冊的發布商:void unregisterPublisher(in @utf8InCpp String serviceName)
PublisherInfo 物件會指定發布商的基本資訊:
| 欄位 | 說明 |
|---|---|
serviceName |
發布者的使用者定義名稱。您可以使用這個名稱,從指標設定中參照發布者。 |
fileDescriptorSet |
序列化 google.protobuf.FileDescriptorSet (詳情請參閱自我描述訊息),其中包含這個發布端發布的訊息的訊息描述元 (由 messageTypeName 欄位命名) 和所有必要依附元件。遙測服務會使用訊息描述元,還原發布端傳送的資料。如要進一步瞭解如何在建構時間產生這項資料,請參閱 Java protobuf 描述元產生器工具。 |
messageTypeName |
發布者發布的 protobuf 訊息全名。這則訊息的訊息描述元必須在 fileDescriptorSet 中宣告。 |
supportsGet |
指出發布者是否可以提供最新訊息,而不需訂閱該訊息。 |
導入作業
自訂發布者必須實作 IConfigurablePublisher 介面,並提供下列方法:
如果指標設定中,這個發布者的資料來源
connection_type設為SUBSCRIPTION,遙測服務就會呼叫createSubscription,訂閱發布者。傳遞至發布者的ISubscriber引數會提供sendData(in byte[] data)方法,您可以使用這個方法將 protobuf 訊息串流至遙測服務。IConfigurablePublisherSubscription createSubscription(in ISubscriber subscriber, in @nullable byte[] configuration)如果指標設定中,這個發布者的資料來源
connection_type設為ON_DEMAND,遙測服務就會呼叫getLatestMessage,擷取發布者的最新訊息。只有在發布商的PublisherInfo指出supportsGet = true時,遙測服務才會使用這個方法。@nullable byte[] getLatestMessage(in @nullable byte[] configuration)
遙測服務會將 configuration 引數設為指標設定中資料來源的 configuration 選項。