Cihaz Erişimi Web Uygulaması Oluşturma

1. Giriş

Cihaz Erişimi programı, geliştiricilerin uygulamalarından Google Nest cihazlarını kontrol etmeleri için bir REST API olan Smart Device Management API'yi sağlar. Kullanıcıların, Nest cihazlarına üçüncü taraf erişimi için izin vermesi gerekir.

52f77aa38cda13a6.png

Başarılı bir Cihaz Erişimi entegrasyonu için üç temel adım vardır:

  1. Proje Oluşturma: Google Cloud Platform'da bir proje oluşturun ve Cihaz Erişim Konsolu'nda geliştirici olarak kaydolun.
  2. Hesap Bağlama: Hesap bağlama akışı aracılığıyla kullanıcıları elde edin ve erişim kodu alın. Kodu erişim jetonuyla değiştirin.
  3. Cihaz Kontrolü: Erişim jetonuyla komut göndererek cihazları kontrol etmek için Smart Device Management API istekleri gönderin.

Bu Codelab'de, kimlik doğrulama işlemini gerçekleştiren ve Smart Device Management API çağrıları yapan bir web uygulaması oluşturarak Cihaz Erişimi'nin nasıl çalıştığını ayrıntılı bir şekilde inceleyeceğiz. Ayrıca, Cihaz Erişimi isteklerini yönlendirmek için Node.js ve Express kullanarak basit bir proxy sunucusu dağıtmayı da ele alacağız.

Başlamadan önce, bu Codelab'de kullanacağımız yaygın web teknolojileri hakkında bilgi edinmeniz iyi olur. Örneğin, OAuth 2.0 ile kimlik doğrulama veya Node.js ile web uygulaması oluşturma gibi konuları inceleyebilirsiniz. Ancak bu konular ön koşul değildir.

İhtiyacınız Olanlar

  • Node.js 8 veya üzeri
  • Bağlı Nest Termostat'ı olan bir Google Hesabı

Neler Öğreneceksiniz?

  • Statik web sayfaları ve Cloud Functions işlevleri barındıran bir Firebase projesi oluşturma
  • Tarayıcı tabanlı bir web uygulaması üzerinden cihaz erişim istekleri gönderme
  • İsteklerinizi yönlendirmek için Node.js ve Express ile bir proxy sunucusu oluşturma

2. Proje Oluşturma

Geliştiricilerin Cihaz Erişimi entegrasyonunu ayarlamak için bir Google Cloud Platform (GCP) projesi oluşturması gerekir. GCP projesinde oluşturulan istemci kimliği ve istemci gizli anahtarı, geliştiricinin uygulaması ile Google Cloud arasındaki OAuth akışının bir parçası olarak kullanılır. Geliştiricilerin Smart Device Management API'ye erişmek için bir proje oluşturmak üzere Cihaz Erişimi Konsolu'nu da ziyaret etmesi gerekir.

Google Cloud Platform

Google Cloud Platform'a gidin. Yeni proje oluştur'u tıklayın ve bir proje adı girin. Google Cloud için bir proje kimliği [GCP-Project-Id] de gösterilir. Lütfen bu kimliği kaydedin. Firebase kurulumu sırasında kullanacağız. (Bu kimliği bu Codelab boyunca [GCP-Project-Id] olarak adlandıracağız.)

585e926b21994ac9.png

İlk adım, projemizde gerekli API kitaplığını etkinleştirmektir. API'ler ve Hizmetler > Kitaplık'a gidin ve Smart Device Management API'sini arayın. Projenizin Cihaz Erişimi API çağrılarına istekte bulunmasına izin vermek için bu API'yi etkinleştirmeniz gerekir.

14e7eabc422c7fda.png

