如何使用 AWSMobileClient 为调试和发布构建类型设置不同的配置 (awsconfiguration.json)

Rom*_*ych 6 android aws-sdk

我想要不同的配置debugrelease构建。所有配置都存储在里面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"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

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

小智 9

这也可以通过在 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) {
        }
    });
Run Code Online (Sandbox Code Playgroud)

并且 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"
    }
 }
}
Run Code Online (Sandbox Code Playgroud)


Nic*_*ger 8

我一直在努力实现类似的目标;根据选定的配置文件在运行时选择 AWS 配置。我通过破解 AWS SDK 使其部分工作,但后来偶然发现了 AWS SDK 版本2.11.0 的发行说明。引用:

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

我还在此处的放大入门指南中找到了它的记录(!)。

如此以来,2019年9月9日这IS可以选择在运行时的AWS配置。


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

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

...看起来很有希望。


Mar*_*ler 0

这可以通过源集来完成;例如。目录main&debug或目录debug& release,其中res/rawassets不被 AAPT2 处理。添加类似的凭据仅建议内部使用,因为它们可以轻松地从包中提取。