Uỷ quyền tài khoản

Khi tạo các dự án Google Cloud và Device Access (Quyền truy cập thiết bị và Google Cloud), bạn có thể uỷ quyền cho một Tài khoản Google có thiết bị Google Nest được hỗ trợ dùng SDM API.

Để xem các cấu trúc và thiết bị, bạn phải liên kết Tài khoản Google với dự ánDevice Access của mình bằng PCM. PCM cho phép user cấp quyền để developertruy cập vào các cấu trúc và dữ liệu thiết bị của chúng.

Trong hướng dẫn này, bạn đóng vai trò là user và developer.

  1. Mở đường liên kết sau trong một trình duyệt web, thay thế:

    1. project-id kèm theo Device Access Project mã nhận dạng của bạn
    2. oauth2-client-id bằng mã ứng dụng khách OAuth2 trong thông tin đăng nhập Google Cloud của bạn
    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. Nếu gần đây đã đăng nhập vào Google bằng nhiều tài khoản, bạn có thể thấy màn hình Choose an account (Chọn tài khoản) ban đầu chứa danh sách các Tài khoản Google của bạn. Nếu vậy, hãy chọn Tài khoản Google liên kết với(các) thiết bị bạn muốn cấp quyền cho Device Access.
  3. Màn hình quyền đối với Google Nest chính là PCM. Tại đây, bạn có thể cấp quyền cho thiết bị và cấu trúc. Bật quyền cho nhà của bạn (Bước 1) và mọi thiết bị trong nhà được SDM API hỗ trợ (Bước 2), sau đó nhấp vào Next (Tiếp theo).
  4. Trên màn hình Choose an account để tiếp tục chuyển đến Project Name (Tên dự án), trong đó Project Name (Tên dự án) là tên của dự án trên Google Cloud, hãy chọn Tài khoản Google bạn muốn cấp quyền đối với API SDM. Sử dụng cùng một Tài khoản Google như trước đây.
  5. Sau khi chọn một tài khoản, có thể bạn sẽ thấy màn hình cảnh báo cho biết Google chưa xác minh ứng dụng này. Nếu vậy, để tiếp tục, hãy nhấp vào tuỳ chọn Advanced (Nâng cao) rồi nhấp vào Go to Project Name (không an toàn). Hãy xem nội dung Google chưa xác minh ứng dụng này để biết thêm thông tin.
  6. Trên màn hình Cấp quyền Tên dự án, hãy nhấp vào Cho phép để cấp cho dự án quyền truy cập vào Tài khoản Google của bạn.
  7. Trên màn hình Xác nhận lựa chọn của bạn, hãy đảm bảo bạn đã đánh dấu vào các quyền mà bạn muốn cấp rồi nhấp vào Cho phép để xác nhận.
  8. Bạn sẽ được chuyển hướng đến https://www.google.com. Mã uỷ quyền được trả về dưới dạng tham số code trong URL, phải có định dạng sau:

    https://www.google.com?code=authorization-code&scope=https://www.googleapis.com/auth/sdm.service
    
  9. Sao chép mã uỷ quyền.

Lấy mã truy cập

Sử dụng mã uỷ quyền để truy xuất mã truy cập mà bạn có thể dùng để gọi API SDM.

  1. Mở cửa sổ dòng lệnh rồi chạy lệnh curl sau đây, thay thế:

    1. oauth2-client-idoauth2-client-secret bằng Mã ứng dụng khách OAuth2 và Mật khẩu ứng dụng khách trong thông tin đăng nhập Google Cloud của bạn
    2. authorization-code bằng mã bạn đã nhận được ở bước trước đó
    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 trả về 2 mã thông báo, một mã truy cập và một mã làm mới.

    {
      "access_token": "access-token",
      "expires_in": 3599,
      "refresh_token": "refresh-token",
      "scope": "https://www.googleapis.com/auth/sdm.service",
      "token_type": "Bearer"
    }
    Sao chép cả hai giá trị này. Mã truy cập được dùng để gọi API SDM và mã làm mới được dùng để nhận mã truy cập mới.

Gọi danh sách thiết bị

Quá trình uỷ quyền chưa hoàn tất cho đến khi bạn thực hiện lệnh gọi devices.list đầu tiên bằng mã truy cập mới. Lệnh gọi ban đầu này kết thúc quá trình uỷ quyền và bật các sự kiện nếu bạn đã thiết lập gói thuê bao Pub/Sub.

Dùng curl để thực hiện lệnh gọi này cho điểm cuối devices:

curl -X GET 'https://smartdevicemanagement.googleapis.com/v1/enterprises/project-id/devices' \
    -H 'Content-Type: application/json' \
    -H 'Authorization: Bearer access-token'

Lệnh gọi thành công sẽ trả về danh sách các thiết bị liên kết với dự án Device Access của bạn. Mỗi thiết bị đều có danh sách trait riêng biệt hiện có:

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

Cách sử dụng mã làm mới

