【问题标题】:How to setup different configuration(awsconfiguration.json) with AWSMobileClient for debug and release build types如何使用 AWSMobileClient 设置不同的配置(awsconfiguration.json)以进行调试和发布构建类型
【发布时间】:2020-08-31 20:53:40
【问题描述】:

我想为 debug 和 release 构建提供不同的配置。所有的配置都存储在awsconfiguration.json里面,比如我有两个不同的配置文件,我该如何设置应该使用哪个文件。

当使用AWSMobileClient.getInstance() 时,它会从文件awsconfiguration.json 获取默认配置

配置文件示例:

{
  "Version": "1.0",
  "CredentialsProvider": {
    "CognitoIdentity": {
      "Default": {
        "PoolId": "DIFFERENT_VALUES",
        "Region": "DIFFERENT_VALUES"
      }
    }
  },
  "IdentityManager": {
    "Default": {}
  },
  "CognitoUserPool": {
    "Default": {
      "AppClientSecret": "DIFFERENT_VALUES",
      "AppClientId": "DIFFERENT_VALUES",
      "PoolId": "DIFFERENT_VALUES",
      "Region": "DIFFERENT_VALUES"
    }
  }
}

更新 可以选择通过将不同的文件放在main\res\raw 和release\res\raw 中来使用不同的awsconfiguration.json,例如按照这个answer,它可以工作。 但我想知道是否可以选择以编程方式进行。

【问题讨论】:

  • 如何在android studio中生成awsconfiguration.json?

标签: android aws-sdk


【解决方案1】:

这也可以通过在 AWSConfiguration 中设置配置值然后初始化 AWSMobileClient 来实现。

    AWSConfiguration awsConfiguration = new AWSConfiguration(context);
    awsConfiguration.setConfiguration("Stage"); // BuildConfig can be used here.

    AWSMobileClient.getInstance().initialize(context, awsConfiguration,  new Callback<UserStateDetails>() {

        @Override
        public void onResult(UserStateDetails userStateDetails) {
        }

        @Override
        public void onError(Exception e) {
        }
    });

awsconfiguration.json 文件可以更新如下

{
 "Version": "1.0",
 "CredentialsProvider": {
    "CognitoIdentity": {
        "Default": {
            "PoolId": "DIFFERENT_VALUES",
            "Region": "DIFFERENT_VALUES"
        },
        "Stage": {
            "PoolId": "STAGE_VALUES",
            "Region": "STAGE_VALUES"
        }
    }
 },
 "IdentityManager": {
    "Default": {},
    "Stage": {}
 },
 "CognitoUserPool": {
    "Default": {
        "AppClientSecret": "DIFFERENT_VALUES",
        "AppClientId": "DIFFERENT_VALUES",
        "PoolId": "DIFFERENT_VALUES",
        "Region": "DIFFERENT_VALUES"
    },
    "Stage": {
        "AppClientSecret": "STAGE_VALUES",
        "AppClientId": "STAGE_VALUES",
        "PoolId": "STAGE_VALUES",
        "Region": "STAGE_VALUES"
    }
 }
}

【讨论】:

  • 如何在android studio中生成awsconfiguration.json?
  • Amplify.Auth 在执行此操作后仍继续使用默认值。
  • 您知道我们如何使用 AmplifyConfiguration.json 文件中的单独 CognitoUserPools 和普通的 Default() 文件吗?我无法将其从默认更改为使用其他产品,例如 Prod 等...(iOS 应用)
【解决方案2】:

我一直在尝试实现类似的目标;根据选定的配置文件在运行时选择 AWS 配置。我通过破解 AWS 开发工具包使其部分工作,但随后偶然发现了 release notes 用于 AWS 开发工具包版本 2.11.0。引用:

添加了通过新 API 将配置作为内存对象(即[String: Any]/NSDictionary)而不是默认的awsconfiguration.json 传递的选项

我还在放大入门指南here 中找到了它的文档(!)。

因此,自 2019 年 9 月 9 日起,可以在运行时选择 AWS 配置。


编辑:刚刚注意到这个问题是针对 Android 而不是 iOS。我不是 Android 开发人员,但通过快速搜索在 AWS Android SDK 版本2.13.6(2019 年 6 月 7 日)中发现了类似的内容。引用release notes:

添加AWSConfiguration(JSONObject) 构造函数以从通过JSONObject 传递的配置构造AWSConfiguration 对象

...看起来很有希望。

【讨论】:

    【解决方案3】:

    这可以通过source sets 完成;例如。目录main 和debug 或目录debug 和release,其中res/raw 或assets 没有被AAPT2 处理。添加类似的凭据仅建议供内部使用,因为它们可以很容易地从包中提取。

    【讨论】:

    • 谢谢!这行得通,但我想动态更改它,例如,如果有这样的选项,可以通过编程方式进行更改。
    • Gradle 配置完全可以编写脚本,那么有什么问题呢?在源代码中添加凭据是一种特定的攻击媒介,因此绝对不建议这样做,无论人们多久对这些“简单但瑞士奶酪”的答案进行投票。
    【解决方案4】:

    Abhishek 的回答是我最喜欢的。但是,如果您使用的是 Amplify(就像我一样),虽然可以将多个配置放入一个文件中,但我还没有找到在它们之间进行选择的方法。

    因此,尽管这不是问题的确切答案,但在 Amplify 中,您可以在多个独立的配置文件之间进行选择,如下所示:

    设置 Amplify 时:

    Amplify.addPlugin(AWSCognitoAuthPlugin())
    // and whatever other plugins you'll need...
    Amplify.configure(AmplifyConfiguration.fromConfigFile(applicationContext, getConfigResourceId(applicationContext)), applicationContext)
    

    还要加上:

    private fun getConfigResourceId(context: Context): Int = context.resources.getIdentifier("YourConfigFileName", "raw", context.packageName)
    

    【讨论】:

    • 如何在android studio中生成awsconfiguration.json?
    • @bdevloper 您不会在 Android Studio 中生成 awsConfigurations。您在 Amplify 中生成它们,然后将它们保存在 res 目录中,Android Studio 可以在其中找到它们。
    猜你喜欢
    • 2010-09-13
    • 2015-07-28
    • 2012-02-19
    • 2022-11-02
    • 2011-09-25
    • 2014-03-21
    • 1970-01-01
    • 2013-02-09
    • 2010-11-27
    相关资源
    最近更新 更多