Google Cloud ve Cihaz Erişimi projelerinizi oluşturduktan sonra, SDM API için desteklenen bir Google Nest cihazıyla bir Google Hesabı yetkilendirebilirsiniz.
Hesabınızı bağlama
Yapıları ve cihazları görüntülemek için PCM'yi kullanarak bir Google Hesabı'nıDevice Access projenize bağlamanız gerekir. PCM, user uygulamasına developeruygulamalarının yapılarına ve cihaz verilerine erişmesine izin verme yetkisi verir.
Bu kılavuzda hem user hem de developerolarak hareket ediyorsunuz.
Aşağıdaki bağlantıyı bir web tarayıcısında açın ve şunları değiştirin:
- project-id ile Device Access Project kimliğiniz
- oauth2-client-id ile Google Cloud Credentials'daki OAuth2 istemci kimliği
https://nestservices.google.com/partnerconnections/project-id/auth?
redirect_uri=https://www.google.com& access_type=offline& prompt=consent& client_id=oauth2-client-id& response_type=code& scope=https://www.googleapis.com/auth/sdm.service - Yakın zamanda Google'da birden fazla hesapla oturum açtıysanız Google Hesaplarınızın listelendiği bir Hesap seçin ekranı gösterilebilir. Bu durumda, Device Accessiçin yetkilendirmek istediğiniz cihazlara bağlı Google Hesabı'nı seçin.
- Google Nest izinleri ekranı, PCM'nin kendisidir. Burada yapı ve cihaz izinleri verebilirsiniz. Evinizle ilgili izinleri (1. adım) ve evdeki SDM API'si tarafından desteklenen tüm cihazları (2. adım) etkinleştirin, ardından Sonraki'yi tıklayın.
- Proje Adı'na devam etmek için bir hesap seçin ekranında (burada Proje Adı, Google Cloud projenizin adıdır) SDM API için yetkilendirmek istediğiniz Google Hesabı'nı seçin. Daha önce kullandığınız Google Hesabı'nı kullanın.
- Bir hesap seçtikten sonra Google bu uygulamayı doğrulamadı şeklinde bir uyarı ekranı görebilirsiniz. Bu durumda devam etmek için Gelişmiş seçeneğini ve ardından Proje Adı'na git (güvenli değil) seçeneğini tıklayın. Daha fazla bilgi için Google bu uygulamayı doğrulamadı başlıklı makaleyi inceleyin.
- Proje Adı izni verin ekranında, projeye Google Hesabınıza erişim izni vermek için İzin ver'i tıklayın.
- Seçimlerinizi onaylayın ekranında, vermek istediğiniz izinlerin işaretli olduğundan emin olun ve onaylamak için İzin ver'i tıklayın.
https://www.google.com adresine yönlendirilirsiniz. Yetkilendirme kodu, URL'deki
codeparametresi olarak döndürülür. Bu parametre şu biçimde olmalıdır:https://www.google.com?code=authorization-code&
scope=https://www.googleapis.com/auth/sdm.service - Yetkilendirme kodunu kopyalayın.
Erişim jetonu alma
SDM API'yi çağırmak için kullanabileceğiniz bir erişim jetonu almak üzere yetkilendirme kodunu kullanın.
Bir terminal açıp aşağıdaki
curlkomutu çalıştırın. Komutta şunları değiştirin:- oauth2-client-id ve oauth2-client-secret Google Cloud Credentials'daki OAuth2 istemci kimliği ve istemci gizli anahtarıyla
- authorization-code ile önceki adımda aldığınız kodu girin.
curl -L -X POST 'https://www.googleapis.com/oauth2/v4/token?client_id=oauth2-client-id& client_secret=oauth2-client-secret& code=authorization-code& grant_type=authorization_code& redirect_uri=https://www.google.com' Google OAuth, erişim jetonu ve yenileme jetonu olmak üzere iki jeton döndürür.
Bu değerlerin ikisini de kopyalayın. Erişim jetonu, SDM API'yi çağırmak için, yenileme jetonu ise yeni bir erişim jetonu almak için kullanılır.{"access_token": "access-token","expires_in": 3599,"refresh_token": "refresh-token","scope": "https://www.googleapis.com/auth/sdm.service","token_type": "Bearer" }
Cihaz listesi araması yapma
Yeni erişim jetonunuzla ilk devices.list çağrınızı yapana kadar yetkilendirme tamamlanmaz. Bu ilk çağrı, yetkilendirme sürecini tamamlar ve Pub/Sub aboneliğini daha önce ayarladıysanız etkinlikleri etkinleştirir.
devices uç noktası için bu aramayı yapmak üzere curl kullanın:
curl -X GET 'https://smartdevicemanagement.googleapis.com/v1/enterprises/project-id/devices' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer access-token'Başarılı bir çağrı, Device Accessprojenize bağlı cihazların listesini döndürür. Her cihazın kendine özgü bir kullanılabilir özellikler listesi vardır:
{
"devices": [
{
"name": "enterprises/project-id/devices/device-id",
"type": "sdm.devices.types.device-type",
"traits": { ... },
"parentRelations": [
{
"parent": "enterprises/project-id/structures/structure-id/rooms/room-id",
"displayName": "device-room-name"
}
]
}
]
}Yenileme jetonu kullanma
Google OAuth tarafından döndürülen expires_in parametresinde belirtildiği gibi, SDM API'si için erişim jetonları yalnızca 1 saat geçerlidir. Erişim jetonunuzun süresi dolarsa yeni bir jeton almak için yenileme jetonunu kullanın.
Bu komut, erişim jetonu komutuna benzer. Tek fark, farklı bir grant_type kullanmanızdır.
Bir terminal açıp aşağıdaki
curlkomutu çalıştırın. Komutta şunları değiştirin:- oauth2-client-id ve oauth2-client-secret Google Cloud Credentials'daki OAuth2 istemci kimliği ve istemci gizli anahtarıyla
- refresh-token ile erişim jetonunu ilk aldığınızda size gönderilen kodu girin.
curl -L -X POST 'https://www.googleapis.com/oauth2/v4/token?client_id=oauth2-client-id& client_secret=oauth2-client-secret& refresh_token=refresh-token& grant_type=refresh_token' Google OAuth, yeni bir erişim jetonu döndürür.
{"access_token": "new-access-token","expires_in": 3599,"scope": "https://www.googleapis.com/auth/sdm.service","token_type": "Bearer" }
Sorun giderme
Google OAuth hakkında daha fazla bilgi edinmek için Google API'lerine Erişmek İçin OAuth 2.0'ı Kullanma başlıklı makaleyi inceleyin.
Yenileme jetonunun süresi sürekli olarak doluyor
İstemci kimliği onaylanmazsa yenileme jetonları 7 gün sonra çalışmayı durdurabilir. 7 günlük jeton geçerlilik süresi, ticari veya korumalı alan onaylarıyla ilgili değildir. Daha uzun jeton ömrü elde etmek için bir hizmet veya kullanıcı hesabının OAuth 2.0 istemci kimliğinin onaylanması ve üretime alınması gerekir. Daha fazla bilgi için Yenileme jetonu geçerlilik süresi başlıklı makaleyi inceleyin.
Erişim reddedildi
Google Cloud'da OAuth kullanıcı rızası ekranınızı ayarladıysanız ve Kullanıcı türü Harici ise uygulamanız için test kullanıcısı olarak listelenmeyen bir Google Hesabı ile hesap bağlamaya çalıştığınızda "Erişim reddedildi" hatası alırsınız. Google Hesabı'nı OAuth kullanıcı rızası ekranınızdaki Test kullanıcıları bölümüne eklediğinizden emin olun.
İş Ortağı Bağlantıları Yöneticisi (PCM) hatası
PCM'ye erişirken karşılaşılan hatalarla ilgili yardım için İş Ortağı Bağlantıları Yöneticisi (PCM) Hata Referansı başlıklı makaleyi inceleyin.
Google bu uygulamayı doğrulamadı
SDM API'si, kısıtlanmış bir kapsam kullanır. Bu nedenle, yetkilendirme sırasında bu kapsamı kullanan tüm uygulamalar, OAuth API Doğrulaması tamamlanmadığı sürece "doğrulanmamış" olarak işaretlenir. Device Access kişisel kullanım için kullanıldığında OAuth API doğrulaması gerekmez.
Yetkilendirme işlemi sırasında, Google Cloud'daki OAuth kullanıcı rızası ekranınızda sdm.service kapsamı yapılandırılmamışsa "Google bu uygulamayı doğrulamadı" ekranı görünebilir. Bu ekranı, Gelişmiş seçeneğini ve ardından Proje Adı'na git (güvenli değil) seçeneğini tıklayarak atlayabilirsiniz.
Daha fazla bilgi için Doğrulanmamış uygulama ekranı başlıklı makaleyi inceleyin.
Geçersiz istemci
Erişim veya yenileme jetonu almaya çalışırken yanlış bir OAuth 2.0 istemci gizli anahtarı sağlarsanız "Invalid
client" (Geçersiz istemci) hatası alırsınız. Erişim ve yenileme jetonu çağrılarında kullandığınız client_secret değerinin, Google Cloud Kimlik Bilgileri sayfanızda bulunan, kullanılan OAuth 2.0 istemci kimliğine ait değer olduğundan emin olun.
Geçersiz istek, gerekli kapsam eksik
PCM'de izinleri verdikten sonra"Invalid request " (Geçersiz istek) hatasıyla karşılaşabilirsiniz. Bu hata, "Missing required parameter: scope" (Gerekli parametre eksik: kapsam) mesajını içerir. Yetkilendirme çağrılarında kullandığınız scope değerinin, Google Cloud Kimlik Bilgileri sayfanızda bulunan OAuth 2.0 istemcisi için ayarladığınız değerle aynı olduğundan emin olun.
Yönlendirme URI'si uyuşmazlığı
Yetkilendirme sırasında "Yönlendirme URI'si eşleşmiyor" hatasıyla karşılaşabilirsiniz. Yetkilendirme çağrılarında kullandığınız redirect_uri değerinin, Google Cloud
Kimlik Bilgileri sayfanızda bulunan OAuth 2.0 istemcisi için ayarladığınız değerle aynı olduğundan emin olun.
Hesap izinlerini değiştirme
Bir Device Access projesine verilen izinleri değiştirmek veya projeyi tamamen ayırmak için PCM'ye gidin:
https://nestservices.google.com/partnerconnections
Bu sayfada, hesabınıza bağlı tüm üçüncü taraf geliştirici hizmetleri (Device Access projeler) gösterilir. Değiştirmek istediğiniz Device Access projeyi seçin. İzinleri istediğiniz şekilde değiştirmek için sonraki ekranı kullanın.
Yetkilendirilmiş bir hizmet için yalnızca belirli izinleri iptal etmek istiyorsanız iptal etmek istediğiniz izinleri devre dışı bırakın ve kaydetmek için geri okunu tıklayın.
Yetkilendirilmiş bir hizmetin bağlantısını tamamen kaldırmak için Google Hesabınızın bağlantısını kaldırın'ı tıklayarak projeye hesap için verilen tüm izinleri ve erişim jetonlarını iptal edin.
PCM'de istediğiniz hizmet gösterilmiyorsa önce bir cihaz listesi çağrısı yapmanız gerekebilir.
Hızlı başvuru
user yetkilendirme ve Google Hesabı bağlama adımlarını hızlı bir şekilde uygulamak için bu referansı kullanın.
Bu hızlı referansı kullanmak için kod örneklerindeki her yer tutucu değişkeni, entegrasyonunuza özel değerlerle düzenleyin ve gerektiği şekilde kopyalayıp yapıştırın:
1 PCM
Aşağıdaki bağlantıyı bir web tarayıcısında açın ve şunları değiştirin:
- project-id ile Device Access Project kimliğiniz
- oauth2-client-id ile Google Cloud Credentials'daki OAuth2 istemci kimliği
https://nestservices.google.com/partnerconnections/project-id/auth?redirect_uri=https://www.google.com& access_type=offline& prompt=consent& client_id=oauth2-client-id& response_type=code& scope=https://www.googleapis.com/auth/sdm.service
2. Yetkilendirme kodu
https://www.google.com adresine yönlendirilirsiniz. Yetkilendirme kodu, URL'deki code parametresi olarak döndürülür. Bu parametre şu biçimde olmalıdır:
https://www.google.com?code=authorization-code&scope=https://www.googleapis.com/auth/sdm.service
3. Erişim jetonu
SDM API'yi çağırmak için kullanabileceğiniz bir erişim jetonu almak üzere yetkilendirme kodunu kullanın.
Bir terminal açıp aşağıdaki curl komutu çalıştırın. Komutta şunları değiştirin:
- oauth2-client-id ve oauth2-client-secret Google Cloud Credentials'daki OAuth2 istemci kimliği ve istemci gizli anahtarıyla
- authorization-code ile önceki adımda aldığınız kodu girin.
Google OAuth, erişim jetonu ve yenileme jetonu olmak üzere iki jeton döndürür.
İstek
curl -L -X POST 'https://www.googleapis.com/oauth2/v4/token?client_id=oauth2-client-id&client_secret=oauth2-client-secret&code=authorization-code&grant_type=authorization_code&redirect_uri=https://www.google.com' Yanıt
{
"access_token": "access-token",
"expires_in": 3599,
"refresh_token": "refresh-token",
"scope": "https://www.googleapis.com/auth/sdm.service",
"token_type": "Bearer"
}4 API Çağrısı
Yeni erişim jetonunuzla ilk devices.list çağrınızı yapana kadar yetkilendirme tamamlanmaz. Bu ilk çağrı, yetkilendirme sürecini tamamlar ve Pub/Sub aboneliğini daha önce ayarladıysanız etkinlikleri etkinleştirir.
Yetkilendirmeyi tamamlamak için belirtilen kapsamda listelenen API çağrılarından birini kullanmanız gerekir.
sdm.service
cihaz
Daha fazla bilgi için devices.list API referansına bakın.
curl -X GET 'https://smartdevicemanagement.googleapis.com/v1/enterprises/project-id/devices' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer access-token'5. Yenileme Jetonu
Google OAuth tarafından döndürülen expires_in parametresinde belirtildiği gibi, SDM API'si için erişim jetonları yalnızca 1 saat geçerlidir. Erişim jetonunuzun süresi dolarsa yeni bir jeton almak için yenileme jetonunu kullanın.
Bir terminal açıp aşağıdaki curl komutu çalıştırın. Komutta şunları değiştirin:
- oauth2-client-id ve oauth2-client-secret Google Cloud Credentials'daki OAuth2 istemci kimliği ve istemci gizli anahtarıyla
- refresh-token ile erişim jetonunu ilk aldığınızda size gönderilen kodu girin.
Google OAuth, yeni bir erişim jetonu döndürür.
İstek
curl -L -X POST 'https://www.googleapis.com/oauth2/v4/token?client_id=oauth2-client-id&client_secret=oauth2-client-secret&refresh_token=refresh-token&grant_type=refresh_token' Yanıt
{
"access_token": "new-access-token",
"expires_in": 3599,
"scope": "https://www.googleapis.com/auth/sdm.service",
"token_type": "Bearer"
}