我想为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"
}
}
}
更新
通过将不同的文件放在awsconfiguration.json
和main\res\raw
中,可以选择使用不同的release\res\raw
,例如,遵循此answer即可使用。
但是我想知道是否可以通过编程方式进行选择。
答案 0 :(得分:5)
也可以通过在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"
}
}
}
答案 1 :(得分: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
对象
...看起来很有希望。
答案 2 :(得分:1)
这可以通过source sets完成;例如。 APT2未处理main
和debug
目录或debug
和release
的目录res/raw
或assets
。添加仅建议内部使用的凭据,因为可以轻松地从软件包中提取它们。
答案 3 :(得分:-1)
Abhishek的答案是我最喜欢的答案。但是,如果您使用的是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)