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

เมื่อสร้างโปรเจ็กต์ 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 Cloud ของคุณ ให้เลือก บัญชี 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 API

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

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

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

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

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

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

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

SDM API ใช้ขอบเขตที่จำกัด ซึ่งหมายความว่า แอปที่ใช้ขอบเขตนี้ในระหว่างการให้สิทธิ์จะ "ไม่ได้รับการยืนยัน" ยกเว้น การตรวจสอบ OAuth API เสร็จสมบูรณ์ เมื่อใช้ 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 การเปลี่ยนเส้นทางไม่ตรงกัน

ในขั้นตอนการให้สิทธิ์ คุณอาจพบ "URL การเปลี่ยนเส้นทางไม่ตรงกัน" ตรวจสอบว่าค่า 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

อุปกรณ์

โปรดดู 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 ชั่วโมงเท่านั้น ตามที่ระบุไว้ในพารามิเตอร์ 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"
}