JivoChat / JivoSDK-Android

The Jivo Mobile SDK allows you to embed the Jivo chat into your Android mobile applications to receive customer requests
https://www.jivochat.com
10 stars 5 forks source link

Набор проблем React-Native (документация/ некорректная работа / падения) #74

Open JerakRus opened 2 weeks ago

JerakRus commented 2 weeks ago

Коллеги приветствую. Обновляли собственное приложение на React-Native до версии 0.74.5, и всплыла необходимость обновить и JivoSDK т.к. более старая версия перестала работать. В процессе обновления обнаружилось несколько моментов, которые я вам здесь и собрал.

1) При переходе с версии 2.2.1 на 2.2.2, был изменен способ подключения, и без переписывания большой части кода интеграции SDK не работало. Это неожиданно, потому что это изменение версии патча, что не соответсвует semver и у многих стоит на автомате предполагая что обновление будет безопасным. Просьба указывать такие вещи как "BREACKING CHANGES" в заметках к релизу и желательно делать мажорные изменения версии пакета.

2) В документации по настройке интеграции в примерах, например в MainApplication - написан код использующий различные классы (Config, TaskStackBuilder, PendingIntent и т.д.) но при этому не указаны импорты к этим классам. Найти некоторые зависимости и правильно импортировать, особенно если ты не очень силен в нативном коде - занимает много времени. Хорошо бы если бы эти импорты были сразу в примерах. MainApplication не единственное место, в других примерах тоже стоит проверить импорты.

3) React-Native уже несколько версий как полностью перешел на Kotlin в нативном коде, и было бы здорово если бы вы свою документацию тоже переписали на Kotlin. Правда кажется там могут быть проблемы, потому что я попытался переписать код из примеров на Kotlin и при компиляции приложения всплывают ошибки типов не дающие собрать apk. А если ошибки подавить, то все равно потом приложение крашится. Стоит так же проверить работоспособность SDK при интеграции в Kotlin по инструкции для RN.

4) Большая часть RN приложений работают в 1 единственном MainActivity и все навигации внутри осуществляются на стороне JS. При интеграции вашего SDK - мы добавляем еще одно SdkChatActivity. Так вот, при открытии этого активити внутри приложения и дальше при выходе из чата - изначальное корневое активити сбрасывается к начальному состоянию (скорее всего оно просто пересоздается заново). Т.е. мы не можем создать понятный ui для пользователя с историей переходов и возможностью вернутся назад по истории перемещений. В предыдущих версиях SDK такой проблемы не было (мы использовали 2.1.1). Предполагаю что изменили архитектуру подключения и нужны доработки на стороне нашего приложения, но нужна инструкция как это сделать. (Так же прошу учесть, что приложения содержат много функционала помимо jivo и многим важен размер: т.е. не хотелось бы тянуть дополнительно объемную библиотеку нативной навигации для одного перехода. Например наше универсальное apk и так весит около 300 мб.)

5) При попытке добавить "Вложение" в чат, приложение вызывает ошибку и падает.

Версия SDK - 2.3.2. Устройство на видео: Xiaomi 13T.

С уважением, Алексей Строителев из inSales.

https://github.com/user-attachments/assets/a683d7a7-d049-46cf-a0a6-1deeceea5b3f

https://github.com/user-attachments/assets/91b8bdea-6f7c-4fe3-ab20-476e4562edad

photo_2024-08-23 17 09 49 photo_2024-08-23 17 09 53

tavtorkin-jivo commented 2 weeks ago

Здравствуйте коллеги! Спасибо за подробный фидбэк.

  1. Постараемся максимально придерживаться правилам версионирования.
  2. Обновим документацию и добавим необходимые импорты.
  3. Изучим этот вопрос и постараемся реализовать демо и предоставить в публичном доступе.
  4. Предлагаю более детально разобрать вопрос.
  5. Проверим данный кейс.
JerakRus commented 2 weeks ago

По 4 вопросу напишите чего не хватает, постараюсь все предоставить.

JerakRus commented 2 weeks ago

Так, кажется у меня удалось заставить 4 пункт работать! Взяв из документации по RN эту часть MainApplication.java:

.setOnBackPressed(fragment -> {
    if (fragment != null) {
        FragmentActivity a = fragment.getActivity();
        if (a != null) {
            a.finish();
        }
    }
    return Unit.INSTANCE;
})

Найдя в примерах для нативной интеграции из App.kt:

Jivo.setConfig(
    Config.Builder()
        .setWelcomeMessage(R.string.welcome)
        .setOnBackPressed {
            activity?.supportFragmentManager?.beginTransaction()?.remove(this)?.commit()
        }
        .build()
)

Я объединил и получил в MainApplication.kt:

Jivo.setConfig(
    Config.Builder()
         .setOnBackPressed { activity?.finish() }
         .build()
    )

Что заработало как нужно, теперь при выходе из интеграции возвращается в то место приложения, из которого я переходил в JivoChat. Так что кажется пункт 4 тоже относится к проблемам неактуальной документации по интеграции

JerakRus commented 2 weeks ago

5 пункт нашли как починить. В нашем приложении была зафиксирована зависимость для более старой версии implementation "androidx.appcompat:appcompat:1.3.1". Поднятие до последней стабильной 1.7.0 решило проблему. Думаю тоже стоит указать в документации, что она используется.

JerakRus commented 2 weeks ago

Так ну и на последок, еще пукт 6. В релизной сборке столкнулись с такой ошибкой краша приложения при попытке открыть Jivo, а после исправления навигации она стала проявлятся сразу при старте приложения:

Снимок экрана 2024-08-27 в 18 45 39

Проблема в ProGuard, опять же те настройки которые предложены в документации не работают, а всю часть для retrofit2 стоит заменить на следующие и получить итоговый конфиг для Jivo в proguard-rules.pro:

-if interface * { @retrofit2.http.* public *** *(...); }
-keep,allowoptimization,allowshrinking,allowobfuscation class <3>
-keep,allowobfuscation,allowshrinking class com.jivosite.sdk.model.** { *; }
-keep,allowobfuscation,allowshrinking class com.jivosite.sdk.network.** { *; }

Это решает проблему и релиз работает нормально.

В общем с нетерпением ждем исправлений и надеемся что к следующей нашей потребности в обновлении у вас получится обновить документацию. Сейчас качественная актуальная документация сэкономила бы нам 2 дня жизни. Еще раз заранее спасибо!