Mã truy cập cho API SDM chỉ có hiệu lực trong 1 giờ, như đã nêu trong tham số expires_in do Google OAuth trả về. Nếu mã truy cập của bạn hết hạn, hãy sử dụng mã làm mới để nhận mã mới.

Lệnh này tương tự như mã truy cập một, ngoại trừ việc bạn sử dụng một grant_type khác.

  1. Mở cửa sổ dòng lệnh rồi chạy lệnh curl sau đây, thay thế:

    1. oauth2-client-idoauth2-client-secret bằng Mã ứng dụng khách OAuth2 và Mật khẩu ứng dụng khách trong thông tin đăng nhập Google Cloud của bạn
    2. refresh-token bằng mã bạn nhận được khi lần đầu nhận mã truy cập.
    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 trả về một mã truy cập mới.

    {
      "access_token": "new-access-token",
      "expires_in": 3599,
      "scope": "https://www.googleapis.com/auth/sdm.service",
      "token_type": "Bearer"
    }

Khắc phục sự cố

Để tìm hiểu thêm về Google OAuth, hãy xem bài viết Sử dụng OAuth 2.0 để truy cập API của Google.

Mã làm mới mã liên tục hết hạn

Mã làm mới có thể ngừng hoạt động sau 7 ngày nếu mã ứng dụng khách không được phê duyệt có thể là một nguyên nhân. Thời hạn của mã thông báo trong 7 ngày không liên quan đến hoạt động phê duyệt Thương mại hoặc Hộp cát. Dịch vụ hoặc tài khoản người dùng cần được phê duyệt và đưa mã ứng dụng khách OAuth 2.0 vào chính thức để có thể tồn tại lâu hơn trong thời gian tồn tại của mã thông báo. Xem phần Làm mới thời hạn của mã thông báo để biết thêm thông tin.

Quyền truy cập bị từ chối

Nếu đã thiết lập màn hình xin phép bằng OAuth trong Google Cloud và Loại người dùngBên ngoài, thì bạn sẽ gặp lỗi "Quyền truy cập bị từ chối" nếu cố gắng liên kết tài khoản với một Tài khoản Google không được liệt kê là người dùng thử nghiệm cho ứng dụng của bạn. Hãy nhớ thêm Tài khoản Google vào phần Người dùng thử nghiệm trong màn hình xin phép bằng OAuth.

Lỗi Trình quản lý kết nối đối tác (PCM)

Để được trợ giúp về mọi lỗi gặp phải khi truy cập vào PCM, hãy xem Tài liệu tham khảo về lỗi Trình quản lý kết nối đối tác (PCM).

Google chưa xác minh ứng dụng này

API SDM sử dụng một phạm vi bị hạn chế, có nghĩa là mọi ứng dụng dùng phạm vi này trong thời gian uỷ quyền sẽ "chưa được xác minh" trừ phi bạn hoàn tất quy trình Xác minh API OAuth. Khi sử dụng Device Access cho mục đích cá nhân, bạn không bắt buộc phải Xác minh API OAuth.

Bạn có thể thấy màn hình "Google chưa xác minh ứng dụng này" trong quá trình uỷ quyền. Màn hình này sẽ xuất hiện nếu bạn chưa định cấu hình phạm vi sdm.service trên màn hình xin phép bằng OAuth trong Google Cloud. Bạn có thể bỏ qua màn hình này bằng cách nhấp vào tuỳ chọn Advanced (Nâng cao) rồi nhấp vào Go to Project Name (Không an toàn).

Hãy xem bài viết Màn hình ứng dụng chưa được xác minh để biết thêm thông tin.

Khách hàng không hợp lệ

Khi cố lấy mã thông báo truy cập hoặc làm mới, bạn sẽ gặp lỗi "Ứng dụng khách không hợp lệ" nếu cung cấp Mật khẩu ứng dụng khách OAuth 2.0 không chính xác. Hãy đảm bảo giá trị client_secret mà bạn đang sử dụng trong các lệnh gọi mã thông báo truy cập và làm mới là giá trị cho Mã ứng dụng khách OAuth 2.0 đang được sử dụng, như có trên trang Thông tin xác thực Google Cloud.

Yêu cầu không hợp lệ, thiếu phạm vi bắt buộc

Sau khi cấp quyền trong PCM, bạn có thể gặp lỗi "Yêu cầu không hợp lệ" là "Thiếu tham số bắt buộc: phạm vi". Đảm bảo giá trị scope mà bạn đang sử dụng trong các lệnh gọi uỷ quyền giống với giá trị mà bạn đặt cho Ứng dụng OAuth 2.0, như trên trang Thông tin xác thực Google Cloud.

URI chuyển hướng không khớp

Trong quá trình uỷ quyền, bạn có thể gặp lỗi "Chuyển hướng URI không khớp". Đảm bảo giá trị redirect_uri bạn đang sử dụng trong các lệnh gọi uỷ quyền giống với giá trị bạn đặt cho Ứng dụng OAuth 2.0, như trên trang Thông tin xác thực Google Cloud.

