添加功能以使用我的应用程序控制用户智能家居设备

问题描述 投票:0回答:1

我正在开发一个 Android TV 应用程序项目,我使用 OpenAI Assistant API 创建虚拟助手。现在我想在我的应用程序中实现一项功能,用户可以使用他们的谷歌帐户登录,并让我的应用程序访问连接到谷歌的智能家居设备。我做了一些快速研究,并从谷歌找到了一堆文档。这些太令人困惑了。 (多个 SDK/API,如 Local Home SDK、Google Home Mobile SDK、Google Home Device SDK、Device Access、HomeGraph bla bla)...

我很困惑该使用哪一个。

我认为并得到 ChatGPT 和 Copilot 的建议,对于我的工作,Google Homegraph API 应该对我有所帮助。但这有一个问题。当我尝试在具有 Homegraph Scope 权限的应用程序中使用 Google 登录时,Google 会抛出此错误

Some requested scopes cannot be shown: [https://www.googleapis.com/auth/homegraph]

注意:我已在 Google Cloud Console 中启用 Homegraph API,并启用所有智能设备管理 API 的所有范围。 (在那里找不到 HomeGraph Scope)。

现在,如果我在没有 [https://www.googleapis.com/auth/homegraph] 范围的情况下进行身份验证,那么 homegraph api 会发回一些范围权限错误。

现在我的问题是,在这种情况下我应该使用什么 API 或库?如果是 Homegraph API,那么我如何启用范围并继续。

登录活动功能:

有趣的startLogin() {

    val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
        .requestIdToken(getString(R.string.google_web_client_id))
        .requestProfile()
        .requestScopes(
            Scope("https://www.googleapis.com/auth/assistant-sdk-prototype"),
            Scope("https://www.googleapis.com/auth/homegraph")
        )
        .requestEmail()
        .build()

    googleSignInClient = GoogleSignIn.getClient(this, gso)
    val signInIntent = googleSignInClient?.signInIntent
    if (signInIntent != null) {
        launcher.launch(signInIntent)
    } else {
        Log.e("LoginFailure", "signInIntent is null")
    }
}
android oauth-2.0 google-smart-home
1个回答
0
投票

“无效范围”错误来自客户端 ID 类型,而不是 HomeGraph API。 您用于 Android TV 应用的“电视和有限输入设备”类型客户端 ID 不支持 HomeGraph API 所要求的用户交互授权。这是因为它是针对用户交互有限的设备(例如电视)而设计的。请参阅电视允许的范围

解决方案可以是更改客户端 ID 类型。 在 Google Cloud Console 中,导航到 API 和服务 - 凭据并创建新的 OAuth 客户端 ID。选择允许用户交互的类型,例如 Web 应用程序或 Android。

更新您的 startLogin 函数以使用新的客户端 ID。

© www.soinside.com 2019 - 2024. All rights reserved.