Bir Hesabı Yetkilendir

Google Cloud ve Device Access projelerinizi oluşturduktan sonra, SDM API için desteklenen bir Google Nest cihazı olan bir Google Hesabı'nı yetkilendirebilirsiniz.

Yapıları ve cihazları görüntülemek için PCM'yi kullanarakDevice Access projenize bir Google Hesabı bağlamanız gerekir. PCM, user 'in developer'ların yapılarına ve cihaz verilerine erişmesine izin vermesine olanak tanır.

Bu kılavuzda hem user hem de developerrolündesiniz.

  1. Aşağıdaki bağlantıyı bir web tarayıcısında açın ve aşağıdakileri değiştirin:

    1. project-id ile Device Access Project kimliğiniz
    2. oauth2-client-id ile Google Cloud Kimlik Bilgilerinizdeki
    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. Yakın zamanda Google'da birden fazla hesapla oturum açtıysanız Google Hesaplarınızın listesini içeren ilk Hesap seçin ekranı gösterilebilir. Bu durumda, yetkilendirmek istediğiniz cihazlara bağlı Google Hesabı'nı seçin Device Access.
  3. Google Nest izinleri ekranı, PCM'nin kendisidir. Burada yapı ve cihaz izinleri verebilirsiniz. Evinizin (1. Adım) ve bu evde SDM API tarafından desteklenen cihazların (2. Adım) izinlerini etkinleştirin, ardından Sonraki'yi tıklayın.
  4. Proje Adı'na devam etmek için bir hesap seçin ekranında (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ı ile oturum açın.
  5. Hesap seçtikten sonra Google bu uygulamayı doğrulamadı yazan bir uyarı ekranı görebilirsiniz. Bu durumda, devam etmek için Gelişmiş'i ve ardından Proje Adı'na git (güvenli değil)'i tıklayın. Daha fazla bilgi için Google bu uygulamayı doğrulamadı başlıklı makaleyi inceleyin.
  6. Projenin Google Hesabınıza erişmesine izin vermek için Proje Adı'na erişim izni ver ekranında İzin ver'i tıklayın.
  7. Seçimlerinizi onaylayın ekranında, vermek istediğiniz izinlerin işaretlendiğinden emin olun ve onaylamak için İzin ver'i tıklayın.
  8. 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
    
  9. 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.

  1. Bir terminal açıp aşağıdaki curl komutunu çalıştırın.

    1. Google Cloud Kimlik Bilgilerinizdeki OAuth2 istemci kimliği ve istemci gizli anahtarıyla oauth2-client-id ve oauth2-client-secret
    2. Önceki adımda aldığınız kodu kullanarak authorization-code
    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'
  2. Google OAuth, erişim jetonu ve yenileme jetonu olmak üzere iki jeton döndürür.

    {
      "access_token": "access-token",
      "expires_in": 3599,
      "refresh_token": "refresh-token",
      "scope": "https://www.googleapis.com/auth/sdm.service",
      "token_type": "Bearer"
    }
    Bu değerlerin ikisini de kopyalayın. Erişim jetonu, SDM API'yi çağırmak için kullanılır ve yenileme jetonu yeni bir erişim jetonu almak için kullanılır.

Cihaz listesi araması yapma

Yeni erişim jetonunuzla ilk devices.list aramanızı yapana kadar yetkilendirme tamamlanmaz. Bu ilk arama, yetkilendirme sürecini tamamlar ve daha önce bir Pub/Sub aboneliği oluşturduysanı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ı, projenize bağlı cihazların listesini döndürür. Device Access Her cihazın, kullanılabilen özelliklerle ilgili kendine özgü bir 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 nasıl kullanılır?

SDM API'si için erişim jetonları, Google OAuth tarafından döndürülen expires_in parametresinde belirtildiği gibi yalnızca 1 saat boyunca geçerlidir. Erişim jetonunuzun süresi dolarsa yeni bir jeton almak için yenileme jetonunu kullanın.

Komut, erişim jetonu komutuna benzer. Tek fark, farklı bir grant_type kullanmanızdır.

  1. Bir terminal açıp aşağıdaki curl komutunu çalıştırın.

    1. Google Cloud Kimlik Bilgilerinizdeki OAuth2 istemci kimliği ve istemci gizli anahtarıyla oauth2-client-id ve oauth2-client-secret
    2. refresh-token ile erişim jetonunu ilk kez aldığınızda 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&refresh_token=refresh-token&grant_type=refresh_token'
  2. 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 için OAuth 2.0'ı kullanma başlıklı makaleyi inceleyin.

