1. مقدمه
برنامه Device Access، Smart Device Management API، یک API REST را برای توسعه دهندگان فراهم می کند تا دستگاه های Google Nest را از برنامه های خود کنترل کنند. کاربران باید برای دسترسی شخص ثالث به دستگاههای Nest خود رضایت دهند.
سه مرحله کلیدی برای ادغام موفقیت آمیز دسترسی به دستگاه وجود دارد:
- ایجاد پروژه - یک پروژه در Google Cloud Platform ایجاد کنید و به عنوان یک توسعه دهنده در Device Access Console ثبت نام کنید.
- پیوند حساب - کاربران را از طریق جریان پیوند حساب دریافت کنید و یک کد دسترسی را بازیابی کنید. کد را با یک نشانه دسترسی مبادله کنید.
- کنترل دستگاه - درخواست های API مدیریت دستگاه هوشمند را برای کنترل دستگاه ها با ارسال دستورات با نشانه دسترسی ایجاد کنید.
در این Codelab ما با ساختن یک برنامه کاربردی وب که احراز هویت را انجام می دهد و تماس های API مدیریت دستگاه هوشمند را انجام می دهد، نحوه عملکرد Device Access را بررسی خواهیم کرد. همچنین به بررسی استقرار یک سرور پراکسی ساده با استفاده از Node.js و Express برای مسیریابی درخواستهای Device Access خواهیم پرداخت.
قبل از شروع، بهتر است فنآوریهای وب رایجی را که در این Codelab استفاده میکنیم، مانند احراز هویت با OAuth 2.0 یا ساختن یک برنامه وب با Node.js بررسی کنیم، اگرچه اینها پیش نیاز نیستند.
آنچه شما نیاز دارید
- Node.js 8 یا بالاتر
- حساب Google با Nest Thermostat مرتبط
آنچه شما یاد خواهید گرفت
- راه اندازی یک پروژه Firebase میزبان صفحات وب استاتیک و عملکردهای ابری
- صدور درخواست دسترسی دستگاه از طریق یک برنامه وب مبتنی بر مرورگر
- ساخت یک سرور پروکسی با Node.js و Express برای مسیریابی درخواست های شما
2. ایجاد پروژه
توسعهدهندگان باید یک پروژه Google Cloud Platform (GCP) برای راهاندازی یکپارچهسازی دسترسی به دستگاه ایجاد کنند. یک Client ID و Client Secret ایجاد شده در پروژه GCP به عنوان بخشی از جریان OAuth بین برنامه برنامهنویس و Google Cloud استفاده میشود. توسعه دهندگان همچنین برای ایجاد پروژه ای برای دسترسی به Smart Device Management API باید از Device Access Console بازدید کنند.
Google Cloud Platform
به Google Cloud Platform بروید. روی ایجاد پروژه جدید کلیک کنید و نام پروژه را وارد کنید. شناسه پروژه [GCP-Project-Id] برای Google Cloud نیز نمایش داده میشود، لطفاً آن را ضبط کنید، زیرا در طول راهاندازی Firebase از آن استفاده خواهیم کرد. (ما در سراسر این Codelab به این شناسه به عنوان [GCP-Project-Id] اشاره خواهیم کرد.)
اولین قدم این است که کتابخانه API لازم را در پروژه خود فعال کنیم. به APIs & Services > Library بروید و Smart Device Management API را جستجو کنید. شما باید این API را فعال کنید تا به پروژه شما اجازه دهد تا برای تماس های API دسترسی به دستگاه درخواست کند.
قبل از اینکه به سمت ایجاد اعتبارنامه OAuth برویم، باید صفحه رضایت OAuth را برای پروژه خود پیکربندی کنیم. به APIs & Services > صفحه رضایت OAuth بروید. برای نوع کاربر ، خارجی را انتخاب کنید. یک نام و یک ایمیل پشتیبانی برای برنامه خود و همچنین اطلاعات تماس برنامهنویس برای تکمیل صفحه اول ارائه دهید. وقتی از کاربران آزمایشی درخواست میشود، مطمئن شوید که آدرس ایمیل دستگاههای مرتبط را در این مرحله ارائه کردهاید.
هنگامی که صفحه رضایت OAuth خود را پیکربندی کردید، به APIs & Services > Credentials بروید. روی +Create Credentials کلیک کنید و OAuth Client ID را انتخاب کنید. برای نوع برنامه، Web application را انتخاب کنید.
یک نام برای مشتری خود وارد کنید و روی CREATE کلیک کنید. بعداً یک مبدا جاوا اسکریپت مجاز و URI تغییر مسیر مجاز را اضافه خواهیم کرد. با تکمیل این فرآیند ، [Client-Id] و [Client-Secret] مرتبط با این OAuth 2.0 Client ظاهر می شود.
کنسول دسترسی به دستگاه
به کنسول دسترسی دستگاه بروید. اگر قبلاً از Device Access Console استفاده نکردهاید، با توافقنامه شرایط خدمات و هزینه ثبت نام 5 دلار از شما استقبال میشود.
یک پروژه جدید ایجاد کنید و به آن نام پروژه بدهید. در پنجره بعدی، [Client-Id] را که در مرحله قبل از GCP دریافت کردید، ارائه کنید.
فعال کردن رویدادها و تکمیل مراحل ایجاد پروژه شما را به صفحه اصلی پروژه خود می برد. [Project-Id] شما تحت نامی که به پروژه خود داده اید فهرست می شود.
لطفاً به [Project-Id] خود توجه کنید زیرا ما از آن هنگام ارسال درخواست به API مدیریت دستگاه هوشمند استفاده خواهیم کرد.
3. راه اندازی Firebase
Firebase به توسعه دهندگان یک راه سریع و آسان برای استقرار برنامه های کاربردی وب ارائه می دهد. ما در حال توسعه یک برنامه وب سمت کلاینت برای ادغام دسترسی به دستگاه خود با استفاده از Firebase خواهیم بود.
یک پروژه Firebase ایجاد کنید
به کنسول Firebase بروید. روی افزودن پروژه کلیک کنید، سپس پروژه ای را که در مرحله ایجاد پروژه ایجاد کرده اید انتخاب کنید. با این کار یک پروژه Firebase ایجاد می شود که به پروژه GCP شما [GCP-Project-Id] مرتبط می شود.
هنگامی که پروژه Firebase با موفقیت ایجاد شد، باید صفحه زیر را مشاهده کنید:
Firebase Tools را نصب کنید
Firebase مجموعه ای از ابزارهای CLI را برای ساخت و استقرار برنامه شما فراهم می کند. برای نصب این ابزارها، یک پنجره ترمینال جدید باز کنید و دستور زیر را اجرا کنید. این ابزار Firebase را به صورت جهانی نصب می کند.
$ npm i -g firebase-tools
برای تأیید اینکه ابزارهای firebase به درستی نصب شده اند، اطلاعات نسخه را بررسی کنید.
$ firebase --version
می توانید با استفاده از فرمان ورود به سیستم با حساب Google خود وارد ابزار Firebase CLI شوید.
$ firebase login
پروژه میزبانی را راه اندازی کنید
هنگامی که بتوانید وارد سیستم شوید، گام بعدی این است که یک پروژه میزبانی را برای برنامه وب خود راه اندازی کنید. از ترمینال، به پوشه ای که می خواهید پروژه خود را ایجاد کنید بروید و دستور زیر را اجرا کنید:
$ firebase init hosting
Firebase مجموعه ای از سوالات را برای شروع پروژه میزبانی از شما می پرسد:
- لطفاً یک گزینه را انتخاب کنید — از یک پروژه موجود استفاده کنید
- یک پروژه Firebase پیش فرض را برای این فهرست انتخاب کنید — ***[GCP-Project-Id]*** را انتخاب کنید
- چه چیزی را می خواهید به عنوان فهرست عمومی خود استفاده کنید؟ - عمومی
- به عنوان یک برنامه تک صفحه پیکربندی شود؟ - بله
- ساخت و استقرار خودکار با GitHub تنظیم شود؟ - نه
هنگامی که پروژه شما مقداردهی اولیه شد، می توانید با دستور زیر آن را در firebase مستقر کنید:
$ firebase deploy
Firebase پروژه شما را اسکن می کند و فایل های لازم را در هاست ابری مستقر می کند.
وقتی URL میزبانی را در یک مرورگر باز می کنید، باید صفحه ای را که به تازگی مستقر کرده اید ببینید:
اکنون که اصول اولیه نحوه استقرار یک صفحه وب با Firebase را می دانید، بیایید به استقرار نمونه Codelab خود بپردازیم!
4. نمونه Codelab
با استفاده از دستور زیر می توانید مخزن codelab میزبانی شده در GitHub را کلون کنید:
$ git clone https://github.com/google/device-access-codelab-web-app.git
در این مخزن نمونه ها را در دو پوشه جداگانه ارائه می کنیم. پوشه codelab-start
دارای فایل های لازم برای شروع شما از نقطه فعلی در این Codelab است. پوشه codelab-done
شامل نسخه کامل این Codelab با سرویس گیرنده و node.js کاملاً کاربردی است.
ما از فایلهای پوشه codelab-start
در سراسر این کد لبه استفاده خواهیم کرد، هرچند اگر در هر زمان احساس کردید که گیر کردهاید، به نسخه انجام شده Codelab نیز مراجعه کنید.
فایل های نمونه Codelab
ساختار فایل پوشه codelab-start به شرح زیر است:
public ├───index.html ├───scripts.js ├───style.css firebase.json
پوشه عمومی حاوی صفحات ثابت برنامه ما است. firebase.json
مسئول مسیریابی درخواست های وب به برنامه ما است. در نسخه codelab-done
، یک دایرکتوری functions
نیز مشاهده خواهید کرد که حاوی منطق برای سرور پراکسی ما (express) است که در توابع Google Cloud مستقر می شود.
نمونه Codelab را مستقر کنید
فایل ها را از codelab-start
در دایرکتوری پروژه خود کپی کنید.
$ firebase deploy
پس از اتمام استقرار Firebase، باید بتوانید برنامه Codelab را ببینید:
راهاندازی جریان احراز هویت به اعتبار شریک نیاز دارد که در بخش بعدی به آن خواهیم پرداخت.
5. مدیریت OAuth
OAuth استاندارد وب برای تفویض اختیار است که معمولاً برای کاربران استفاده می شود تا به برنامه های شخص ثالث اجازه دسترسی به اطلاعات حساب خود را بدون اشتراک گذاری رمز عبور بدهند. ما از OAuth 2.0 استفاده می کنیم تا توسعه دهندگان بتوانند از طریق Device Access به دستگاه های کاربر دسترسی داشته باشند.
Redirect URI را مشخص کنید
اولین مرحله از جریان OAuth شامل ارسال مجموعه ای از پارامترها به نقطه پایانی Google OAuth 2.0 است. پس از دریافت رضایت کاربر، سرورهای Google OAuth درخواستی با کد مجوز به URI تغییر مسیر شما صادر می کنند.
ثابت SERVER_URI
(خط 19) را با URL میزبانی خود در scripts.js
به روز کنید:
const SERVER_URI = "https://[GCP-Project-Id].web.app";
استقرار مجدد برنامه با این تغییر URI تغییر مسیر مورد استفاده برای پروژه شما را به روز می کند.
$ firebase deploy
Redirect URI را فعال کنید
هنگامی که Redirect URI را در فایل اسکریپت به روز کردید، باید آن را نیز به لیست URI های مجاز تغییر مسیر برای Client ID که برای پروژه خود ایجاد کرده اید اضافه کنید. به صفحه اعتبارنامه ها در Google Cloud Platform بروید، که تمام اعتبارنامه های ایجاد شده برای پروژه شما را فهرست می کند:
در لیست OAuth 2.0 Client IDs ، شناسه مشتری را که در مرحله ایجاد پروژه ایجاد کرده اید، انتخاب کنید. URI تغییر مسیر برنامه خود را به لیست URIهای مجاز تغییر مسیر پروژه خود اضافه کنید.
ورود به سیستم را امتحان کنید!
به URL میزبانی که با Firebase تنظیم کرده اید بروید، اعتبار شریک خود را وارد کنید و روی دکمه SIGN IN کلیک کنید. شناسه مشتری و Client Secret اعتبارنامه هایی هستند که از Google Cloud Platform به دست آورده اید، شناسه پروژه از کنسول دسترسی دستگاه است.
دکمه SIGN IN کاربران شما را از طریق جریان OAuth برای شرکت شما هدایت می کند و از صفحه ورود به حساب Google آنها شروع می شود. پس از ورود به سیستم، از کاربران خواسته میشود مجوزهایی را برای پروژه شما برای دسترسی به دستگاههای Nest خود ارائه دهند.
از آنجایی که این یک برنامه ساختگی است، گوگل قبل از صدور یک تغییر مسیر، هشداری را صادر می کند!
روی «پیشرفته» کلیک کنید، سپس «برو به web.app (ناامن)» را انتخاب کنید تا تغییر مسیر به برنامه خود کامل شود.
این یک کد OAuth را به عنوان بخشی از درخواست دریافتی GET ارائه می دهد، که سپس برنامه آن را با یک رمز دسترسی و یک توکن تازه سازی مبادله می کند.
6. کنترل دستگاه
برنامه نمونه دسترسی به دستگاه از تماسهای API REST مدیریت دستگاه هوشمند برای کنترل دستگاههای Google Nest استفاده میکند. این تماسها شامل ارسال توکن دسترسی در هدر درخواست GET یا POST، همراه با بار مورد نیاز برای دستورات خاص است.
ما یک تابع درخواست دسترسی عمومی برای رسیدگی به این تماس ها نوشتیم. با این حال، شما باید نقطه پایانی صحیح و همچنین شی payload را در صورت نیاز برای این تابع ارائه دهید!
function deviceAccessRequest(method, call, localpath, payload = null) {...}
- روش - نوع درخواست HTTP (
GET
یاPOST)
- تماس - رشته ای که نشان دهنده تماس API ما است که برای مسیریابی پاسخ ها استفاده می شود (
listDevices
،thermostatMode
،temperatureSetpoint
) - localpath - نقطه پایانی که درخواست به آن ارسال میشود، حاوی شناسه پروژه و شناسه دستگاه (ضمیمه شده پس از
https://smartdevicemanagement.googleapis.com/v1
) - محموله (*) - داده های اضافی مورد نیاز برای فراخوانی API (به عنوان مثال، یک مقدار عددی نشان دهنده دما برای یک نقطه تنظیم)
نمونهای از کنترلهای رابط کاربری (فهرست دستگاهها، حالت تنظیم، تنظیم دما) را برای کنترل یک ترموستات Nest میسازیم:
این کنترلهای رابط کاربری، توابع مربوطه ( listDevices()
، postThermostatMode()
، postTemperatureSetpoint()
) را از scripts.js
فراخوانی میکنند. آنها برای شما خالی مانده اند تا آنها را اجرا کنید! هدف انتخاب روش/مسیر صحیح و ارسال بار به تابع deviceAccessRequest(...)
است.
لیست دستگاه ها
ساده ترین تماس دسترسی به دستگاه، listDevices
است. از یک درخواست GET
استفاده می کند و نیازی به بارگذاری ندارد. نقطه پایانی باید با استفاده از projectId
ساختار یابد. تابع listDevices()
خود را به صورت زیر تکمیل کنید:
function listDevices() { var endpoint = "/enterprises/" + projectId + "/devices"; deviceAccessRequest('GET', 'listDevices', endpoint); }
تغییرات خود را ذخیره کنید و پروژه Firebase خود را دوباره با دستور زیر مستقر کنید:
$ firebase deploy
وقتی نسخه جدید برنامه اجرا شد، صفحه را دوباره بارگیری کنید و روی فهرست دستگاهها کلیک کنید. این باید لیستی را در قسمت کنترل دستگاه پر کند، که باید شناسه ترموستات خود را ببینید:
انتخاب دستگاه ها از لیست، فیلد deviceId
را در فایل scripts.js
به روز می کند. برای دو کنترل بعدی، باید deviceId
برای دستگاه خاصی که میخواهیم کنترل کنیم، مشخص کنیم.
کنترل ترموستات
دو ویژگی برای کنترل اساسی Nest Thermostat در Smart Device Management API وجود دارد. ThermostatMode و TemperatureSetpoint . ThermostatMode حالت را برای Nest Thermostat شما روی یکی از چهار حالت مختلف ممکن تنظیم میکند: {خاموش، گرما، خنک، گرما خنک}. سپس باید حالت انتخاب شده را به عنوان بخشی از محموله ارائه کنیم.
تابع postThermostatMode()
خود را در scripts.js
با موارد زیر جایگزین کنید:
function postThermostatMode() { var endpoint = "/enterprises/" + projectId + "/devices/" + deviceId + ":executeCommand"; var tempMode = id("tempMode").value; var payload = { "command": "sdm.devices.commands.ThermostatMode.SetMode", "params": { "mode": tempMode } }; deviceAccessRequest('POST', 'thermostatMode', endpoint, payload); }
تابع بعدی، postTemperatureSetpoint()
، تنظیم دما (بر حسب سانتیگراد) را برای Nest Thermostat شما انجام می دهد. بسته به حالت انتخابی ترموستات، دو پارامتر وجود دارد که میتوان در محموله تنظیم کرد، heatCelsius
و coolCelsius
.
function postTemperatureSetpoint() { var endpoint = "/enterprises/" + projectId + "/devices/" + deviceId + ":executeCommand"; var heatCelsius = parseFloat(id("heatCelsius").value); var coolCelsius = parseFloat(id("coolCelsius").value); var payload = { "command": "", "params": {} }; if ("HEAT" === id("tempMode").value) { payload.command = "sdm.devices.commands.ThermostatTemperatureSetpoint.SetHeat"; payload.params["heatCelsius"] = heatCelsius; } else if ("COOL" === id("tempMode").value) { payload.command = "sdm.devices.commands.ThermostatTemperatureSetpoint.SetCool"; payload.params["coolCelsius"] = coolCelsius; } else if ("HEATCOOL" === id("tempMode").value) { payload.command = "sdm.devices.commands.ThermostatTemperatureSetpoint.SetRange"; payload.params["heatCelsius"] = heatCelsius; payload.params["coolCelsius"] = coolCelsius; } else { console.log("Off and Eco mode don't allow this function"); return; } deviceAccessRequest('POST', 'temperatureSetpoint', endpoint, payload); }
7. سرور Node.js (اختیاری)
تبریک می گویم! شما یک برنامه وب سمت کلاینت ساختهاید که میتواند درخواستهای API مدیریت دستگاه هوشمند را از یک مرورگر انجام دهد. برای کسانی از شما که میخواهید در سمت سرور ایجاد کنید، میخواهیم تلاش خود را با یک سرور پراکسی که میتواند درخواستهای شما را از مرورگر تغییر مسیر دهد، شروع کنیم.
برای این سرور پراکسی، از توابع ابری Firebase، Node.js و Express استفاده خواهیم کرد.
توابع Cloud را راه اندازی کنید
یک پنجره ترمینال جدید باز کنید، به دایرکتوری پروژه خود بروید و موارد زیر را اجرا کنید:
$ firebase init functions
Firebase از شما مجموعه ای از سوالات را برای مقداردهی اولیه توابع ابری می پرسد:
- دوست دارید از چه زبانی برای نوشتن توابع ابری استفاده کنید؟ - جاوا اسکریپت
- آیا می خواهید از ESLint برای کشف اشکالات احتمالی و اعمال سبک استفاده کنید؟ - نه
- آیا اکنون می خواهید وابستگی ها را با npm نصب کنید؟ - بله
با این کار یک پوشه functions
در پروژه شما راه اندازی می شود و همچنین وابستگی های لازم را نصب می کند. خواهید دید که پوشه پروژه شما شامل یک پوشه توابع است، با یک فایل index.js برای تعریف توابع ابری ما، package.json برای تعریف تنظیمات و یک فهرست node_modules برای حاوی وابستگی ها.
ما از دو کتابخانه npm
برای ساخت عملکرد سمت سرور استفاده خواهیم کرد: express و xmlhttprequest. شما باید ورودی های زیر را به لیست وابستگی ها در فایل package.json اضافه کنید:
"xmlhttprequest": "^1.8.0", "express": "^4.17.0"
سپس اجرای npm install از دایرکتوری توابع باید وابستگی هایی را برای پروژه شما نصب کند:
$ npm install
در صورتی که npm با دانلود بستهها مشکل داشت، میتوانید xmlhttp request را ذخیره کرده و با دستور زیر به صراحت بیان کنید:
$ npm install express xmlhttprequest --save
به Blaze Plan ارتقا دهید
استفاده از فرمان firebase deploy
شما را ملزم به ارتقاء به Blaze Plan می کند، که باید یک روش پرداخت را به حساب خود اضافه کنید. به Project Overview > Usage and billing بروید و مطمئن شوید که طرح Blaze را برای پروژه خود انتخاب کرده اید.
ساخت سرور اکسپرس
یک سرور Express از یک چارچوب ساده برای پاسخگویی به درخواستهای دریافتی GET
و POST
پیروی میکند. ما سرورلتی ساختهایم که به درخواستهای POST
گوش میدهد، آنها را به URL مقصد مشخصشده در بار ارسال میکند و با پاسخ دریافتی از انتقال پاسخ میدهد.
فایل index.js
خود را در پوشه توابع به شکل زیر تغییر دهید:
const XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest; const functions = require('firebase-functions'); const express = require('express'); const http = require('http'); const app = express(); app.use(express.json()); //***** Device Access - Proxy Server *****// // Serving Get Requests (Not used) app.get('*', (request, response) => { response.status(200).send("Hello World!"); }); // Serving Post Requests app.post('*', (request, response) => { setTimeout(() => { // Read the destination address from payload: var destination = request.body.address; // Create a new proxy post request: var xhr = new XMLHttpRequest(); xhr.open('POST', destination); // Add original headers to proxy request: for (var key in request.headers) { var value = request.headers[key]; xhr.setRequestHeader(key, value); } // Add command/parameters to proxy request: var newBody = {}; newBody.command = request.body.command; newBody.params = request.body.params; // Respond to original request with the response coming // back from proxy request (to Device Access Endpoint) xhr.onload = function () { response.status(200).send(xhr.responseText); }; // Send the proxy request! xhr.send(JSON.stringify(newBody)); }, 1000); }); // Export our app to firebase functions: exports.app = functions.https.onRequest(app);
برای اینکه درخواست ها را به سرور خود هدایت کنیم، باید بازنویسی ها را از firebase.json
به صورت زیر تنظیم کنیم:
{ "hosting": { "public": "public", "ignore": [ "firebase.json", "**/.*", "**/node_modules/**" ], "rewrites": [{ "source": "/proxy**", "function": "app" },{ "source": "**", "destination": "/index.html" } ] } }
با این کار URL هایی که با /proxy
شروع می شوند به سرور Express ما هدایت می شوند و بقیه به index.html
ما ادامه می دهند.
تماس های API پروکسی
اکنون که سرور خود را آماده کرده ایم، بیایید یک URI پروکسی در scripts.js
برای مرورگر خود تعریف کنیم تا درخواست ها را به این آدرس ارسال کند:
const PROXY_URI = SERVER_URI + "/proxy";
سپس یک تابع proxyRequest
scripts.js
را اضافه کنید که دارای امضای مشابه تابع deviceAccessRequest(...)
برای تماس های غیرمستقیم Device Access است.
function proxyRequest(method, call, localpath, payload = null) { var xhr = new XMLHttpRequest(); // We are doing our post request to our proxy server: xhr.open(method, PROXY_URI); xhr.setRequestHeader('Authorization', 'Bearer ' + accessToken); xhr.setRequestHeader('Content-Type', 'application/json;charset=UTF-8'); xhr.onload = function () { // Response is passed to deviceAccessResponse function: deviceAccessResponse(call, xhr.response); }; // We are passing the device access endpoint in address field of the payload: payload.address = "https://smartdevicemanagement.googleapis.com/v1" + localpath; if ('POST' === method && payload) xhr.send(JSON.stringify(payload)); else xhr.send(); }
آخرین مرحله جایگزینی فراخوانی های deviceAccessRequest(...)
با تابع proxyRequest(...)
در توابع postThermostatMode()
و postTemperatureSetpoint()
در scripts.js
است.
برای بهروزرسانی برنامه firebase deploy
اجرا کنید.
$ firebase deploy
با این کار، اکنون یک سرور پراکسی Node.js با استفاده از Express on Cloud Functions دارید.
مجوزهای عملکرد ابر را ارائه دهید
آخرین مرحله این است که مجوزهای دسترسی برای عملکردهای ابری خود را بررسی کنید و مطمئن شوید که برنامه سمت مشتری شما قادر به فراخوانی آنها خواهد بود.
از Google Cloud Platform، از منو به تب Cloud Functions بروید، سپس عملکرد ابری خود را انتخاب کنید:
روی Permissions و سپس Add Member کلیک کنید. allUsers را در قسمت عضو جدید بنویسید و Cloud Functions > Cloud Functions Invoker را به عنوان نقش انتخاب کنید. با کلیک بر روی ذخیره یک پیام هشدار نمایش داده می شود:
با انتخاب اجازه دسترسی عمومی، برنامه سمت سرویس گیرنده شما قادر به استفاده از عملکرد ابری شما خواهد بود.
تبریک می گویم - شما تمام مراحل را انجام داده اید. اکنون میتوانید به برنامه وب خود بروید و کنترلهای دستگاه را که از طریق سرور پراکسی خود هدایت میشوند، به آنها بدهید!
مراحل بعدی
به دنبال راه هایی برای گسترش تخصص خود در دسترسی به دستگاه هستید؟ برای اطلاعات بیشتر درباره کنترل سایر دستگاههای Nest و فرآیند صدور گواهینامه برای یادگیری مراحل عرضه محصول خود به جهان، اسناد ویژگیها را بررسی کنید!
مهارتهای خود را با برنامه نمونه برنامه کاربردی وب «دسترسی دستگاه» بیشتر کنید، جایی که تجربه Codelab خود را تقویت میکنید و یک برنامه کاربردی وب را برای کنترل دوربینهای Nest، زنگهای در و ترموستاتها به کار میگیرید.