OAuth kimlik bilgileri oluşturmaya geçmeden önce projemiz için OAuth kullanıcı rızası ekranını yapılandırmamız gerekir. API'ler ve Hizmetler > OAuth kullanıcı rızası ekranı'na gidin. Kullanıcı Türü için harici'yi seçin. İlk ekranı tamamlamak için uygulamanızın adını, destek e-posta adresini ve geliştirici iletişim bilgilerini girin. Test Kullanıcıları istendiğinde bu adımda bağlı cihazların e-posta adresini sağladığınızdan emin olun.

OAuth kullanıcı rızası ekranınızı yapılandırdıktan sonra API'ler ve Hizmetler > Kimlik Bilgileri'ne gidin. +Kimlik bilgileri oluştur'u tıklayın ve OAuth istemci kimliği'ni seçin. Uygulama türü olarak Web uygulaması'nı seçin.

5de534212d44fce7.png

Müşteriniz için bir ad girin ve OLUŞTUR'u tıklayın. Yetkilendirilmiş JavaScript kaynağı ve yetkilendirilmiş yönlendirme URI'si daha sonra eklenecektir. Bu işlemi tamamladığınızda, bu OAuth 2.0 istemcisiyle ilişkili [Client-Id] ve [Client-Secret] gösterilir.

e6a670da18952f08.png

Cihaz Erişim Konsolu

Cihaz Erişim Konsolu'na gidin. Cihaz Erişimi Konsolu'nu daha önce kullanmadıysanız Hizmet Şartları sözleşmesi ve 5 ABD doları tutarındaki kayıt ücretiyle karşılaşırsınız.

Yeni bir proje oluşturun ve projeye bir ad verin. Sonraki pencerede, önceki adımda GCP'den aldığınız [Client-Id] değerini girin.

f8a3f27354bc2625.png

Etkinlikleri etkinleştirdikten ve proje oluşturma adımlarını tamamladıktan sonra projenizin ana sayfasına yönlendirilirsiniz. [Project-Id], projenize verdiğiniz adın altında listelenir.

db7ba33d8b707148.png

Smart Device Management API'ye istek gönderirken kullanacağımız için lütfen [Project-Id] değerinizi not edin.

3. Firebase Kurulumu

Firebase, geliştiricilere web uygulamalarını dağıtmak için hızlı ve kolay bir yöntem sunar. Firebase'i kullanarak Cihaz Erişimi entegrasyonumuz için istemci tarafı bir web uygulaması geliştireceğiz.

Firebase projesi oluşturma

Firebase Console'a gidin. Proje Ekle'yi tıklayın ve Proje Oluşturma adımında oluşturduğunuz projeyi seçin. Bu işlem, GCP projenize [GCP-Project-Id] bağlanacak bir Firebase projesi oluşturur.

Firebase projesi başarıyla oluşturulduktan sonra aşağıdaki ekranı görürsünüz:

dbb02bbacac093f5.png

Firebase Araçları'nı yükleme

Firebase, uygulamanızı oluşturup dağıtmak için bir dizi CLI aracı sunar. Bu araçları yüklemek için yeni bir terminal penceresi açıp aşağıdaki komutu çalıştırın. Bu işlem, Firebase araçlarını genel olarak yükler.

$ npm i -g firebase-tools

Firebase araçlarının doğru şekilde yüklendiğini doğrulamak için sürüm bilgilerini kontrol edin.

$ firebase --version

Oturum açma komutuyla Google Hesabınızla Firebase CLI araçlarında oturum açabilirsiniz.

$ firebase login

Barındırma projesini başlatma

Giriş yaptıktan sonraki adım, web uygulamanız için bir barındırma projesi başlatmaktır. Terminalden, projenizi oluşturmak istediğiniz klasöre gidin ve aşağıdaki komutu çalıştırın:

$ firebase init hosting

Firebase, bir hosting projesine başlamanıza yardımcı olmak için size bir dizi soru sorar:

  1. Lütfen bir seçenek belirleyin: Mevcut bir projeyi kullan
  2. Bu dizin için varsayılan bir Firebase projesi seçin: Seç ***[GCP-Project-Id]***
  3. Herkese açık dizininiz olarak neyi kullanmak istiyorsunuz? — Herkese açık
  4. Tek sayfa uygulaması olarak yapılandırılıyor mu? — Evet
  5. GitHub ile otomatik derleme ve dağıtım ayarlama — Hayır