Yenileme jetonunun süresi sürekli doluyor

İstemci kimliği onaylanmamışsa yenileme jetonları 7 gün sonra çalışmayı durdurabilir. 7 günlük jeton geçerlilik süresi, ticari veya korumalı alan onayları ile ilgili değildir. Bir hizmet veya kullanıcı hesabının, daha uzun jeton ömrü elde etmek için OAuth 2.0 istemci kimliğinin onaylanması ve üretime geçirilmesi gerekir. Daha fazla bilgi için Yenileme jetonu geçerlilik süresi başlıklı makaleyi inceleyin.

Erişim reddedildi

OAuth izin ekranınızı Google Cloud'da oluşturduysanız ve Kullanıcı türü Harici ise uygulamanız için test kullanıcısı olarak listelenmeyen bir Google Hesabı ile hesap bağlamayı denerseniz "Erişim reddedildi" hatası alırsınız. Google Hesabı'nı OAuth izin 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, yetkilendirme sırasında bu kapsamı kullanan tüm uygulamaların, OAuth API Doğrulaması tamamlanmadığı sürece "doğrulanmamış" olacağı anlamına gelir. Device Access kişisel kullanım için kullanıldığında OAuth API Doğrulaması gerekli değildir.

Yetkilendirme işlemi sırasında "Google bu uygulamayı doğrulamadı" ekranını görebilirsiniz. Bu ekran, Google Cloud'daki OAuth izin ekranınızda sdm.service kapsamı yapılandırılmamışsa gösterilir. Bu ekranı atlamak için Gelişmiş seçeneğini ve ardından Proje Adı'na git (güvenli değil)'i tıklayın.

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 "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 OAuth 2.0 istemci kimliği için kullanılan değer olduğundan emin olun.

Geçersiz istek, gerekli kapsam eksik

PCM'de izin verdikten sonra "Gerekli parametre eksik: scope" şeklinde bir "Geçersiz istek" hatasıyla karşılaşabilirsiniz. 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 uyuşmuyor" 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 projeye verilen izinleri değiştirmek veya projenin bağlantısını tamamen kaldı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.

Yetkili bir hizmetin yalnızca belirli izinlerini iptal etmek için, iptal etmek istediğiniz izinleri etkinleştirin ve kaydetmek için geri oku tıklayın.

Yetkili bir hizmetin bağlantısını tamamen kaldırmak için Google Hesabınızın bağlantısını kaldır'ı tıklayarak projenin hesaba verdiği tüm izinleri ve erişim jetonlarını iptal edin.

PCM istenen hizmeti göstermiyorsa önce cihaz listesi çağrısı yapmanız gerekebilir.

Hızlı referans

Bir kullanıcıyı yetkilendirme ve Google Hesabını bağlama adımlarını hızlıca uygulamak için bu referansı kullanın.user

Bu hızlı referansı kullanmak için kod örneklerindeki her yer tutucu değişkeni, kendi entegrasyonunuza ait değerlerle düzenleyin ve gerektiğinde kopyalayıp yapıştırın:

1 PCM

Aşağıdaki bağlantıyı bir web tarayıcısında açın ve aşağıdakileri değiştirin:

  1. project-id ile Device Access Project kimliğiniz
  2. oauth2-client-id ile Google Cloud Kimlik Bilgilerinizdeki
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 komutunu çalıştırın.

  1. Google Cloud Kimlik Bilgilerinizdeki OAuth2 istemci kimliği ve istemci gizli anahtarıyla oauth2-client-id ve oauth2-client-secret
  2. Önceki adımda aldığınız kodu kullanarak authorization-code

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 aramanızı yapana kadar yetkilendirme tamamlanmaz. Bu ilk arama, yetkilendirme sürecini tamamlar ve daha önce bir Pub/Sub aboneliği oluşturduysanız etkinlikleri etkinleştirir.

Yetkilendirmeyi tamamlamak için belirtilen kapsam için 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

SDM API'si için erişim jetonları, Google OAuth tarafından döndürülen expires_in parametresinde belirtildiği gibi yalnızca 1 saat boyunca geçerlidir. Erişim jetonunuzun süresi dolmuşsa yeni bir jeton almak için yenileme jetonunu kullanın.

Bir terminal açıp aşağıdaki curl komutunu çalıştırın.

  1. Google Cloud Kimlik Bilgilerinizdeki OAuth2 istemci kimliği ve istemci gizli anahtarıyla oauth2-client-id ve oauth2-client-secret
  2. refresh-token ile erişim jetonunu ilk kez aldığınızda aldığınız 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"
}