برنامه نمونه
اگر هنگام استفاده از Home API با مشکلی مواجه شدید، میتوانید گزارشها را برای اشکالزدایی بیشتر جمعآوری کنید. جمعآوری گزارشها از دستگاه همراه به Android Debug Bridge (adb) نیاز دارد. اگر به کمک Google نیاز دارید، گزارشها را از دستگاههای Android و هاب جمعآوری کنید و با اطلاعات و گزارشهای مربوطه، تیکتی در ردیاب مشکل باز کنید.
جمعآوری گزارشهای Android
دستگاه همراهتان باید برای همه مراحل مربوط به adb به دستگاه محلیتان متصل باشد.
نصب adb
اگر قبلاً این کار را نکردهاید، Android Debug Bridge را در ماشین محلیتان راهاندازی کنید:
- «adb» را در رایانهتان نصب کنید.
- «گزینههای توسعهدهنده» و «اشکالزدایی USB» را در تلفن Android روشن کنید.
دریافت شناسه دستگاه همراه
- شناسه دستگاه همراهتان را دریافت کنید:
adb devicesList of devices attached device-id device
- این مقدار را در متغیری بهنام
phoneidذخیره کنید:phoneid=device-id
اطلاعات نسخه
توصیه میکنیم هر زمان که تصمیم به جمعآوری گزارشها گرفتید، همه اطلاعات نسخه مربوط به راهاندازیتان را جمعآوری کنید. اگر لازم است مشکلات را با Google همرسانی کنید، این کار الزامی است.
- اطلاعات مختلف دستگاه را در متغیرها ذخیره کنید:
containerinfo=$(adb -s $phoneid shell dumpsys package com.google.android.gms | grep -m 1 "versionName" || true); ghainfo=$(adb -s $phoneid shell dumpsys package com.google.android.apps.chromecast.app | grep -m 1 "versionName" || true); androidversion=$(adb -s $phoneid shell getprop ro.build.version.release || true); androidapiversion=$(adb -s $phoneid shell getprop ro.build.version.sdk || true); chimeradump=$(adb -s $phoneid shell dumpsys activity provider com.google.android.gms.chimera.container.GmsModuleProvider || true); homemoduleinfo=$(echo "$chimeradump" | grep -w "com.google.android.gms.home" || true); optionalhomemoduleinfo=$(echo "$chimeradump" | grep -w "com.google.android.gms.optional_home" || true); threadinfo=$(echo "$chimeradump" | grep -w "com.google.android.gms.threadnetwork" || true); enabledfeatures=$(echo "$chimeradump" | grep "Enabled features" | grep -i "home" | sort -u || true) - همه متغیرها را در فایلی با نام
_versions.txtذخیره کنید:برای نمایش فرمانهای ذخیره متغیرها در فایل، ازهم باز کنید
کل بلوک را میتوان بهطور همزمان کپی و در پایانه جایگذاری کرد.
versionfile="_versions.txt" echo "Saving version info to $versionfile" echo "Container version: $containerinfo" > $versionfile echo "Home Module version: $homemoduleinfo" >> $versionfile echo "Optional Home Module version: $optionalhomemoduleinfo" >> $versionfile echo "Thread Module version: $threadinfo" >> $versionfile echo "GHA version: $ghainfo" >> $versionfile echo "Android version: $androidversion" >> $versionfile echo "Android API version: $androidapiversion" >> $versionfile echo "Found enabled features: $enabledfeatures" >> $versionfile
- درستیسنجی محتوای
_versions.txt:cat _versions.txtاکنون این فایل میتواند درصورت نیاز برای عیبیابی به Google ارائه شود.ازهم باز کردن برای نمایش برونداد فایل نمونه
Container version: versionName=26.26.34 (190400-945364269) Home Module version: com.google.android.gms.home [v262634001] Optional Home Module version: com.google.android.gms.optional_home [262634025] ... Thread Module version: com.google.android.gms.threadnetwork [v262634001] GHA version: versionName=4.22.28.0 Android version: 14 Android API version: 34 Found enabled features: Enabled features: appsearch_impl, brella_dynamite, dck_management...
فعال کردن پرچمهای اشکالزدایی مفصل
قبلاز جمعآوری گزارشهای دستگاه Android یا اجرای گزارش اشکال، اندازه میانگیر ثبتکننده را پیکربندی کنید و برچسبهای اشکالزدایی پرحرف را برای مؤلفههای Google Home و GMS فعال کنید:
# Clear existing device logs and expand logger buffer size
adb -s $phoneid logcat -b all -c
adb -s $phoneid logcat -G 8M
# Enable displaying seconds on the screen
adb -s $phoneid shell settings put secure clock_seconds 1
# Enable GMS Service ID verbose flags
adb -s $phoneid shell setprop log.tag.gms_svc_id:168 VERBOSE
adb -s $phoneid shell setprop log.tag.gms_svc_id:304 VERBOSE
adb -s $phoneid shell setprop log.tag.gms_svc_id:305 VERBOSE
adb -s $phoneid shell setprop log.tag.gms_svc_id:319 VERBOSE
adb -s $phoneid shell setprop log.tag.gms_svc_id:336 VERBOSE
adb -s $phoneid shell setprop log.tag.gms_svc_id:360 VERBOSE
# Enable GHP and Matter log tags
adb -s $phoneid shell setprop log.tag.CameraCommissioningPlugin VERBOSE
adb -s $phoneid shell setprop log.tag.HomeSdk VERBOSE
adb -s $phoneid shell setprop log.tag.HomeClient VERBOSE
adb -s $phoneid shell setprop log.tag.InteractionApiChimeraService VERBOSE
adb -s $phoneid shell setprop log.tag.MatterCommissioner VERBOSE
adb -s $phoneid shell setprop log.tag.SampleApp VERBOSEجمعآوری گزارشهای Android با متنها
برای ضبط گزارشهای زنده دستگاه Android درطول جلسه اشکالزدایی:
- دستورالعملهای فعال کردن پرچمهای اشکالزدایی مفصل را دنبال کنید تا گزارشهای موجود را پاک کنید، اندازه میانگیر را گسترش دهید، و برچسبهای ثبت گزارش مفصل را تنظیم کنید.
- همه برنامههای درحال اجرا در دستگاه همراه را ببندید.
- قبلاز شروع آزمایش، نویز میانگیر گزارش موجود را پاک کنید:
adb -s $phoneid logcat -c - فرایند جمعآوری گزارش را در پنجره ترمینال شروع کنید:
این پنجره ترمینال را باز بگذارید. تا زمانی که این فرایند اجرا میشود، گزارشهای دستگاهتان ضبط خواهد شد.adb -s $phoneid logcat | tee android-logs_$(date +%Y%m%d%H%M%S).txt - برنامهتان را اجرا کنید و همه کنشهای میانای کاربر را که برای بازتولید مشکل لازم است انجام دهید.
- پساز اتمام، فرایند
logcatرا در پایانه با فشار دادن Ctrl+C (یا Cmd+C در Mac) متوقف کنید. - گزارشهای این جلسه در
android-logs_YYYYMMDDmmss.txtذخیره شده است. هر دوandroid-logs_YYYYMMDDmmss.txtو_versions.txtرا به گزارشهای اشکال پیوست کنید.
جمعآوری گزارشهای Android با گزارش اشکال adb
وقتی لازم است اطلاعات تشخیصی دقیقی را همرسانی کنید که شامل مشکلات سطح سیستم، رونوشتهای خرابی، یا اشکالزدایی سطح پایین شبکه و بلوتوث میشود، گزارش اشکال کامل Android را ضبط کنید:
- راهاندازی Matter BLE: هنگام گزارش کردن مشکل راهاندازی Matter مربوط به BLE، قبلاز بازتولید مشکل، گزارش تجسس Bluetooth HCI را در «گزینههای توسعهدهندگان» (تنظیمات > گزینههای توسعهدهندگان > فعال کردن گزارش تجسس Bluetooth HCI) فعال کنید.
- راهاندازی پیشآزمون: قبلاز اجرای آزمون، مراحل فعال کردن پرچمهای اشکالزدایی پرجزئیات را دنبال کنید تا ویژگیهای اشکالزدایی پرجزئیات در دستگاهتان فعال شود.
- ضبط گزارش اشکال: پساز اجرای آزمایش و بازتولید مشکل، فرمان زیر را اجرا کنید تا بایگانی کامل گزارش اشکال تولید شود:
adb -s $phoneid bugreport ./android-bugreport_$(date +%Y%m%d%H%M%S).zip - اطلاعات اشکالزدایی پیشرفته: فایل
android-bugreport_YYYYMMDDmmss.zipتولیدشده حاوی دادههای جامع عیبیابی در سطح سیستم است (ازجمله تخلیه کامل سیستم، آمار حافظه، عیبیابی باتری، و ردیابیهای زیرسیستم سطح پایین) که اطلاعات پیشرفتهتری برای اشکالزدایی ارائه میدهد.
گزارشهای دستگاه کانون پخش محتوا
بااستفاده از این روش میتوانید گزارشهای دستگاه را برای هاب Google Nest خود مشاهده کنید. این روش برای مدلهای زیر پشتیبانی میشود:
- Google Home
- Google Nest Audio
- Google Nest Hub
- Google Nest Mini
برای فعال کردن کانون Cast برای بازیابی گزارشهای محلی:
- راهاندازی کردن «پل اشکالزدایی Android».
نشانی IP هاب را دریافت کنید:
- از کانون، اگر صفحهنمایش دارد:
- از بالای صفحهنمایش تند بهپایین بکشید
- روی نماد «تنظیمات» تکضرب بزنید
- نشانی IP دستگاه را پیدا کنید: در Nest Hub (2nd gen)، به اطلاعات دستگاه > اطلاعات فنی > نشانی IP بروید
- از GHA در تلفن:
- روی دستگاه تکضرب بزنید تا صفحه جزئیات دستگاه نشان داده شود
- روی نماد «تنظیمات» تکضرب بزنید تا صفحه تنظیمات باز شود
- نشانی IP دستگاه را پیدا کنید: به اطلاعات دستگاه > اطلاعات فنی > نشانی IP بروید
- از کانون، اگر صفحهنمایش دارد:
در رایانهای که به همان شبکه Wi-Fi دستگاه متصل است:
adb connect ip-addressadb logcatبرای ارائه گزارشها به فردی، عملیاتی را که ناموفق است انجام دهید و خروجی را به فایل نوشتاری منتقل کنید:
adb logcat -d > platform-logs.txt
خودکارسازیها
تشخیص لبه
خودکارسازیها در بومسازگان Google Home دارای ویژگی تشخیص لبه هستند که منطقی است که تأیید میکند آغازگر فقط زمانی فعال میشود که تغییر وضعیت واقعی وجود داشته باشد، برخلاف بهروزرسانی وضعیت که صرفاً وضعیت قبلی دستگاه را تکرار میکند.
برای مثال، اگر روشن کردن چراغ یک آغازگر باشد، تشخیص لبه تأیید میکند که آغازگر فقط درصورتی فعال میشود که آن دستگاه روشنایی از حالت خاموش به روشن تغییر کند، نه از حالت روشن به روشن (بدون تغییر).
خودکارسازی طبق انتظار عمل نمیکند
پساز درنظر گرفتن تشخیص لبه، اگر خودکارسازی طبق انتظار عمل نکرد:
هر دستگاه را بررسی کنید تا مطمئن شوید که بهدرستی و مستقل از خودکارسازی شما کار میکند.
نمودار خودکارسازی را برای خودکارسازیتان بررسی کنید و آن را با DSL خودکارسازیتان مقایسه کنید تا هرگونه فرض نادرست احتمالی ازجانب شما آشکار شود.
درطول اجرای خودکارسازی، وضعیت دستگاه را در برنامه Google Home مشاهده کنید.
بررسی کنید تا مطمئن شوید همه دستگاههای ارجاعشده توسط خودکارسازی در ساختاری که انتظار دارید باشند وجود دارند. حذف دستگاهی که خودکارسازی به آن وابسته است میتواند عواقب ناخواستهای داشته باشد. تأثیر حذف دستگاه بر خودکارسازیها را ببینید.
خودکارسازی زمانی اجرا میشود که نباید اجرا شود
اگر خودکارسازی شما زمانی اجرا میشود که نباید اجرا شود، معیارهای شروعکننده را بررسی کنید. ممکن است لازم باشد منطق بیشتری اضافه کنید تا مطمئن شوید که تغییر در وضعیت فقط یکبار ثبت میشود و خودکارسازی را فقط یکبار راهاندازی میکند.
خودکارسازی کامپایل نمیشود
مطمئن شوید برنامهتان حاوی همه واردات لازم باشد، ازجمله هر کلاس مربوط به انواع مختلف گره و همچنین ویژگیهایی که به آنها ارجاع میدهید.
اعتبارسنجی ساخت خودکارسازی ناموفق بود
اگر ایجاد خودکارسازی از اعتبارسنجی عبور نکند، پیام هشدار یا خطا
اطلاعاتی درباره مشکل ارائه میدهد. برای اطلاعات بیشتر، به مرجع
ValidationIssueType مراجعه کنید.
تابع فهرست استثناهایی را ایجاد میکند
هنگام فراخوانی تابع Automation API List، ممکن است گردانندههای خواندن بهدلیل نبود ویژگیهای API استثناهایی را ایجاد کنند. برای کاهش این مشکل، خودکارسازی تحتتأثیرقرارگرفته را حذف کنید.
برای انجام این کار:
- بررسی کنید که
adbنصب شده باشد. به نصب adb مراجعه کنید. شناسه خودکارسازی را با فراخوانی زیر از گزارشهای Android بازیابی کنید:
adb logcat -s GhpNativeگزارشهای نمونه:
adb logcat -s GhpNative level:debug | grep -A 10 -B 10 AutomationManagerTrait\.ListResponse INTERACTION RESPONSE -> SendCommandsResponse: 1 { 1: "automation@global" 3 { 1: "home.internal.traits.automation.AutomationManagerTrait.ListResponse" 2: 5 { 1: "type.googleapis.com/home.internal.traits.automation.AutomationManagerTrait.ListResponse" 1 { 1: "1111-2222-3333-44444-55555" // Automation ID to delete 2: "structure@2222-3333-4444-5555-6666" ...اگر لازم است چند شناسه خودکارسازی حذف شود، میتوانید از ورقزن پایانه برای کنترل برونداد استفاده کنید:
adb logcat -s GhpNative level:debug | lessحذف خودکارسازی بااستفاده از شناسه خودکارسازی:
structure.deleteAutomation(new object : HasId(id = "1111-2222-3333-44444-55555"))
وقتی ویژگیای لغو ثبت میشود، Discovery API هشداری ثبت میکند
اگر Discovery API هشداری برای Trait not found ثبت کند، به این معنی است که
API تلاش میکند از مشخصه برای نامزدهای Discovery استفاده کند، اما موفق نخواهد شد
زیرا مشخصه درطول مقداردهی اولیه ثبت نشده است. برای مثال:
09-03 17:45:20.578 10646 10646 W AutomationSdk: trait_id: "home.matter.6006.clusters.fc43" and Exception occurred com.google.home.HomeException: 18: Trait not found: home.matter.6006.clusters.fc43
09-03 17:45:20.578 10646 10646 W AutomationSdk: While converting candidate: # com.google.home.platform.traits.AutomationCandidateNode@76f0b582
شناسه ویژگی home.matter.6006.clusters.fc43 است که با RelativeHumidityControl مطابقت دارد. برای تعیین نام ویژگی از شناسه،
نمایه ویژگی را ببینید.
از این مثال، RelativeHumidityControl باید درطول مقداردهی اولیه برنامه ثبت شود. برای افزودن ویژگیتان به دفتر ثبت، به ثبت ویژگیها مراجعه کنید.
OAuth
اگر کارخواه OAuth موجود دارید
اگر ازقبل کارخواه OAuth درستیسنجیشدهای برای برنامه منتشرشده دارید، میتوانید از کارخواه OAuth موجودتان برای آزمایش Home API استفاده کنید.
برای آزمایش و استفاده از Home API، ثبتنام Google Home Developer Console لازم نیست. بااینحال، برای انتشار برنامهتان همچنان به ثبت تأییدشده Developer Console نیاز دارید، حتی اگر کارخواه OAuth درستیسنجیشدهای از ادغام دیگری داشته باشید.
ملاحظات زیر اعمال میشود:
هنگام استفاده از کارخواه OAuth موجود، محدودیت ۱۰۰ کاربر وجود دارد. برای کسب اطلاعات درباره افزودن کاربران آزمایشی، به صفحه کسب رضایت OAuth را راهاندازی کنید. مستقل از درستیسنجی OAuth، محدودیتی ازسوی Home APIs اعمال میشود که فقط ۱۰۰ کاربر میتوانند به برنامه شما اجازه اعطا کنند. این محدودیت پساز تکمیل ثبتنام Developer Console برداشته میشود.
Developer Console ثبتنام باید زمانی برای تأیید ارسال شود که آماده باشید اعطای دسترسی به نوع دستگاه را ازطریق OAuth محدود کنید تا برای بهروزرسانی برنامهتان با Home API آماده شوید.
برای Google Cloud برنامهای که هنوز درستیسنجی OAuth آنها معلق است، کاربران نمیتوانند جریان OAuth را تا زمانی که درستیسنجی تکمیل شود کامل کنند. تلاش برای اعطای اجازهها با خطای زیر ناموفق خواهد بود:
Access blocked: <Project Name> has not completed the Google verification process.