ให้สิทธิ์บัญชี

เมื่อสร้างโปรเจ็กต์ Google Cloud และการเข้าถึงอุปกรณ์แล้ว คุณจะให้สิทธิ์บัญชี Google ที่มีอุปกรณ์ Google Nest ที่รองรับสำหรับ SDM API ได้

หากต้องการดูโครงสร้างและอุปกรณ์ คุณต้องลิงก์บัญชี Google กับDevice Access โปรเจ็กต์โดยใช้ PCM PCM ช่วยให้ user ให้สิทธิ์เพื่ออนุญาตให้ developerเข้าถึงโครงสร้างและข้อมูลอุปกรณ์ได้

ในคู่มือนี้ คุณจะทำหน้าที่เป็นทั้ง user และ developer

  1. เปิดลิงก์ต่อไปนี้ในเว็บเบราว์เซอร์ โดยแทนที่ข้อมูลต่อไปนี้

    1. project-id พร้อม Device Access Project บัตรประจำตัว
    2. oauth2-client-id ด้วยรหัสไคลเอ็นต์ OAuth2 จาก 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. ในหน้าจอเลือกบัญชีเพื่อไปยังชื่อโปรเจ็กต์ ซึ่งชื่อโปรเจ็กต์คือชื่อโปรเจ็กต์ที่อยู่ในระบบคลาวด์ของ Google ให้เลือกบัญชี Google ที่ต้องการให้สิทธิ์สำหรับ SDM API ใช้บัญชี Google เดียวกันกับที่เคยใช้
  5. หลังจากเลือกบัญชีแล้ว คุณอาจเห็นหน้าจอคำเตือนที่ระบุว่า Google ยังไม่ได้ยืนยันแอปนี้ หากเป็นเช่นนั้น ให้คลิกตัวเลือกขั้นสูง แล้วคลิกไปที่ชื่อโปรเจ็กต์ (ไม่ปลอดภัย) เพื่อดำเนินการต่อ ดูข้อมูลเพิ่มเติมได้ที่ Google ยังไม่ได้ยืนยันแอปนี้
  6. ในหน้าจอให้สิทธิ์ชื่อโปรเจ็กต์ ให้คลิกอนุญาตเพื่อให้สิทธิ์โปรเจ็กต์เข้าถึงบัญชี Google ของคุณ
  7. ในหน้าจอยืนยันตัวเลือก ให้ตรวจสอบว่าได้เลือกสิทธิ์ที่ต้องการให้แล้ว จากนั้นคลิกอนุญาตเพื่อยืนยัน
  8. ระบบจะเปลี่ยนเส้นทางคุณไปยัง https://www.google.com โดยจะแสดงรหัสการให้สิทธิ์เป็นพารามิเตอร์ code ใน URL ซึ่งควรมีรูปแบบดังนี้

    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 จาก 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 จะแสดงโทเค็น 2 รายการ ได้แก่ โทเค็นเพื่อการเข้าถึงและโทเค็นการรีเฟรช

    {
      "access_token": "access-token",
      "expires_in": 3599,
      "refresh_token": "refresh-token",
      "scope": "https://www.googleapis.com/auth/sdm.service",
      "token_type": "Bearer"
    }
    คัดลอกทั้ง 2 ค่านี้ โทเค็นเพื่อการเข้าถึงใช้เพื่อเรียก 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"
        }
      ]
    }
  ]
}

วิธีใช้โทเค็นการรีเฟรช

โทเค็นเพื่อการเข้าถึงสำหรับ SDM API จะใช้งานได้เพียง 1 ชั่วโมงเท่านั้น ตามที่ระบุไว้ในพารามิเตอร์ expires_in ที่ Google OAuth ส่งคืน หากโทเค็นเพื่อการเข้าถึงหมดอายุ ให้ใช้โทเค็นการรีเฟรชเพื่อรับโทเค็นใหม่

คำสั่งนี้คล้ายกับคำสั่งโทเค็นเพื่อการเข้าถึง ยกเว้นว่าคุณใช้ grant_type ที่แตกต่างกัน

  1. เปิดเทอร์มินัลแล้วเรียกใช้คำสั่งcurlต่อไปนี้ โดยแทนที่

    1. oauth2-client-id และ oauth2-client-secret พร้อมรหัสไคลเอ็นต์และรหัสลับไคลเอ็นต์ OAuth2 จาก 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 APIs