Sửa đổi quyền đối với tài khoản

Để sửa đổi các quyền được cấp cho một Device Access dự án hoặc ngắt kết nối toàn bộ dự án, hãy chuyển đến PCM:

https://nestservices.google.com/partnerconnections

Trang này hiển thị tất cả dịch vụ dành cho nhà phát triển bên thứ ba (Device Access dự án) được kết nối với tài khoản của bạn. Chọn dự án Device Access mà bạn muốn thay đổi. Sử dụng màn hình tiếp theo để sửa đổi các quyền nếu muốn.

Để chỉ thu hồi các quyền cụ thể của một dịch vụ được uỷ quyền, hãy bật/tắt các quyền bạn muốn thu hồi rồi nhấp vào mũi tên quay lại để lưu.

Để ngắt kết nối hoàn toàn một dịch vụ được cấp phép, hãy nhấp vào Huỷ liên kết Tài khoản Google của bạn để thu hồi tất cả các quyền và mã truy cập mà dự án đã cấp cho tài khoản.

Nếu PCM không hiển thị dịch vụ mong muốn, trước tiên, bạn có thể phải thực hiện lệnh gọi danh sách thiết bị.

Tài liệu tham khảo nhanh

Hãy sử dụng tài liệu tham khảo này để triển khai nhanh các bước uỷ quyền user và liên kết Tài khoản Google của trẻ.

Để sử dụng tài liệu tham khảo nhanh này, hãy chỉnh sửa từng biến phần giữ chỗ trong mã mẫu có các giá trị dành cho tích hợp cụ thể của bạn, rồi sao chép và dán nếu cần:

1 PCM

Mở đường liên kết sau trong một trình duyệt web, thay thế:

  1. project-id kèm theo Device Access Project mã nhận dạng của bạn
  2. oauth2-client-id bằng mã ứng dụng khách OAuth2 trong thông tin đăng nhập Google Cloud của bạn
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 mã xác thực

Bạn sẽ được chuyển hướng đến https://www.google.com. Mã uỷ quyền được trả về dưới dạng tham số code trong URL, phải có định dạng sau:

https://www.google.com?code=authorization-code&scope=https://www.googleapis.com/auth/sdm.service

3 Mã truy cập

Sử dụng mã uỷ quyền để truy xuất mã truy cập mà bạn có thể dùng để gọi API SDM.

Mở cửa sổ dòng lệnh rồi chạy lệnh curl sau đây, thay thế:

  1. oauth2-client-idoauth2-client-secret bằng Mã ứng dụng khách OAuth2 và Mật khẩu ứng dụng khách trong thông tin đăng nhập Google Cloud của bạn
  2. authorization-code bằng mã bạn đã nhận được ở bước trước đó

Google OAuth trả về 2 mã thông báo, một mã truy cập và một mã làm mới.

Yêu cầu

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'

Phản hồi

{
  "access_token": "access-token",
  "expires_in": 3599,
  "refresh_token": "refresh-token",
  "scope": "https://www.googleapis.com/auth/sdm.service",
  "token_type": "Bearer"
}

4 lệnh gọi API

Quá trình uỷ quyền chưa hoàn tất cho đến khi bạn thực hiện lệnh gọi devices.list đầu tiên bằng mã truy cập mới. Lệnh gọi ban đầu này kết thúc quá trình uỷ quyền và bật các sự kiện nếu bạn đã thiết lập gói thuê bao Pub/Sub.

Bạn phải sử dụng một trong các lệnh gọi API được liệt kê cho phạm vi đã chỉ định để hoàn tất quá trình uỷ quyền.

sdm.service

thiết bị

Hãy xem Tài liệu tham khảo về API devices.list để biết thêm thông tin.

curl -X GET 'https://smartdevicemanagement.googleapis.com/v1/enterprises/project-id/devices' \
    -H 'Content-Type: application/json' \
    -H 'Authorization: Bearer access-token'

5 Mã làm mới

Mã truy cập cho API SDM chỉ có hiệu lực trong 1 giờ, như đã nêu trong tham số expires_in do Google OAuth trả về. Nếu mã truy cập của bạn hết hạn, hãy sử dụng mã làm mới để nhận mã mới.

Mở cửa sổ dòng lệnh rồi chạy lệnh curl sau đây, thay thế:

  1. oauth2-client-idoauth2-client-secret bằng Mã ứng dụng khách OAuth2 và Mật khẩu ứng dụng khách trong thông tin đăng nhập Google Cloud của bạn
  2. refresh-token bằng mã bạn nhận được khi lần đầu nhận mã truy cập.

Google OAuth trả về một mã truy cập mới.

Yêu cầu

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'

Phản hồi

{
  "access_token": "new-access-token",
  "expires_in": 3599,
  "scope": "https://www.googleapis.com/auth/sdm.service",
  "token_type": "Bearer"
}