我正在开发一个 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")
}
}
“无效范围”错误来自客户端 ID 类型,而不是 HomeGraph API。 您用于 Android TV 应用的“电视和有限输入设备”类型客户端 ID 不支持 HomeGraph API 所要求的用户交互授权。这是因为它是针对用户交互有限的设备(例如电视)而设计的。请参阅电视允许的范围。
解决方案可以是更改客户端 ID 类型。 在 Google Cloud Console 中,导航到 API 和服务 - 凭据并创建新的 OAuth 客户端 ID。选择允许用户交互的类型,例如 Web 应用程序或 Android。
更新您的 startLogin 函数以使用新的客户端 ID。