Firestore:如何设置 GOOGLE_APPLICATION_CREDENTIALS?

Posted

技术标签:

【中文标题】Firestore:如何设置 GOOGLE_APPLICATION_CREDENTIALS?【英文标题】:Firestore: how to set up GOOGLE_APPLICATION_CREDENTIALS? 【发布时间】:2021-02-10 12:19:00 【问题描述】:

我正在关注 official Google docs 从 android 应用 (Xamarin) 访问 Firestore。每次我尝试访问 firestore 时,都会出现以下异常:

System.InvalidOperationException:应用程序默认凭据不可用。如果在 Google Compute Engine 中运行,它们就可用。否则,必须定义环境变量 GOOGLE_APPLICATION_CREDENTIALS 指向定义凭据的文件。请参阅https://developers.google.com/accounts/docs/application-default-credentials/ 了解更多信息。

例外情况很明显。我必须设置环境变量。所以我运行了以下 PowerShell 命令:

$env:GOOGLE_APPLICATION_CREDENTIALS="C:/Foo/Bar/google-services.json"

那没用。也许 json 文件必须在 Android 设备上。我将 json 文件设置为“嵌入式内容”,并在访问数据库之前将以下行插入应用程序(使用 System,使用 System.IO):

Environment.SetEnvironmentVariable("GOOGLE_APPLICATION_CREDENTIALS", Path.Combine(Environment.CurrentDirectory, @"../../Firestore/google-services.json"));

这将异常更改为“路径无效”。如何获取 json 文件的路径?这是我的层次结构:

【问题讨论】:

【参考方案1】:

如果你的方法不起作用:

根据Getting Started with Authentication,可以通过命令提示符设置

set GOOGLE_APPLICATION_CREDENTIALS=[PATH]

你可以试试这个方法

开始 -> 这台电脑(右键单击我的电脑)-> 属性 -> 在左侧面板中,您会发现

高级系统设置 -> 环境变量

然后为#UserName#添加用户变量系统变量

点击New它将为您提供弹出窗口并提供

变量名称: GOOGLE_APPLICATION_CREDENTIALS

变量值:只需提供 Json 文件的路径即可。它将自动设置为应用程序默认值。

您可以使用给定按钮选择文件:

即使在 Github 问题上 Jon Skeet 在他的 answer 中进行了解释

【讨论】:

我添加了变量并得到 System.InvalidOperationException: 'Error reading credential file from location (my path here)'。我提供了一个绝对路径。我应该使用相对路径吗?相对于什么? 您可以从文件设置-> 属性-> 安全复制路径 我正在使用这个路径:"D:\\Android\AndroidSandbox\AndroidSandbox\Firestore\google-services.json" 仍然得到 System.InvalidOperationException。 @Bip901 我张贴图片帮助您理解,使用该按钮您可以选择文件并保存路径 不幸的是,错误仍然存​​在。不过,我非常感谢您的帮助 - 如果一段时间后没有其他答案发布,我会接受此答案。

以上是关于Firestore:如何设置 GOOGLE_APPLICATION_CREDENTIALS?的主要内容,如果未能解决你的问题,请参考以下文章

设置 Firestore 文档时如何检测不存在的网络连接

如何使用 Flutter 配置 Firebase Firestore 设置

如何在flutter中将具有文档ID的自定义对象设置为firestore中的集合?

如何将默认反应上下文值设置为来自 Firestore 的数据?

如何将设置数据类型放入Firestore?

如何使用firestore admin nodejs sdk设置服务器时间戳?