Projeniz başlatıldıktan sonra aşağıdaki komutla Firebase'e dağıtabilirsiniz:

$ firebase deploy

Firebase, projenizi tarar ve gerekli dosyaları bulut barındırmaya dağıtır.

fe15cf75e985e9a1.png

Barındırma URL'sini bir tarayıcıda açtığınızda, yeni dağıttığınız sayfayı görmeniz gerekir:

e40871238c22ebe2.png

Firebase ile web sayfası dağıtma hakkında temel bilgileri edindiğinize göre artık Codelab örneğimizi dağıtabiliriz.

4. Codelab Örneği

GitHub'da barındırılan codelab deposunu aşağıdaki komutu kullanarak klonlayabilirsiniz:

$ git clone https://github.com/google/device-access-codelab-web-app.git

Bu depoda, iki ayrı klasörde örnekler sunuyoruz. codelab-start klasöründe, bu Codelab'de mevcut noktadan başlamanız için gereken dosyalar bulunur. codelab-done klasörü, tam işlevli istemci ve node.js sunucusuyla birlikte bu Codelab'in eksiksiz bir sürümünü içerir.

Bu codelab boyunca codelab-start klasöründeki dosyaları kullanacağız. Ancak herhangi bir noktada takılırsanız codelab'in tamamlanmış sürümüne de başvurabilirsiniz.

Codelab Örnek Dosyaları

codelab-start klasörünün dosya yapısı aşağıdaki gibidir:

public
├───index.html
├───scripts.js
├───style.css
firebase.json

Herkese açık klasör, uygulamamızın statik sayfalarını içerir. firebase.json, web isteklerini uygulamamıza yönlendirmekten sorumludur. codelab-done sürümünde, proxy sunucumuzun (express) Google Cloud işlevlerine dağıtılması için mantık içeren bir functions dizini de görürsünüz.

Codelab örneğini dağıtma

Dosyaları codelab-start klasöründen projenizin dizinine kopyalayın.

$ firebase deploy

Firebase dağıtımı tamamladığında Codelab uygulamasını görebilirsiniz:

e84c1049eb4cca92.png

Kimlik doğrulama akışının başlatılması için iş ortağı kimlik bilgileri gerekir. Bu bilgileri bir sonraki bölümde ele alacağız.

5. OAuth'u işleme

OAuth, erişim yetkisi verme için kullanılan web standardıdır. Genellikle kullanıcıların şifrelerini paylaşmadan üçüncü taraf uygulamalarına hesap bilgilerine erişim izni vermesi için kullanılır. Geliştiricilerin Cihaz Erişimi aracılığıyla kullanıcı cihazlarına erişmesini sağlamak için OAuth 2.0'ı kullanırız.

7ee31f5d9c37f699.png

Yönlendirme URI'sini belirtin

OAuth akışının ilk adımında, bir dizi parametre Google OAuth 2.0 uç noktasına iletilir. Kullanıcı izni alındıktan sonra Google OAuth sunucuları, yönlendirme URI'nize yetkilendirme kodu içeren bir istek gönderir.

SERVER_URI sabitini (19. satır) scripts.js içinde kendi barındırma URL'nizle güncelleyin:

const SERVER_URI = "https://[GCP-Project-Id].web.app";

Uygulamayı bu değişiklikle yeniden dağıtmak, projeniz için kullanılan yönlendirme URI'nizi günceller.

$ firebase deploy

Yönlendirme URI'sini etkinleştirme

