เมื่อสร้างโปรเจ็กต์ Google Cloud และโปรเจ็กต์การเข้าถึงอุปกรณ์แล้ว คุณจะให้สิทธิ์บัญชี Google ที่มีอุปกรณ์ Google Nest ที่รองรับสำหรับ SDM API ได้
ลิงก์บัญชี
หากต้องการดูโครงสร้างและอุปกรณ์ คุณต้องลิงก์บัญชี Google กับDevice Access โปรเจ็กต์โดยใช้ PCM PCM อนุญาตให้ user ให้สิทธิ์เพื่ออนุญาตให้ developerเข้าถึงโครงสร้างและข้อมูลอุปกรณ์
ในคู่มือนี้ คุณจะเป็นทั้ง user และ developer
เปิดลิงก์ต่อไปนี้ในเว็บเบราว์เซอร์ โดยแทนที่
- project-id พร้อม Device Access Project บัตรประจำตัว
- 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 - หากลงชื่อเข้าใช้ Google ด้วยหลายบัญชีเมื่อเร็วๆ นี้ คุณอาจเห็นหน้าจอเลือกบัญชีแรกที่มีรายการบัญชี Google ของคุณ หากใช่ ให้เลือกบัญชี Google ที่เชื่อมโยงกับอุปกรณ์ที่ต้องการให้สิทธิ์ Device Access
- หน้าจอสิทธิ์ของ Google Nest คือ PCM นั่นเอง คุณสามารถให้สิทธิ์โครงสร้างและอุปกรณ์ได้ที่นี่ เปิดใช้สิทธิ์สำหรับบ้าน (ขั้นตอนที่ 1) และอุปกรณ์ในบ้านที่ SDM API รองรับ (ขั้นตอนที่ 2) แล้วคลิกถัดไป
- ในหน้าจอเลือกบัญชีเพื่อไปยังชื่อโปรเจ็กต์ ซึ่งชื่อโปรเจ็กต์คือชื่อโปรเจ็กต์ Google Cloud ของคุณ ให้เลือกบัญชี Google ที่ต้องการให้สิทธิ์สำหรับ SDM API ใช้บัญชี Google เดียวกันกับที่ใช้ก่อนหน้านี้
- หลังจากเลือกบัญชีแล้ว คุณอาจเห็นหน้าจอคำเตือนระบุว่าGoogle ยังไม่ได้ยืนยันแอปนี้ หากเป็นเช่นนั้น ให้คลิกตัวเลือกขั้นสูง แล้วคลิกไปที่ ชื่อโปรเจ็กต์ (ไม่ปลอดภัย) เพื่อดำเนินการต่อ ดูข้อมูลเพิ่มเติมได้ในGoogle ยังไม่ได้ยืนยันแอปนี้
- ในหน้าจอให้สิทธิ์ ชื่อโปรเจ็กต์ ให้คลิกอนุญาตเพื่อให้สิทธิ์โปรเจ็กต์เข้าถึงบัญชี Google
- ในหน้าจอยืนยันตัวเลือก ให้ตรวจสอบว่าได้เลือกสิทธิ์ที่ต้องการมอบแล้ว แล้วคลิกอนุญาตเพื่อยืนยัน
ระบบควรเปลี่ยนเส้นทางคุณไปที่ https://www.google.com ระบบจะแสดงรหัสการให้สิทธิ์เป็นพารามิเตอร์
code
ใน URL ซึ่งควรอยู่ในรูปแบบนี้https://www.google.com?code=authorization-code&
scope=https://www.googleapis.com/auth/sdm.service - คัดลอกรหัสการให้สิทธิ์
รับโทเค็นเพื่อการเข้าถึง
ใช้รหัสการให้สิทธิ์เพื่อเรียกข้อมูลโทเค็นการเข้าถึง ซึ่งคุณใช้เพื่อเรียกใช้ SDM API ได้
เปิดเทอร์มินัลแล้วเรียกใช้คำสั่ง
curl
ต่อไปนี้ โดยแทนที่- oauth2-client-id และ oauth2-client-secret ด้วยรหัสไคลเอ็นต์ OAuth2 และรหัสลับไคลเอ็นต์จากข้อมูลเข้าสู่ระบบ Google Cloud
- 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' Google OAuth จะแสดงผลโทเค็น 2 รายการ ได้แก่ โทเค็นการเข้าถึงและโทเค็นการรีเฟรช
คัดลอกทั้ง 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
อื่น
เปิดเทอร์มินัลและเรียกใช้คำสั่ง
curl
ต่อไปนี้ โดยแทนที่- oauth2-client-id และ oauth2-client-secret ด้วยรหัสไคลเอ็นต์ OAuth2 และรหัสลับไคลเอ็นต์จากข้อมูลเข้าสู่ระบบ Google Cloud
- 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' Google OAuth จะแสดงโทเค็นการเข้าถึงใหม่
{
การแก้ปัญหา
ดูข้อมูลเพิ่มเติมเกี่ยวกับ OAuth ของ Google ได้ที่การใช้ OAuth 2.0 เพื่อเข้าถึง Google API
โทเค็นการรีเฟรชหมดอายุอยู่เรื่อยๆ
โทเค็นรีเฟรชอาจหยุดทํางานหลังจากผ่านไป 7 วันหากรหัสไคลเอ็นต์ไม่ได้รับอนุมัติ ซึ่งเป็นสาเหตุที่เป็นไปได้อย่างหนึ่ง การหมดอายุของโทเค็น 7 วันไม่เกี่ยวข้องกับการอนุมัติเชิงพาณิชย์หรือแซนด์บ็อกซ์ บัญชีบริการหรือบัญชีผู้ใช้ต้องได้รับอนุมัติรหัสไคลเอ็นต์ 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 คุณข้ามหน้าจอนี้ได้โดยการคลิกตัวเลือกขั้นสูง แล้วคลิกไปที่ Project
Name (ไม่ปลอดภัย)
ดูข้อมูลเพิ่มเติมได้ที่หน้าจอแอปที่ยังไม่ได้รับการยืนยัน
ไคลเอ็นต์ไม่ถูกต้อง
เมื่อพยายามรับโทเค็นการเข้าถึงหรือโทเค็นรีเฟรช คุณจะได้รับข้อผิดพลาด "ไคลเอ็นต์ไม่ถูกต้อง" หากระบุข้อมูลลับไคลเอ็นต์ 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
เปิดลิงก์ต่อไปนี้ในเว็บเบราว์เซอร์ โดยแทนที่
- project-id พร้อม Device Access Project บัตรประจำตัว
- 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
ต่อไปนี้ โดยแทนที่
- oauth2-client-id และ oauth2-client-secret ด้วยรหัสไคลเอ็นต์ OAuth2 และรหัสลับไคลเอ็นต์จากข้อมูลเข้าสู่ระบบ Google Cloud
- 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
ต่อไปนี้ โดยแทนที่
- oauth2-client-id และ oauth2-client-secret ด้วยรหัสไคลเอ็นต์ OAuth2 และรหัสลับไคลเอ็นต์จากข้อมูลเข้าสู่ระบบ Google Cloud
- 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" }