授權帳戶

建立 Google Cloud 和裝置存取權專案後 只要使用支援的 Google Nest 裝置,即可授權 Google 帳戶 SDM API。

如要查看結構和裝置,您必須將 Google 帳戶連結至 Device Access 專案。 PCM 允許 user 授予以下權限: 允許 developer存取自己的結構和裝置資料。

在本指南中,您同時是 user 和 developer。

  1. 在網頁上開啟以下連結 ,取代:

    1. 使用 Device Access Project ID 可享 project-id
    2. oauth2-client-id 替換為您 Google Cloud 憑證
    ,瞭解如何調查及移除這項存取權。
    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. 如果您最近曾使用多個帳戶登入 Google, 系統隨即顯示初始「選擇帳戶」畫面,列出 Google 帳戶。如果有,請選取與裝置連結的 Google 帳戶 希望為 Device Access授權。
  3. 「Google Nest 權限」畫面本身就是 PCM。 您可以在這裡授予結構和裝置權限。開啟 授予住家 (步驟 1) 和住家中所有裝置的權限 (步驟 2) 支援 SDM API,然後點選「下一步」
  4. 在「Choose an account to continue」「Project Name」畫面,其中 「專案名稱」是您的 Google Cloud 專案名稱。選取 您要授權的 Google 帳戶 SDM API。請使用原本的 Google 帳戶。
  5. 選取帳戶後,可能會顯示警告畫面 這個應用程式未經 Google 驗證。如要繼續,請點選 「Advanced」選項,然後點選「Go to Project Name (unsafe)」。詳情請見 Google 尚未驗證這個應用程式 可能不準確或不適當
  6. 在「授予「專案名稱」權限」畫面中按一下「允許」,即可授予相關權限 可存取您 Google 帳戶的權限。
  7. 在「確認選擇」畫面中,確認所需的權限。 已勾選授予項目,然後按一下「Allow」確認。
  8. 系統應會將您重新導向 https://www.google.com.授權碼會在網址中以 code 參數的形式傳回, 格式:

    https://www.google.com?code=authorization-code&scope=https://www.googleapis.com/auth/sdm.service
    
  9. 複製授權碼。

取得存取憑證

使用授權碼擷取存取權杖 可讓您呼叫 SDM API

  1. 開啟終端機並執行 將以下 curl 指令取代:

    1. oauth2-client-id」和「oauth2-client-secret」 複製而來的 OAuth2 用戶端 ID 和用戶端密鑰 Google Cloud 憑證
    2. 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 會傳回兩個權杖,分別是存取權杖和 重新整理權杖。

    {
      "access_token": "access-token",
      "expires_in": 3599,
      "refresh_token": "refresh-token",
      "scope": "https://www.googleapis.com/auth/sdm.service",
      "token_type": "Bearer"
    }
    請同時複製這兩個值。存取權杖可用來呼叫 SDM API 和更新權杖來取得新的 存取權杖

撥打裝置清單通話

您必須完成這項程序,授權程序才算完成 你的第一個 devices.list 呼叫。這個 初始呼叫會完成授權程序,並在 您已設定 Pub/Sub 訂閱項目

使用 curldevices 端點發出此呼叫:

curl -X GET 'https://smartdevicemanagement.googleapis.com/v1/enterprises/project-id/devices' \
    -H 'Content-Type: application/json' \
    -H 'Authorization: Bearer access-token'

通話成功後,系統會傳回與 Device Access連結的裝置清單 專案。每部裝置都有專屬的可用特徵清單:

{
  "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"
        }
      ]
    }
  ]
}

如何使用更新權杖

SDM API 的存取權杖僅適用於 有效期限為 1 小時,如同 Google OAuth 傳回的 expires_in 參數中所述。如果 您的存取權杖過期,請使用更新權杖取得新的權杖。

這個指令與存取權杖 1 類似,但您可以使用不同的 grant_type

  1. 開啟終端機並執行 下列 curl 指令,將取代:

    1. oauth2-client-id」和「oauth2-client-secret」 複製而來的 OAuth2 用戶端 ID 和用戶端密鑰 Google Cloud 憑證
    2. 使用您最初取得存取權時收到的代碼 refresh-token 產生下一個符記
    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 會傳回新的存取權杖。

    {
      "access_token": "new-access-token",
      "expires_in": 3599,
      "scope": "https://www.googleapis.com/auth/sdm.service",
      "token_type": "Bearer"
    }

疑難排解

如要進一步瞭解 Google OAuth,請參閱使用 OAuth 2.0 存取 Google API

重新整理權杖一直過期

如果用戶端 ID 未獲核准,重新整理權杖可在 7 天後停止運作 都是可能的原因7 天權杖有效期限與商業性無關 或「沙箱」核准服務或使用者帳戶必須取得 OAuth 2.0 用戶端 ID 已獲準並用於實際工作環境,延長權杖效期。 詳情請參閱「更新權杖到期時間」 可能不準確或不適當

存取遭拒

如果您已在 Google Cloud 中設定 OAuth 同意畫面且 如果 [使用者類型] 為 [外部],系統會顯示「存取遭拒」訊息發生錯誤 試圖與未列為測試使用者的 Google 帳戶建立連結 。務必在「測試使用者」部分新增 Google 帳戶 OAuth 同意畫面

