如何在Xamarin.FormsAndroid中读取Microsoft App Center环境变量?

问题描述

我在appcenter.ms中部署了一个应用程序,该应用程序具有一些“秘密”字段。我将它们添加MYSTRING_STR value之类的“环境变量”部分中,并且试图在Xamarin.Forms项目中阅读它,例如 var myStr = Environment.GetEnvironmentvariable("MYSTRING_STR");,但没有保留任何值。在发行版本中阅读它们的正确方法是什么?

解决方法

我很傻。当然,这将无法正常工作,因为该应用程序无法在其编译的系统上运行,因此不会复制环境变量。我将其留给将来可能需要的人使用。 Tl;博士,我在github上有我的应用程序,而App Center只是从那里编译的。这就是我设法在其中获取“秘密”字段而不泄漏github上信息的方式: 您需要在项目中安装Mobile.BuildTools nuget软件包。 然后,在项目的根目录中使用所需的信息创建一个名为secrets.json的文件。我在本地创建了一个占位符,例如:

{
  "String1": "%VALUE1%","String2": "%VALUE2%"
}

因为它是一个json,所以不会读取值,但是没关系。我们只希望在下一部分中在github上对其进行跟踪。将其提交到存储库后,我将其添加到.gitignore并为其删除缓存,这样当我们在其中添加真实值时就不会对其进行跟踪。 进行编译时,Mobile.BuildTools将自动生成一个名为Secrets的类。您可以使用Secrets.String1等访问代码中的变量,因此只在需要它们的地方使用它们。 之后,您可以像往常一样在App Center中设置环境变量,然后需要构建脚本将它们写入json文件。 在文件夹<MyProject>.Android(或iOS,或者如果支持多个平台,则为两个文件夹)中,我创建了名为appcenter-post-clone.sh的脚本,其内容如下:

#!/usr/bin/env bash

npm install node-jq --save

jq -n \
            --arg str1 "$STRING1" \
            --arg str2 "$STRING2" \
            '{String1: $str1,String2: $str2}' > $APPCENTER_SOURCE_DIRECTORY/<Project>/secrets.json

完成之后。抱歉,很长的帖子,但是我找不到真正的消息来源来解释这一点,所以我只是把它留在这里,以防其他人像我一样迷路。