Миграция на версию 6.0.0
При миграции приложения с com.yandex.android:mobmetricalib
на io.appmetrica.analytics:analytics
будут сохранены основные идентификаторы и данные, то есть процесс перехода на новую версию не должен вызвать проблем и аномалий в отчетах.
Одновременное использование двух версий AppMetrica SDK
Переименованы группа и названия основных артефактов, поэтому в одном приложении могут использоваться сразу две версии AppMetrica SDK: com.yandex.android:mobmetricalib
и io.appmetrica.analytics:analytics
. Это может произойти в некоторых случаях.
1. Среди зависимостей приложения будут прописаны зависимости сразу от двух разных версий AppMetrica SDK
Внимание
Категорически не рекомендуется одновременная работа в коде приложения с com.yandex.android:mobmetricalib
и io.appmetrica.analytics:analytics
с одним API_KEY
. То есть нельзя одновремено активировать YandexMetrica
и AppMetrica
с одним API_KEY
. Это не приведет к сбоям и крешам в приложении, но вызовет искажение и нарушение статистики. При миграции на io.appmetrica.analytics:analytics
проверьте, что среди зависимостей приложения нет зависимости от com.yandex.android:mobmetricalib
, а в коде приложения отсутствуют импорты классов из пакета com.yandex.metrica
.
2. Одна из зависимостей приложения будет транзитивно затягивать зависимость от AppMetrica SDK
Если приложение и библиотеки используют разные API_KEY, данная ситуация является возможной, но нежелательной. Статистика должна собираться нормально, хотя допустимы небольшие отклонения. В этом случае возможно некоторое увеличение размера приложения, так как в составе приложения AppMetrica будут присутствовать два SDK, вместо одного.
Совместимость AppMetrica SDK и AppMetrica Push SDK
При поднятии версии AppMetrica SDK до 6.0.0 рекомендуется использовать AppMetrica Push SDK 2.3.3, которая имеет поддержку и com.yandex.android:mobmetricalib
, и io.appmetrica.analytics:analytics
.
Руководство по миграции
Руководство содержит примеры, демонстрирующие различия между версиями SDK версий 5.3.0
и 6.0.0
. В разделе рассматриваются только те методы, в которых нарушена обратная совместимость.
Для миграции на новую версию выполните следующие шаги:
- Поменяйте зависимость
com.yandex.android:mobmetricalib:5.3.0
наio.appmetrica.analytics:analytics:6.0.0
. - В коде проекта замените те классы и методы, которые были просто переименованы или поменяли только пакет. Необходимые изменения указаны в разделе про переименование классов.
- Код с остальными ошибками временно закомментируйте, чтобы проект можно было собрать.
- Убедитесь, что используется только новая версия AppMetrica с помощью инструкции в соответствующем разделе.
- Если используется плагин из
com.yandex.android:appmetrica-build-plugin
, обновите его версию до указанной в соответствующем разделе. - Поменяйте exclude правила, если они имелись. Необходимые изменения указаны в разделе про переименование зависимостей.
- Исправьте закомментированный код, используя остальные пункты данной инструкции. При возникновении вопросов напишите в поддержку.
Переименованные классы
- Пакет
com.yandex.metrica
заменен наio.appmetrica.analytics
. - Пакет
com.google.protobuf.nano.ym
заменен наio.appmetrica.analytics.protobuf.nano
в проектеanalytics-proto
. - Класс
YandexMetrica
переименован вAppMetrica
.reportNativeCrash
удален.requestAppMetricaDeviceID
удален. ИспользуйтеrequestStartupParams
.setStatisticsSending
переименован вsetDataSendingEnabled
.setLocationTracking(Context, boolean)
удален. ИспользуйтеsetLocationTracking(boolean)
.
- Класс
YandexMetricaConfig
переименован вAppMetricaConfig
.Builder#withStatisticsSending
переменован вBuilder#withDataSendingEnabled
.
- Класс
YandexMetricaDefaultValues
переименован вAppMetricaDefaultValues
. - Класс
MetricaService
переименован вAppMetricaService
. - Класс
IMetricaService
переименован вIAppMetricaService
. - Класс
YandexMetricaPlugins
переименован вAppMetricaPlugins
. - Интерфейс
IReporter
setStatisticsSending
переименован вsetDataSendingEnabled
.
- Интерфейс
ReporterConfig
Builder#withStatisticsSending
переменован вBuilder#withDataSendingEnabled
.
Переименованные зависимости
- Модуль
com.yandex.android:mobmetricalib-ndk-crashes
переименован вio.appmetrica.analytics:analytics-ndk-crashes
. Поддерживается только версия 3.0.0 и выше. - Модуль
com.yandex.android:mobmetricalib-identifiers
переименован вio.appmetrica.analytics:analytics-identifiers
.
Как убедиться, что используется только новая версия
Так как название библиотеки было изменено, возможен вариант, когда будет одновременно использоваться и старая, и новая AppMetrica. Это может привести к странному поведению. Для исключения таких случаев убедитесь, что старая AppMetrica не используется в приложении.
Проверить, что в проекте не используется зависимость от com.yandex.android:mobmetricalib
можно, используя команду:
./gradlew :app:dependencies
Эта команда выведет зависимости всех вариантов сборки приложения. После этого необходимо посмотреть где используется com.yandex.android:mobmetricalib
и заменить на новую зависимость.
Если все сделано правильно, то будет пустой ответ после вызова команды:
./gradlew app:dependencies | grep com.yandex.android:mobmetricalib
Совместимость с версиями крэш-плагина
Важно
Плагин поменял название артефакта.
Для корректной работы десимволикации крэшей необходимо использовать крэш-плагин версии не ниже io.appmetrica.analytics:gradle:0.8.2
.
Исключение зависимостей
Интеграция библиотеки для получения рекламных идентификаторов
Для получения рекламных идентификаторов AppMetrica SDK использует отдельную библиотеку io.appmetrica.analytics:analytics-identifiers
. Эта библиотека содержит зависимость от com.google.android.gms:play-services-ads-identifier:18.0.1
, которая используется для получения GAID. Версия библиотеки io.appmetrica.analytics:analytics-identifiers
должна соответствовать версии библиотеки io.appmetrica.analytics:analytics
.
Эта зависимость добавляется по умолчанию.
Если получение рекламных идентификаторов нежелательно (например, для детских приложений), исключите библиотеку в файле build.gradle
проекта:
configurations.configureEach {
exclude(group = "io.appmetrica.analytics", module = "analytics-identifiers")
}
configurations.configureEach {
exclude group: 'io.appmetrica.analytics', module: 'analytics-identifiers'
}
Интеграция библиотеки для получения локации
Для получения локации AppMetrica SDK использует отдельную библиотеку io.appmetrica.analytics:analytics-location
. Эта библиотека содержит зависимость от com.google.android.gms:play-services-location:19.0.1
, которая используется для получения локации. Версия библиотеки io.appmetrica.analytics:analytics-location
должна соответствовать версии библиотеки io.appmetrica.analytics:analytics
.
Эта зависимость добавляется по умолчанию.
Если получение локации нежелательно, исключите библиотеку в файле build.gradle
проекта:
configurations.configureEach {
exclude(group = "io.appmetrica.analytics", module = "analytics-location")
}
configurations.configureEach {
exclude group: 'io.appmetrica.analytics', module: 'analytics-location'
}
Миграция метода requestAppMetricaDeviceID
Метод YandexMetrica.requestAppMetricaDeviceID
был удален. Вместо него используйте метод AppMetrica.requestStartupParams
.
Важно
Запрашивать нужно именно ключ StartupParamsCallback.APPMETRICA_DEVICE_ID_HASH
, а не StartupParamsCallback.APPMETRICA_DEVICE_ID
, так как по ключу StartupParamsCallback.APPMETRICA_DEVICE_ID
вернется иной идентификатор.
val startupParamsCallback = object : StartupParamsCallback {
override fun onReceive(
result: StartupParamsCallback.Result?,
) {
val deviceIdHash = result?.deviceIdHash
// ...
}
override fun onRequestError(
reason: StartupParamsCallback.Reason,
result: StartupParamsCallback.Result?,
) {
// ...
}
}
AppMetrica.requestStartupParams(
this,
startupParamsCallback,
listOf(StartupParamsCallback.APPMETRICA_DEVICE_ID_HASH)
)
StartupParamsCallback startupParamsCallback = new StartupParamsCallback() {
@Override
public void onReceive(@Nullable Result result) {
if (result != null) {
String deviceId = result.deviceId;
String deviceIdHash = result.deviceIdHash;
String uuid = result.uuid;
}
}
@Override
public void onRequestError(@NonNull Reason reason, @Nullable Result result) {
// ...
}
};
AppMetrica.requestStartupParams(
this,
startupParamsCallback,
Arrays.asList(StartupParamsCallback.APPMETRICA_DEVICE_ID_HASH)
);
Удаление deprecated метода Revenue#newBuilder(double, Currency)
- Метод
Revenue#newBuilder(double, Currency)
был@deprecated
и теперь удален. Вместо него стоит использоватьRevenue#newBuilder(int, Currency)
, гдеint
- предполагает использованиеrevenueMicros
. - Метод
Revenue#newBuilderWithMicros(int, Currency)
был переименован вRevenue#newBuilder(int, Currency)
.
Если вы не нашли ответ на свой вопрос, то вы можете задать его через форму обратной связи. Пожалуйста, опишите возникшую проблему как можно подробнее. Если возможно, приложите скриншот.