โทเค็นการรีเฟรชหมดอายุอยู่เรื่อยๆ

โทเค็นการรีเฟรชอาจหยุดทำงานหลังจากผ่านไป 7 วันหากไม่ได้รับการอนุมัติรหัสไคลเอ็นต์ ซึ่งเป็นสาเหตุหนึ่งที่อาจเกิดขึ้น การหมดอายุของโทเค็นใน 7 วันไม่เกี่ยวข้องกับการอนุมัติเชิงพาณิชย์หรือ Sandbox บัญชีบริการหรือบัญชีผู้ใช้ต้องได้รับการอนุมัติรหัสไคลเอ็นต์ OAuth 2.0 และนำไปใช้จริงเพื่อให้โทเค็นมีอายุการใช้งานนานขึ้น ดูข้อมูลเพิ่มเติมได้ที่การหมดอายุของโทเค็นการรีเฟรช

การเข้าถึงถูกปฏิเสธ

หากคุณตั้งค่าหน้าจอขอความยินยอม OAuth ใน Google Cloud และประเภทผู้ใช้เป็นภายนอก คุณจะได้รับข้อผิดพลาด "ปฏิเสธการเข้าถึง" หากพยายามลิงก์บัญชีกับบัญชี Google ที่ไม่ได้อยู่ในรายชื่อผู้ใช้ทดสอบสำหรับแอปของคุณ โปรดตรวจสอบว่าได้เพิ่มบัญชี Google ลงในส่วนผู้ใช้ทดสอบในหน้าจอขอความยินยอม OAuth แล้ว

ข้อผิดพลาดของเครื่องมือจัดการการเชื่อมต่อกับพาร์ทเนอร์ (PCM)

หากต้องการความช่วยเหลือเกี่ยวกับข้อผิดพลาดที่พบเมื่อเข้าถึง PCM โปรดดู เครื่องมือจัดการการเชื่อมต่อกับพาร์ทเนอร์ (PCM) ข้อมูลอ้างอิงข้อผิดพลาด

Google ยังไม่ได้ยืนยันแอปนี้

SDM API ใช้ขอบเขตที่จำกัด ซึ่งหมายความว่าแอปใดก็ตามที่ใช้ขอบเขตนี้ในระหว่างการให้สิทธิ์จะ "ไม่ได้รับการยืนยัน" เว้นแต่จะดำเนินการการยืนยัน API ของ OAuth เสร็จสมบูรณ์ เมื่อใช้ Device Access เพื่อ การใช้งานส่วนตัว คุณไม่จำเป็นต้องตรวจสอบ OAuth API

คุณอาจเห็นหน้าจอ "Google ยังไม่ได้ยืนยันแอปนี้" ในระหว่างกระบวนการให้สิทธิ์ ซึ่งจะปรากฏขึ้นหากไม่ได้กำหนดค่าsdm.serviceขอบเขตในหน้าจอขอความยินยอม OAuth ใน Google Cloud คุณข้ามหน้าจอนี้ได้โดยคลิกตัวเลือกขั้นสูง แล้วคลิกไปที่ชื่อโปรเจ็กต์ (ไม่ปลอดภัย)

ดูข้อมูลเพิ่มเติมได้ที่หน้าจอแอปที่ยังไม่ได้รับการยืนยัน

ไคลเอ็นต์ไม่ถูกต้อง

เมื่อพยายามรับโทเค็นเพื่อการเข้าถึงหรือโทเค็นรีเฟรช คุณจะได้รับข้อผิดพลาด "ไคลเอ็นต์ไม่ถูกต้อง" หากระบุรหัสลับไคลเอ็นต์ OAuth 2.0 ไม่ถูกต้อง โปรดตรวจสอบว่าค่า client_secret ที่คุณใช้ในการเรียกโทเค็นเพื่อการเข้าถึงและโทเค็นรีเฟรชเป็นค่าสำหรับรหัสไคลเอ็นต์ OAuth 2.0 ที่ใช้ ซึ่งดูได้ในหน้าข้อมูลเข้าสู่ระบบของ Google Cloud

คำขอไม่ถูกต้อง ไม่มีขอบเขตที่จำเป็น

