Динамическая доставка функционального модуля во время установки в зависимости от страны пользователя

Я пытаюсь использовать преимущества динамической доставки во время установки с учетом условий для конкретной страны. В соответствии с этим документом Google Play предоставляет возможность предоставлять условия в зависимости от страны. Чтобы использовать это, я создал 2 функциональных модуля, кроме базового.

Модуль 1. Этот модуль имеет реализацию, специфичную для Филиппин. Поэтому я изменил манифест этого модуля, чтобы он выглядел примерно так:

<dist:module
        dist:instant="false"
        dist:title="@string/title_dynamicfeature">
    <dist:delivery>
        <dist:install-time>
            <dist:conditions>
                <dist:user-countries dist:include="true">
                    <dist:country dist:code="PH" />
                </dist:user-countries>
            </dist:conditions>
        </dist:install-time>
    </dist:delivery>
    <dist:fusing dist:include="true" />
</dist:module>

Модуль 2: Этот модуль имеет реализацию, специфичную для Мексики. Поэтому я изменил манифест этого модуля, чтобы он выглядел примерно так:

<dist:module
        dist:instant="false"
        dist:title="@string/title_dynamicfeature">
    <dist:delivery>
        <dist:install-time>
            <dist:conditions>
                <dist:user-countries dist:include="true">
                    <dist:country dist:code="MX" />
                </dist:user-countries>
            </dist:conditions>
        </dist:install-time>
    </dist:delivery>
    <dist:fusing dist:include="true" />
</dist:module>

В базовом модуле (приложении) я написал код для получения реализации для конкретной страны с использованием отражения, предполагая, что одновременно применима только одна страна. Код такой -

private fun provideSharedFeature(): SharedFeature {
    val sharedFeatures = arrayOf(
        getClassInstance("com.jai.dynamicfeature.SharedFeaturePH"),
        getClassInstance("com.jai.dynamicfeature.SharedFeatureMX")
    ).filterNotNull()
    if (sharedFeatures.size > 1) {
        throw IllegalStateException("More than one feature module installed")
    } else if (sharedFeatures.isEmpty()) {
        throw IllegalStateException("No feature module installed")
    }

    return sharedFeatures[0]
}

Этот код отлично работает, когда я запускаю локально, поскольку какой модуль для сборки необходимо указать в конфигурации сборки, но это не удается, когда я загружаю приложение с помощью Google Play. Приложение вылетает с сообщением"No feature module installed" что означает, что ни один из модулей не предоставляется.

Есть ли другой способ добиться этого?

1 ответ

Разве ты не должен поставить if (sharedFeatures.size > 0)? У вас может быть только MX или PH. Во-вторых, в какой стране находится платежный адрес вашего тестового устройства?

Другие вопросы по тегам