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

เมื่อสร้างโปรเจ็กต์ 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 ที่ใช้เวลาเพียง 2 นาที

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

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