SDK на основе React native

#android #ios #react-native #sdk #react-android

#Android #iOS #react-native #sdk #react-android

Вопрос:

Я пытаюсь создать SDK на основе react, (т.Е.) У меня будет пакет Android / iOS, который станет точкой входа для приложения и будет использовать код react для использования существующей бизнес-логики. Я могу видеть React AppRegistry.registerComponent в качестве точки входа для приложения react. Но для моего варианта использования у меня нет никакой зависимости от просмотра. У меня есть только бизнес-логика. Как я должен создать пакет?

В Android и iOS я буду писать скрипт для копирования и вставки пакета, созданного с использованием этого пакета RN, в папку ресурсов, и оттуда я буду использовать это index.bundle для создания ReactInstanceManager

Пожалуйста, помогите мне понять, будет ли эта тренировка (SDK на основе React без компонентов просмотра). Что мне нужно сделать для создания этого SDK.

Примечание: Этот SDK может быть интегрирован в существующее приложение, которое уже имеет зависимость от react-native для рендеринга некоторых экранов. Мой SDK также должен обрабатывать этот вариант использования.

Комментарии:

1. Неясно, чем ваша проблема отличается от использования библиотеки в качестве SDK.

2. Обычным способом мы добавим зависимость на стороне iOS / Android, а также добавим зависимость пакета на стороне пакета react-native. Мой вариант использования заключается в том, что SDK может использоваться моим клиентским приложением, которое не зависит от react (без экранов рендеринга react), но все же я создам экземпляр ReactInstanceManger с помощью пакета, который я создал внутри SDK, и приложение может использовать api SDK для выполнения некоторой бизнес-логики на стороне reactи извлеките результат.

3. Если клиентское приложение не зависит от React Native, то вы вынуждаете своих клиентов, разработчиков приложений, включать React Native, что является сложным процессом. Если вы хотите, чтобы SDK был принят большим количеством разработчиков (React Native, Flutter, Xamarin, Cordova, Ionic), то обычно SDK написан на родном Java / Kotlin и / или ObjC / Swift. Поскольку каждая сторонняя платформа framework имеет собственные соединители, которые будут использоваться для связи с SDK. Смотрите Примеры рекламных SDK, таких как Admob или Facebook Audience.

4. Я знаю об этом. У меня есть требование для 2P, а не 3P (сторонний клиент). Мне любопытно, возможно ли реализовать то, что я упомянул в этом вопросе.

5. Итак, допустим, если приложение ios использует ваш sdk, оно будет использовать вашу библиотеку в качестве фреймворка, я полагаю, и ваш фреймворк будет использовать react native внутри. Это правильное понимание?

Ответ №1:

Вам может не понравиться мой ответ, но имейте в виду, что последние пару лет я работал над несколькими сложными проектами на основе react. Итак, я говорю по опыту.

1. — Это ужасная идея. 2.- Также возможно.

Почему это ужасная идея? A) Потому что вы будете использовать полный размер react-native в приложении, независимо от использования. Б) Потому что react-native — это механизм рендеринга (и очень дорогостоящий). Не предназначен для использования без головы. У него нетривиальное время запуска, поэтому ваш SDK не будет доступен сразу после запуска приложения. По умолчанию ReactActivity останавливает движок JS, как только что-то закрывает пользовательский интерфейс (например, диалоговое окно разрешения), что приводит к интересным и забавным проблемам, если ваш SDK должен вызываться одновременно. Модель объединения по своей конструкции предполагает большую задержку. Зависимости от react-native могут не совпадать с зависимостями из приложения, что приводит к еще одному множеству проблем. Злоумышленникам гораздо легче читать, поскольку это большой скрипт, который может переформатировать любая среда разработки. И в зависимости от того, что должен делать ваш SDK, вам может потребоваться написать более сложную кучу собственного кода. Этапы сборки потребуют от пользователя использования yarn / npm для сборки приложения, если у вас есть зависимости от JS, и заставят потребителя интегрировать хакерские шаги gradle от react-native (и в их инструменты CI тоже). Если библиотека react-native вызывает у вас проблемы, вам придется ее исправить. Итак, много шансов на неприятности.

Тем не менее, вы можете создать пакет JS из любого файла, который вы хотите, используя команды объединения (react-native bundle). Таким образом, вы можете упаковать функции JS, отличные от пользовательского интерфейса, и загружать их непосредственно в ReactActivity. Если пользовательское приложение не должно обращать внимания на процесс, вам нужно будет создать базовое действие и базовое приложение, загрузить Catalyst, передать свой пакет в reactInstance, загрузить его, а также создать JVM (kotlin / java) API, предоставляющий singleton или что-то подобное, который отправляеткоманды с использованием эмиттера. И это всего лишь Android. iOS будет иметь аналогичный путь, но с дополнительными сложностями интеграции вашего SDK через xCode.

Я бы порекомендовал вам, пройдя через это, избавить себя от лишних хлопот и вместо этого попробовать использовать мультиплатформенный kotlin. Предназначен для такого сценария, Android работает «из коробки», а интеграция объектных C-фреймворков с xCode намного проще и не заставляет потребителя делать что-то странное. И будет работать намного лучше, бесплатно.

Комментарии:

1. Я не уверен, почему это было отклонено. В аналогичной ситуации со стороны iOS и мои исследования дали аналогичные результаты. Спасибо за подробное описание и объяснение.