Yönlendirme URI'sini komut dosyaları dosyasında güncelledikten sonra, projeniz için oluşturduğunuz istemci kimliğinin izin verilen yönlendirme URI'leri listesine de eklemeniz gerekir. Google Cloud Platform'da Kimlik Bilgileri Sayfası'na gidin. Bu sayfada projeniz için oluşturulan tüm kimlik bilgileri listelenir:

1a07b624b5e548da.png

OAuth 2.0 İstemci Kimlikleri listesinde, Proje Oluşturma adımında oluşturduğunuz istemci kimliğini seçin. Uygulamanızın yönlendirme URI'sini projenizin Yetkilendirilmiş Yönlendirme URI'leri listesine ekleyin.

6d65b298e1f005e2.png

Oturum açmayı deneyin.

Firebase ile ayarladığınız Hosting URL'sine gidin, iş ortağı kimlik bilgilerinizi girin ve SIGN IN (OTURUM AÇ) düğmesini tıklayın. İstemci kimliği ve istemci gizli anahtarı, Google Cloud Platform'dan aldığınız kimlik bilgileridir. Proje kimliği ise Cihaz Erişim Konsolu'ndan alınır.

78b48906a2dd7c05.png

OTURUM AÇ düğmesi, kullanıcılarınızı işletmeniz için OAuth akışında yönlendirir. Bu akış, Google Hesaplarının oturum açma ekranıyla başlar. Kullanıcılardan oturum açtıktan sonra, Nest cihazlarına erişmek için projenize izin vermeleri istenir.

e9b7887c4ca420.png

Bu bir sahte uygulama olduğundan Google, yönlendirme yapmadan önce uyarı yayınlayacaktır.

b227d510cb1df073.png

"Gelişmiş"i tıklayın, ardından uygulamanıza yönlendirme işlemini tamamlamak için "web.app'e git (güvenli değil)"i seçin.

673a4fd217e24dad.png

Bu işlem, gelen GET isteğinin bir parçası olarak bir OAuth kodu sağlar. Uygulama daha sonra bu kodu bir erişim jetonu ve bir yenileme jetonuyla değiştirir.

6. Cihaz denetimi

Cihaz Erişimi örnek uygulaması, Google Nest cihazlarını kontrol etmek için Smart Device Management REST API çağrılarını kullanır. Bu çağrılar, belirli komutlar için gereken bir yükle birlikte GET veya POST isteğinin üstbilgisinde erişim jetonunun iletilmesini içerir.

Bu çağrıları işlemek için genel bir erişim isteği işlevi yazdık. Ancak bu işlev için doğru uç noktayı ve gerektiğinde yük nesnesini sağlamanız gerekir.