合作夥伴連線管理工具 (PCM) 錯誤

存取存取時遇到任何錯誤的說明 PCM,請參閱 合作夥伴連線管理工具 (PCM) 錯誤參考資料

這個應用程式未經 Google 驗證

SDM API 使用受限制的範圍,表示任何 在授權期間使用此範圍的應用程式會顯示為「未驗證」除非 您已完成 OAuth API 驗證使用 Device Access 裝置時 個人用途,也不需要進行 OAuth API 驗證。

您可能會看到「Google 尚未驗證這個應用程式」訊息瀏覽授權期間的畫面 程序,如果未設定 sdm.service 範圍,系統就會顯示這個 Google Cloud 中的 OAuth 同意畫面。您可以 按一下進階選項,然後按一下前往專案 名稱 (不安全)

請參閱「未驗證的應用程式」 螢幕 瞭解詳情

客戶無效

嘗試取得存取權或更新權杖時,您會收到「無效」 客戶」錯誤訊息。請確認 您用於存取權和更新權杖呼叫的「client_secret」值 如 Google Cloud 憑證 頁面。

要求無效,缺少必要範圍

在 PCM 中授予權限後,您可能需要執行 「要求無效」或顯示「缺少必要參數:範圍」錯誤請確認 您在授權呼叫中使用的 scope 值與您為 OAuth 2.0 用戶端設定的值相同。 Google Cloud 憑證 頁面。

重新導向 URI 不符

按照授權程序操作時,您可能會遇到「重新導向 URI 不符」問題 錯誤。請確認授權呼叫中使用的 redirect_uri 值是 與您在 Google Cloud 憑證 頁面。

修改帳戶權限

如要修改授予的專案 Device Access 權限或取消連結專案 請前往 PCM:

https://nestservices.google.com/partnerconnections

這個頁面會顯示所有第三方開發人員服務 (Device Access 專案) 已連結至您的帳戶選取您要 Device Access 選取的專案 變更。在下一個畫面中,視需要修改權限。

如果只想撤銷授權服務的特定權限,請切換 ,然後按一下返回箭頭來儲存。

如要完全取消連結授權服務,請按一下「取消連結你的 Google 帳戶」 這個帳戶:用於撤銷專案曾擁有的所有權限和存取權杖 授予該帳戶使用權限

如果 PCM 未顯示所需的服務,您可能需要 請先呼叫裝置清單

快速參考指引

請參考這份參考文件,快速執行授權 user 並連結他們的 Google 帳戶 ,直接在 Google Cloud 控制台實際操作。

如要使用這個快速參照,請編輯程式碼範例中的每個預留位置變數 與特定整合的值,並視需要複製貼上:

1 PCM

在網頁上開啟以下連結 ,取代:

  1. 使用 Device Access Project ID 可享 project-id
  2. oauth2-client-id 替換為您 Google Cloud 憑證
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 組驗證碼

系統應會將您重新導向 https://www.google.com.授權碼會在網址中以 code 參數的形式傳回, 格式:

https://www.google.com?code=authorization-code&scope=https://www.googleapis.com/auth/sdm.service

3 個存取權杖

使用授權碼擷取存取權杖 可讓您呼叫 SDM API

開啟終端機並執行 將以下 curl 指令取代:

  1. oauth2-client-id」和「oauth2-client-secret」 複製而來的 OAuth2 用戶端 ID 和用戶端密鑰 Google Cloud 憑證
  2. authorization-code 改成您在上一個步驟收到的代碼

Google OAuth 會傳回兩個權杖,分別是存取權杖和 重新整理權杖。

要求

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'

回應

{
  "access_token": "access-token",
  "expires_in": 3599,
  "refresh_token": "refresh-token",
  "scope": "https://www.googleapis.com/auth/sdm.service",
  "token_type": "Bearer"
}

4 API 呼叫

您必須完成這項程序,授權程序才算完成 你的第一個 devices.list 呼叫。這個 初始呼叫會完成授權程序,並在 您已設定 Pub/Sub 訂閱項目

必須使用下列其中一個 按照指定範圍列出的 API 呼叫完成授權。

sdm.service

裝置

詳情請參閱 devices.list 詳細資訊的 API 參考資料。

curl -X GET 'https://smartdevicemanagement.googleapis.com/v1/enterprises/project-id/devices' \
    -H 'Content-Type: application/json' \
    -H 'Authorization: Bearer access-token'

5 更新權杖

SDM API 的存取權杖僅適用於 有效期限為 1 小時,如同 Google OAuth 傳回的 expires_in 參數中所述。如果 您的存取權杖過期,請使用更新權杖取得新的權杖。

開啟終端機並執行 下列 curl 指令,將取代:

  1. oauth2-client-id」和「oauth2-client-secret」 複製而來的 OAuth2 用戶端 ID 和用戶端密鑰 Google Cloud 憑證
  2. 使用您最初取得存取權時收到的代碼 refresh-token 產生下一個符記

Google OAuth 會傳回新的存取權杖。

要求

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'

回應

{
  "access_token": "new-access-token",
  "expires_in": 3599,
  "scope": "https://www.googleapis.com/auth/sdm.service",
  "token_type": "Bearer"
}