سرویس تلهمتری، رجیستری ناشر قابل پیکربندی را به عنوان وسیلهای ثانویه برای جمعآوری دادهها ارائه میدهد. برنامهها و سرویسها میتوانند خود را به عنوان ناشران تلهمتری در رجیستری ثبت کنند، که به نوبه خود آنها را در دسترس سرویس تلهمتری قرار میدهد. برای اطلاعات بیشتر در مورد انواع منابع دادهای که ما پشتیبانی میکنیم، به منابع داده مراجعه کنید.
کتابخانه
تلهمتری از طریق Binder با ناشران Configurable Publisher Registry ارتباط برقرار میکند. به جای پیادهسازی دستی رابطهای AIDL، اکیداً توصیه میکنیم از کتابخانه آزمایشی Configurable Publisher Registry که بخشی از Telemetry SDK ما است، استفاده کنید. این کتابخانه رابطهای AIDL را حذف کرده و یک API تمیز و از نظر نوع ایمن برای تعریف ناشران، انتشار دادههای تلهمتری و مدیریت تبدیل پیامهای protobuf به فرمت سیمی آنها ارائه میدهد.
برای اطلاعات بیشتر در مورد استفاده از کتابخانه، به کتابخانه رجیستری ناشر قابل پیکربندی مراجعه کنید.
پیادهسازی و ثبت ناشر دستی
اگر ترجیح میدهید از کتابخانهی ارائه شده استفاده نکنید، میتوانید رابطهای Binder لازم را به صورت دستی پیادهسازی کنید. بخشهای زیر مروری بر مراحل مورد نیاز برای پیادهسازی یک ناشر و ثبت آن در رجیستری ناشر قابل پیکربندی ارائه میدهند.
ثبت نام
برخلاف سرویسهای SDV که فرادادههای خود، مانند ساختار پیام، را در VSIDL تعریف کرده و در دسترس سیستم قرار میدهند، ناشرانی که از رجیستری ناشر قابل پیکربندی استفاده میکنند، باید فرادادههای خود را صریحاً ارائه دهند. شما این فراداده را از طریق شیء PublisherInfo در حین ثبتنام ارائه میدهید.
شما این ناشران را با استفاده از رابط IConfigurablePublisherRegistry AIDL ثبت میکنید. به این ترتیب، میتوانید ناشران را به هر زبانی که AIDL پشتیبانی میکند، از جمله جاوا، C++ و Rust، بنویسید. این رابط دو روش ارائه میدهد:
از متد
registerPublisherبرای ثبت یک ناشر جدید در سرویس Telemetry استفاده کنید:void registerPublisher(in PublisherInfo publisherInfo, in IConfigurablePublisher publisher)از متد
unregisterPublisherبرای لغو ثبت یک ناشر قبلاً ثبت شده از سرویس Telemetry استفاده کنید:void unregisterPublisher(in @utf8InCpp String serviceName)
شیء PublisherInfo اطلاعات اولیه ناشر را مشخص میکند:
| میدان | توضیحات |
|---|---|
serviceName | نامی که توسط کاربر برای ناشر تعریف میشود. از این نام برای ارجاع به آن از پیکربندیهای معیارها استفاده کنید. |
fileDescriptorSet | یک google.protobuf.FileDescriptorSet سریالیزه شده (برای اطلاعات بیشتر به بخش پیامهای خودتوصیفگر مراجعه کنید) که شامل توصیفگر پیام (که توسط فیلد messageTypeName نامگذاری شده است) پیامی است که این ناشر منتشر میکند و تمام وابستگیهای لازم آن. سرویس Telemetry از توصیفگر پیام برای deserialize کردن دادههای ارسال شده توسط ناشر استفاده میکند. برای اطلاعات بیشتر در مورد تولید این در زمان ساخت، به ابزار تولیدکننده توصیفگر جاوا protobuf مراجعه کنید. |
messageTypeName | نام کامل پیامهای protobuf که ناشر شما منتشر میکند. توصیفگر پیام این پیام باید در fileDescriptorSet تعریف شود. |
supportsGet | نشان میدهد که آیا ناشر میتواند آخرین پیام را بدون اشتراک در آن ارائه دهد یا خیر. |
پیادهسازی
ناشر سفارشی شما باید رابط IConfigurablePublisher را با ارائه متدهای زیر پیادهسازی کند:
سرویس Telemetry در صورتی که
connection_typeمنبع داده برای این ناشر در پیکربندی metrics رویSUBSCRIPTIONتنظیم شده باشد،createSubscriptionبرای عضویت در یک ناشر فراخوانی میکند. آرگومانISubscriberکه به ناشر شما ارسال میشود، یک متدsendData(in byte[] data)ارائه میدهد که میتوانید از آن برای ارسال پیامهای protobuf به سرویس Telemetry استفاده کنید.IConfigurablePublisherSubscription createSubscription(in ISubscriber subscriber, in @nullable byte[] configuration)سرویس Telemetry متد
getLatestMessageرا برای دریافت آخرین پیام یک ناشر فراخوانی میکند، اگرconnection_typeمنبع داده برای این ناشر در پیکربندی metrics رویON_DEMANDتنظیم شده باشد. سرویس Telemetry فقط در صورتی از این متد استفاده میکند کهPublisherInfoناشر،supportsGet = trueرا نشان دهد.@nullable byte[] getLatestMessage(in @nullable byte[] configuration)
سرویس تلهمتری، آرگومان configuration را روی گزینه configuration منبع داده در پیکربندی معیارها تنظیم میکند.