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

เมื่อคุณสร้างโปรเจ็กต์ 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 ค่านี้ โทเค็นเพื่อการเข้าถึงจะใช้ในการเรียก API ของ SDM และใช้โทเค็นการรีเฟรชเพื่อรับโทเค็นเพื่อการเข้าถึงใหม่

โทรจากลิสต์อุปกรณ์

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

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

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

ข้อผิดพลาด Partner Connections Manager (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" ตรวจสอบว่าค่า 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

โทเค็นเพื่อการเข้าถึง

ใช้รหัสการให้สิทธิ์เพื่อเรียกโทเค็นเพื่อการเข้าถึง ซึ่งคุณสามารถใช้เพื่อเรียกใช้ 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"
}