หลังจากให้สิทธิ์ใน PCM แล้ว คุณอาจพบข้อผิดพลาด "คำขอไม่ถูกต้อง" ของ "ไม่มีพารามิเตอร์ที่จำเป็น: ขอบเขต" ตรวจสอบว่าค่า scope ที่คุณใช้ในการเรียกการให้สิทธิ์นั้นเหมือนกับค่าที่คุณตั้งไว้สำหรับไคลเอ็นต์ OAuth 2.0 ตามที่ระบุไว้ในหน้าข้อมูลเข้าสู่ระบบของ Google Cloud

URI การเปลี่ยนเส้นทางไม่ตรงกัน

เมื่อดำเนินการให้สิทธิ์ คุณอาจพบข้อผิดพลาด "URI เปลี่ยนเส้นทางไม่ตรงกัน" ตรวจสอบว่าค่า redirect_uri ที่คุณใช้ในการเรียกการให้สิทธิ์นั้น เหมือนกับค่าที่คุณตั้งไว้สำหรับไคลเอ็นต์ OAuth 2.0 ตามที่ระบุไว้ในหน้า ข้อมูลเข้าสู่ระบบของ Google Cloud

แก้ไขสิทธิ์ของบัญชี

หากต้องการแก้ไขสิทธิ์ที่มอบให้ Device Access โปรเจ็กต์ หรือยกเลิกการเชื่อมต่อโดยสมบูรณ์ ให้ไปที่ PCM โดยทำดังนี้

https://nestservices.google.com/partnerconnections

หน้านี้จะแสดงบริการของนักพัฒนาแอปบุคคลที่สามทั้งหมด (Device Access โปรเจ็กต์) ที่เชื่อมต่อกับบัญชีของคุณ เลือก Device Access โปรเจ็กต์ที่ต้องการ เปลี่ยน ใช้หน้าจอถัดไปเพื่อแก้ไขสิทธิ์ตามต้องการ

หากต้องการเพิกถอนเฉพาะสิทธิ์บางอย่างสำหรับบริการที่ได้รับอนุญาต ให้สลับสิทธิ์ที่ต้องการเพิกถอน แล้วคลิกลูกศรย้อนกลับเพื่อบันทึก

หากต้องการยกเลิกการเชื่อมต่อบริการที่ได้รับอนุญาตโดยสมบูรณ์ ให้คลิกยกเลิกการลิงก์บัญชี Google เพื่อเพิกถอนสิทธิ์และโทเค็นการเข้าถึงทั้งหมดที่โปรเจ็กต์ได้รับ สำหรับบัญชี

หาก PCM ไม่แสดงบริการที่ต้องการ คุณอาจต้องโทรหาเพื่อขอรายชื่ออุปกรณ์ก่อน

ข้อมูลอ้างอิงโดยย่อ

ใช้ข้อมูลอ้างอิงนี้เพื่อดำเนินการตามขั้นตอนในการให้สิทธิ์user และลิงก์บัญชี Google ของผู้ใช้ได้อย่างรวดเร็ว

หากต้องการใช้ข้อมูลอ้างอิงฉบับย่อนี้ ให้แก้ไขตัวแปรตัวยึดตำแหน่งแต่ละรายการในตัวอย่างโค้ด ด้วยค่าสำหรับการผสานรวมที่เฉพาะเจาะจง แล้วคัดลอกและวางตามที่ต้องการ

1 PCM

เปิดลิงก์ต่อไปนี้ในเว็บเบราว์เซอร์ โดยแทนที่ข้อมูลต่อไปนี้

  1. project-id พร้อม Device Access Project บัตรประจำตัว
  2. oauth2-client-id ด้วยรหัสไคลเอ็นต์ OAuth2 จาก 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 ใน URL ซึ่งควรมีรูปแบบดังนี้

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 จาก Google Cloud ข้อมูลเข้าสู่ระบบ
  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

อุปกรณ์

ดูข้อมูลเพิ่มเติมได้ที่เอกสารอ้างอิง API ของ devices.list

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 ชั่วโมงเท่านั้น ตามที่ระบุไว้ในพารามิเตอร์ expires_in ที่ Google OAuth ส่งคืน หากโทเค็นเพื่อการเข้าถึงหมดอายุ ให้ใช้โทเค็นการรีเฟรชเพื่อรับโทเค็นใหม่

เปิดเทอร์มินัลแล้วเรียกใช้คำสั่งcurlต่อไปนี้ โดยแทนที่

  1. oauth2-client-id และ oauth2-client-secret พร้อมรหัสไคลเอ็นต์และรหัสลับไคลเอ็นต์ OAuth2 จาก 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"
}