アカウントを認可する

Google Cloud と Device Access プロジェクトを作成すると、 サポートされている Google Nest デバイスで Google アカウントを SDM API

ストラクチャやデバイスを表示するには、Google アカウントを Device Access PCM を使用するプロジェクト。 PCM を使用すると、 user 以下に対する権限を付与できます。 ストラクチャとデバイスデータにアクセスできます。 developer

このガイドでは、 user と developerの両方として機能します。

  1. ウェブで次のリンクを開く 次のように置き換えます。

    1. project-id は、 Device Access Project ID に置き換えます。
    2. oauth2-client-id は、取得した OAuth2 クライアント 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)と、その家にある SDM API でサポートされているデバイス(ステップ 2)の権限をオンにして、[次へ] をクリックします。
  4. [プロジェクト名に移動するアカウントを選択] 画面で、次の操作を行います。 [Project Name] は、Google Cloud プロジェクトの名前です。[Project Name] を選択します。 認証する Google アカウント SDM API以前に使用したものと同じ Google アカウントを使用します。
  5. アカウントを選択した後、 このアプリは Google によって確認されていません。続行するには、 [Advanced] オプションを選択してから、[Go to Project Name (unsafe)] をクリックします。詳しくは、 このアプリは Google によって確認されていません。詳細については、 情報です。
  6. [プロジェクト名の権限を付与] 画面で、[許可] をクリックして Google アカウントにアクセスするためのプロジェクトの権限。
  7. [選択内容を確認] 画面で、付与する権限がオンになっていることを確認し、[許可] をクリックして確定します。
  8. 以下のページにリダイレクトされます https://www.google.com.認証コードは URL の 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 サブスクリプションを設定済みです

curl を使用して、devices エンドポイントに対して次の呼び出しを行います。

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

更新トークンの使用方法

Google OAuth から返される expires_in パラメータに記載されているように、SDM API のアクセス トークンの有効期間は 1 時間のみです。条件 アクセス トークンの有効期限が切れたら、更新トークンを使用して新しいトークンを取得してください。

このコマンドはアクセス トークンのコマンドと類似していますが、別の grant_type

  1. ターミナルを開き、次の curl コマンドを実行します。

    1. oauth2-client-idoauth2-client-secret は、Google Cloud 認証情報の OAuth2 クライアント ID とクライアント シークレットに置き換えます。
    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 同意画面を設定していて、 [User type] が [External] の場合、「アクセスが拒否されました」と表示されます。エラー テストユーザーとして登録されていない Google アカウントにリンクしようとした 提供しますGoogle アカウントを [テストユーザー] セクションに追加する OAuth 同意画面

パートナー コネクション マネージャー(PCM)エラー

PCM へのアクセス時に発生したエラーについては、Partner Connections Manager(PCM)エラー リファレンスをご覧ください。

このアプリはまだ確認されていません

SDM API は制限付きのスコープを使用します。つまり、 承認時にこのスコープを使用するアプリは「未確認」になりますただし、 OAuth API の確認が完了していること。個人で使用する Device Access 場合は、OAuth API の確認は必要ありません。

「Google はこのアプリを確認していません」というメッセージが表示されることがあります。承認プロセス中に画面が表示され sdm.service スコープが構成されていない場合に表示されます。 Google Cloud の OAuth 同意画面。この画面をバイパスするには、[詳細設定] オプションをクリックし、[プロジェクト名(安全ではない)に移動] をクリックします。

未確認のアプリをご覧ください。 画面 をご覧ください。

クライアントが無効です

アクセス トークンや更新トークンを取得しようとすると、「無効」というメッセージが クライアント誤った OAuth 2.0 クライアント シークレットを指定した場合、このエラーが発生します。必ず、 アクセス トークンと更新トークンの呼び出しで使用している client_secret 値が、 クライアント ID に使用する OAuth 2.0 クライアント ID を Google Cloud クルデンシャル できます。

無効なリクエストです。必要なスコープがありません

PCM で権限を付与した後、「必須パラメータが不足しています: scope」という「無効なリクエスト」エラーが発生することがあります。必ず、 認証呼び出しで使用している scope の値は、OAuth 2.0 クライアントで設定した値と同じです。 Google Cloud クルデンシャル できます。

リダイレクト URI の不一致

認証を行うと、「Redirect uri mismatch(リダイレクト URI の不一致)」というエラーが発生することがあります。認証呼び出しで使用している redirect_uri の値が次のことを確認します。 OAuth 2.0 クライアントに設定したものと同じ ID を設定します。 Google Cloud クルデンシャル できます。

アカウントの権限を変更する

プロジェクトに付与された権限を変更するか、完全に切断するには、PCM に移動します。 Device Access

https://nestservices.google.com/partnerconnections

このページには、すべてのサードパーティ デベロッパー サービス(Device Access プロジェクト)が表示されます 関連付けられていますプロジェクトを選択する Device Access あります。次の画面で、必要に応じて権限を変更します。

承認済みサービスの特定の権限のみを取り消すには、 削除する権限を選択し、戻る矢印をクリックして保存します。

承認済みサービスを完全に切断するには、[Google アカウントのリンクを解除] をクリックして、プロジェクトにアカウントに対して付与されているすべての権限とアクセス トークンを取り消します。

PCM に目的のサービスが表示されない場合は、まずデバイスリスト呼び出しを行う必要があります。

クイック リファレンス

このリファレンスを使用して、user を承認し、Google アカウントをリンクする手順をすばやく実装します。

このクイック リファレンスを使用するには、コードサンプルの各プレースホルダ変数を、特定の統合の値に編集し、必要に応じてコピーして貼り付けます。

1 PCM

ウェブで次のリンクを開く 次のように置き換えます。

  1. project-id は、 Device Access Project ID に置き換えます。
  2. oauth2-client-id は、取得した OAuth2 クライアント 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 にリダイレクトされます。認証コードは URL の code パラメータとして返されます。このパラメータの形式は次のとおりです。

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

3 アクセス トークン

認証コードを使用してアクセス トークンを取得します。このトークンは、SDM API の呼び出しに使用できます。

ターミナルを開いて次のコマンドを実行します。 次の curl コマンドを使用します。

  1. oauth2-client-idoauth2-client-secret は、Google Cloud 認証情報の OAuth2 クライアント ID とクライアント シークレットに置き換えます。
  2. authorization-code は、前の手順で受け取ったコードに置き換えます。

Google OAuth は、アクセス トークンと更新トークンの 2 つのトークンを返します。

リクエスト

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 個

Google OAuth から返される expires_in パラメータに記載されているように、SDM API のアクセス トークンの有効期間は 1 時間のみです。アクセス トークンの有効期限が切れた場合は、更新トークンを使用して新しいトークンを取得します。

ターミナルを開き、次の curl コマンドを実行します。

  1. oauth2-client-idoauth2-client-secret は、Google Cloud 認証情報の OAuth2 クライアント ID とクライアント シークレットに置き換えます。
  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"
}