function deviceAccessRequest(method, call, localpath, payload = null) {...}
  • method: HTTP isteğinin türü (GET veya POST))
  • call: Yanıtları yönlendirmek için kullanılan (listDevices, thermostatMode, temperatureSetpoint) API çağrımızı temsil eden bir dize.
  • localpath: İsteğin gönderildiği uç nokta. Proje kimliğini ve cihaz kimliğini içerir (https://smartdevicemanagement.googleapis.com/v1 sonrasına eklenir).
  • yük (*) — API çağrısı için gereken ek veriler (ör. bir istenen ayar için sıcaklığı temsil eden sayısal değer)

Nest Thermostat'ı kontrol etmek için örnek kullanıcı arayüzü kontrolleri (Cihazları Listele, Modu Ayarla, Sıcaklığı Ayarla) oluşturacağız:

86f8a193aa397421.png

Bu kullanıcı arayüzü kontrolleri, scripts.js'deki ilgili işlevleri (listDevices(), postThermostatMode(), postTemperatureSetpoint()) çağırır. Bu alanlar, sizin uygulamanız için boş bırakılmıştır. Amaç, doğru yöntemi/yolu seçip yükü deviceAccessRequest(...) işlevine iletmektir.

Cihazları Listeleme

En basit Cihaz Erişimi çağrısı listDevices'dır. GET isteği kullanır ve yük gerektirmez. Uç nokta, projectId kullanılarak yapılandırılmalıdır. listDevices() işlevinizi aşağıdaki gibi tamamlayın:

function listDevices() {
  var endpoint = "/enterprises/" + projectId + "/devices";
  deviceAccessRequest('GET', 'listDevices', endpoint);
}

Değişikliklerinizi kaydedin ve Firebase projenizi aşağıdaki komutla tekrar dağıtın:

$ firebase deploy

Uygulamanın yeni sürümü dağıtıldıktan sonra sayfayı yeniden yükleyip CİHAZLARI LİSTELE'yi tıklayın. Bu işlem, Cihaz Kontrolü bölümündeki listeyi doldurur. Bu listede termostatınızın kimliğini görürsünüz:

b64a198673ed289f.png

Listeden cihaz seçtiğinizde scripts.js dosyasındaki deviceId alanı güncellenir. Sonraki iki kontrol için, kontrol etmek istediğimiz cihaza ait deviceId değerini belirtmemiz gerekir.

Termostat Kontrolü

Smart Device Management API'de Nest Thermostat'ın temel kontrolü için iki özellik bulunur. ThermostatMode ve TemperatureSetpoint. ThermostatMode, Nest termostatınızın modunu dört farklı moddan birine ayarlar: {Off, Heat, Cool, HeatCool}. Ardından, seçilen modu yükün bir parçası olarak sağlamamız gerekir.

scripts.js içindeki postThermostatMode() işlevinizi aşağıdakiyle değiştirin:

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);
}

Bir sonraki işlev olan postTemperatureSetpoint(), Nest Thermostat'ınızın sıcaklığını (Celsius cinsinden) ayarlamayı sağlar. Seçilen termostat moduna bağlı olarak yükte ayarlanabilen iki parametre vardır: heatCelsius ve 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 sunucusu (isteğe bağlı)

Tebrikler! Tarayıcıdan Smart Device Management API istekleri gönderebilen bir istemci taraflı web uygulaması oluşturmuş olmanız gerekir. Sunucu tarafında geliştirme yapmak isteyenler için, tarayıcıdan gelen isteklerinizi yönlendirebilen bir proxy sunucuyla bu süreci hızlandırmak istiyoruz.

Bu proxy sunucusu için Firebase Cloud Functions, Node.js ve Express'i kullanacağız.

Cloud Functions'ı başlatma

Yeni bir terminal penceresi açın, proje dizininize gidin ve aşağıdaki komutu çalıştırın:

$ firebase init functions

Firebase, Cloud Functions'ı başlatmak için size bir dizi soru sorar:

  1. Cloud Functions yazmak için hangi dili kullanmak istiyorsunuz? — JavaScript
  2. Olası hataları yakalamak ve stili zorunlu kılmak için ESLint'i kullanmak istiyor musunuz? — Hayır
  3. Bağımlılıkları şimdi npm ile yüklemek istiyor musunuz? — Evet

Bu işlem, projenizde bir functions klasörünü başlatır ve gerekli bağımlılıkları yükler. Proje klasörünüzde, bulut işlevlerimizi tanımlamak için index.js dosyası, ayarları tanımlamak için package.json dosyası ve bağımlılıkları içeren node_modules dizini bulunduğunu görürsünüz.

Sunucu tarafı işlevselliğini oluşturmak için iki npm kitaplığı kullanacağız: express ve xmlhttprequest. package.json dosyasındaki bağımlılıklar listesine aşağıdaki girişleri eklemeniz gerekir:

"xmlhttprequest": "^1.8.0",
"express": "^4.17.0"

Ardından, functions dizininden npm install komutunu çalıştırdığınızda projenizin bağımlılıkları yüklenir:

$ npm install

npm'nin paketleri indirmeyle ilgili bir sorun yaşaması durumunda, aşağıdaki komutla xmlhttprequest ve express'i açıkça kaydetmeyi deneyebilirsiniz:

$ npm install express xmlhttprequest --save

Blaze planına geçme

