Итак, я какое-то время работал над проектом в стиле white label и столкнулся с проблемой расширяемости. В частности, как работает проект, я должен иметь возможность поддерживать несколько сред бэкэнда, каждая с уникальными учетными данными, для каждого клиента.
Я запек это поведение в gradle, используя два измерения вкуса один для клиента и один для бэкэнда, но у меня возникли некоторые проблемы с тем, чтобы заставить их склеиваться так легко, как хотелось бы.
Вот пример настройки gradle:
productFlavors {
client1 {
applicationId "com.app.client1"
dimension "customer"
resValue "string", "app_name", "Client 1"
}
client2{
applicationId "com.app.client2"
dimension "customer"
resValue "string", "app_name", "Client 2"
}
dev {
ext {
packageExtension = ".DEV"
}
dimension "environment"
resValue "string", "url", "https://dev.hostname.com/"
}
uat {
ext {
packageExtension = ".UAT"
}
dimension "environment"
resValue "string", "url", "https://uat.hostname.com/"
}
stage {
ext {
packageExtension = ".STAGE"
}
dimension "environment"
resValue "string", "url", "https://stg.hostname.com/"
}
prod {
ext {
packageExtension = ""
}
dimension "environment"
resValue "string", "url", "https://hostname.com/"
}
}
Это прекрасно подходит для предоставления доступа к нужной среде и уникальному коду для каждого клиента, но это означает, что я не могу включить идентификатор клиента в Gradle. Я должен вставить его в файл ресурсов в каталоге client1Dev и т. П., Чтобы получить правильное значение во время выполнения.
У меня вопрос, есть ли способ переместить идентификатор клиента в gradle и получить правильное значение, основанное на сочетании вкусов клиента и среды?
Например, я хотел бы сделать что-то вроде:
client1 {
applicationId "com.app.client1"
dimension "customer"
resValue "string", "app_name", "Client 1"
dev{
resValue "string", "clientId", "1032145d8eefa00aff0098b08c9d"
}
uat{
resValue "string", "clientId", "8654684561584798531985964/56"
}
}
client2{
applicationId "com.app.client2"
dimension "customer"
resValue "string", "app_name", "Client 2"
dev{
resValue "string", "clientId", "89612ad8967a00aff0098b08c08e"
}
uat{
resValue "string", "clientId", "8612ad890981237409d0ab08c08f"
}
}
Что-то в этом духе, что позволило бы мне сохранить мой идентификатор клиента в файле Gradle вместе с другой информацией о настройке бэкэнда. Я ничего не могу найти о таких вещах, хотя, и я надеюсь, что кто-то здесь может пролить свет на то, как это сделать, или, по крайней мере, сказать мне, что это невозможно.
Спасибо!