firebase deploy komutunu kullanmak için Blaze planına yükseltmeniz gerekir. Bu plan için hesabınıza bir ödeme yöntemi eklemeniz gerekir. Proje Genel Bakış > Kullanım ve faturalandırma'ya gidin ve projeniz için Blaze planını seçtiğinizden emin olun.

c6a5e5a21397bef6.png

Express sunucusu oluşturma

Bir Express sunucusu, gelen GET ve POST isteklerine yanıt vermek için basit bir çerçeve kullanır. POST isteklerini dinleyen, bunları yükte belirtilen bir hedef URL'ye ileten ve aktarımdan alınan yanıtla yanıt veren bir servlet oluşturduk.

İşlevler dizinindeki index.js dosyanızı aşağıdaki gibi görünecek şekilde değiştirin:

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);

İstekleri sunucumuza yönlendirmek için firebase.json yeniden yazma işlemlerini aşağıdaki gibi ayarlamamız gerekir:

{
  "hosting": {
    "public": "public",
    "ignore": [
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ],
    "rewrites": [{
        "source": "/proxy**",
        "function": "app"
      },{
        "source": "**",
        "destination": "/index.html"
      }
    ]
  }
}

Bu işlem, /proxy ile başlayan URL'leri Express sunucumuza yönlendirir. Diğer URL'ler ise index.html sunucumuza yönlendirilmeye devam eder.

Proxy API Çağrıları

Sunucumuz hazır olduğuna göre, tarayıcımızın bu adrese istek göndermesi için scripts.js içinde bir proxy URI'si tanımlayalım:

const PROXY_URI = SERVER_URI + "/proxy";

Ardından, dolaylı Cihaz Erişimi çağrıları için deviceAccessRequest(...) işleviyle aynı imzaya sahip olan proxyRequest işlevi scripts.js ekleyin.

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();
}

Son adım, deviceAccessRequest(...) çağrılarını scripts.js içindeki postThermostatMode() ve postTemperatureSetpoint() işlevlerinde proxyRequest(...) işleviyle değiştirmektir.

Uygulamayı güncellemek için firebase deploy komutunu çalıştırın.

$ firebase deploy

Böylece, Cloud Functions'ta Express'i kullanan çalışan bir Node.js proxy sunucunuz olur.

Cloud Functions izinleri verme

Son adım, bulut işlevlerinizin erişim izinlerini incelemek ve istemci tarafı uygulamanızın bunları çağırabildiğinden emin olmaktır.

Google Cloud Platform'da menüden Cloud Functions sekmesine gidin ve ardından Cloud Function'ınızı seçin:

461e9bae74227fc1.png

İzinler'i, ardından Üye Ekle'yi tıklayın. Yeni üye alanına allUsers yazın ve rol olarak Cloud Functions > Cloud Functions Invoker'ı seçin. Kaydet'i tıkladığınızda bir uyarı mesajı gösterilir:

3adb01644217578c.png

Herkese açık erişime izin ver'i seçtiğinizde istemci tarafı uygulamanız, Cloud Function'ınızı kullanabilir.

Tebrikler, tüm adımları tamamladınız. Artık web uygulamanıza gidebilir ve proxy sunucunuz üzerinden yönlendirilen cihaz kontrollerini deneyebilirsiniz.

Sonraki Adımlar

Cihaz erişimi konusundaki uzmanlığınızı artırmanın yollarını mı arıyorsunuz? Diğer Nest cihazlarını kontrol etme hakkında daha fazla bilgi edinmek için özellikler dokümanlarını, ürününüzü dünya genelinde kullanıma sunma adımlarını öğrenmek için ise sertifika sürecini inceleyin.

Codelab deneyiminizi temel alarak Nest kameraları, kapı zillerini ve termostatları kontrol etmek için çalışan bir web uygulaması dağıtacağınız Device Access web uygulaması örnek uygulaması ile becerilerinizi daha da geliştirin.