Положения и условия | LEROY MERLIN Южная Африка
1. Введение
1.1 Настоящие Условия применяются, когда вы, как клиент, покупаете какой-либо продукт или услугу в Leroy Merlin в магазине или в Интернете, и представляет собой действительное и обязывающее соглашение между вами и Leroy. Мерлин.
1.2 Используя наши Помещения или Веб-сайт или приобретая любой из наших Продуктов или Услуг, вы соглашаетесь соблюдать настоящие Условия без изменений.
Действие этого пункта заключается в том, что при использовании Веб-сайта или покупке товаров или услуг у нас предполагается, что вы прочитали и поняли настоящие Условия и согласны их соблюдать.
1.3 Если у вас есть какие-либо вопросы относительно настоящих Условий, свяжитесь с нами по телефону [email protected] .
2. Определения
2.
2.2 Закон ДЭХ означает Закон об электронных коммуникациях и транзакциях 2002 года;
2.3 Прокладка имеет значение, указанное в пункте 10;
2.4 Leroy Merlin означает Adeo South Africa Proprietary Limited, действующую как Leroy Merlin;
2.5 Помещения означает любые помещения, используемые Leroy Merlin для ведения своей деятельности;
2,6 Политика конфиденциальности означает Политику конфиденциальности Leroy Merlin с периодическими изменениями. Последнюю версию можно просмотреть на www.leroymerlin.co.za
2.7 Продукт означает любой продукт, продаваемый Leroy Merlin покупателям в любом из своих Магазинов или на нашем Веб-сайте;
2. 8 Услуга означает любую услугу, которую вы можете приобрести у нас в магазине. Часть услуг будет оказываться Леруа Мерлен напрямую, а часть услуг может оказываться третьими лицами.
2.9 Особые заказы означает любую Услугу или Продукт, которые приобретаются, создаются, персонализируются или изменяются специально для удовлетворения ваших требований;
2.10 Магазин означает любой магазин Leroy Merlin в Южной Африке;
2.11 Условия означает настоящие общие положения и условия, в которые Leroy Merlin может время от времени вносить поправки. Последние Условия будут опубликованы на www.leroymerlin.co.za;
2.12 Нас и мы означает Леруа Мерлен;
2.13 Вы означает клиентов Leroy Merlin ; и
2. 14 Веб-сайт означает www.leroymerlin.co.za.
ВАЖНОЕ ЗАМЕЧАНИЕ:
Если CPA применяется к вам как к потребителю, некоторые условия, которые ограничивают ваши права, возлагают на вас ответственность или требуют от вас подтверждения фактов, выделены жирным шрифтом, чтобы специально привлечь ваше внимание к эти оговорки. Эти пункты важны и должны быть внимательно прочитаны, и вы должны убедиться, что вы полностью понимаете, что они означают.
3. Личная информация
3.1 Во время взаимодействия между вами и Leroy Merlin Leroy Merlin может собирать и обрабатывать вашу личную информацию (как это определено в Законе о защите личной информации 2013 г.). В определенных обстоятельствах предоставление вашей личной информации может быть необходимо для покупки товаров, использования наших услуг или доступа к нашему Веб-сайту.
3.2 Дополнительную информацию о том, что мы делаем и как мы защищаем вашу личную информацию, можно найти в нашей Политике конфиденциальности.
4. Продукты и услуги
4.1 Мы приложили все усилия, чтобы информация о наших Продуктах, отображаемая в Магазине, в наших рекламных материалах, на нашем Веб-сайте или в любой другой форме связи с вами, была точный.
4.2 Несмотря на то, что мы делаем все возможное, чтобы изображение, представляющее Продукт, функции, описания и спецификации, относящиеся к Продукту, были правильными, внешний вид Продукта может меняться, так как упаковка может меняться с течением времени. , или представление цвета в маркетинговых материалах может зависеть от носителя, на котором отображается изображение.
4.3 Если мы обнаружим непреднамеренную и очевидную ошибку в описании, цене или изображении Продукта, мы не будем обязаны предоставлять вам затронутый Продукт. Мы исправим и уведомим вас о любых ошибках, как только это будет практически целесообразно.
4.4 Вы несете ответственность за то, чтобы полученный вами Продукт был правильным Продуктом, выбранным или заказанным.
4.5 Если вы не удовлетворены приобретенным Продуктом, вы можете вернуть его нам в соответствии с положениями о возврате и возмещении в настоящих Условиях.
4.6 Если Услуга предоставляется третьей стороной, мы, тем не менее, можем выставить вам счет за их услуги, чтобы обеспечить единое контактное лицо и обеспечить беспроблемный путь клиента. Однако обратите внимание, что, когда Услуги предоставляются третьей стороной (даже если мы выставляем вам счет напрямую), мы не будем нести ответственность по обязательствам третьей стороны — вы будете иметь претензии только непосредственно к поставщику услуг.
4.7 Если вы не удовлетворены оказанными нами услугами, свяжитесь с нами, и мы сделаем все возможное, чтобы решить любые проблемы.
4.8 Мы оставляем за собой право время от времени прекращать или изменять спецификации наших Продуктов и Услуг без предварительного уведомления.
5. Цены и наличие
5.1 Запас товара зависит от его наличия.
5.2 Цены, отображаемые в Магазине, на Веб-сайте, во всех сообщениях и в маркетинговых материалах, являются правильными на момент такого отображения и при просмотре вами.
5.3 Мы можем ограничить количество любого Продукта, который вы можете приобрести в магазине или на нашем Веб-сайте во время рекламных акций. Любые такие ограничения будут четко указаны.
5.4 Все цены, указанные на нашем веб-сайте, указаны в южноафриканских рандах и действительны только в Южно-Африканской Республике.
5.5 Все указанные цены включают НДС.
5.6 Мы оставляем за собой право изменять отображаемую цену, однако с вас будет взиматься указанная цена, если только в цене нет очевидной и непреднамеренной ошибки.
5.7 Перечень всех ошибок печати, связанных с отображаемыми или рекламируемыми ценами или наличием Продукта, будет размещен на входе в каждый Магазин.
5.8 Мы не резервируем Продукты для клиентов, за исключением случаев, когда мы получили предоплату в размере 50 %, если вы заключили с нами договор об отсрочке, или когда Продукты требуются для установки, доставки или оказания Услуг. выполненный.
6. Оплата
6.1 Продукты или Услуги, приобретенные вами, должны быть полностью оплачены, прежде чем мы предоставим Продукты или Услуги.
6.2 Вы можете оплатить Товары или Услуги в Магазине наличными или кредитной/дебетовой картой.
6.3 Покупки в Интернете должны быть оплачены кредитной картой или электронным переводом средств (EFT). Заказы, оплаченные с помощью EFT, будут обработаны только после того, как платеж будет отражен на нашем банковском счете, что может занять до семи рабочих дней.
7. Специальные заказы
7.1 Для обработки специальных заказов требуется минимальный депозит в размере 50%.
7.2 Мы оставляем за собой право взимать плату за отмену в размере до 100 % от депозита, если вы отменяете Специальный заказ, когда работа над заказом уже началась.
8. Покупки через веб-сайт
8.1 Чтобы заказать Продукт онлайн, вам потребуется зарегистрировать профиль. Регистрация на нашем Веб-сайте не обязывает вас заказывать какой-либо Продукт.
8.2 Для регистрации вам потребуется предоставить определенную информацию, включая личные данные, данные платежной карты и адрес доставки. При регистрации вам потребуется выбрать идентификатор пользователя и пароль, пожалуйста, держите пароль в тайне. Мы не несем ответственности за какой-либо ущерб или убытки, понесенные в результате использования вашего пароля кем-либо, кроме вас, поскольку вы несете ответственность за обеспечение безопасности вашего пароля.
8.3 Если другое лицо использовало вашу учетную запись для покупки Продукта без вашего согласия, вы должны уведомить нас в течение 24 часов.
8.4 Вам потребуется вводить свой идентификатор пользователя и пароль каждый раз, когда вы посещаете наш сайт онлайн-покупок.
*Чтобы изменить какие-либо регистрационные данные, нажмите «Учетная запись» и отредактируйте свои данные.
8.5 Отправляя заказ онлайн, вы:
- подтверждаете, что вам исполнилось 18 лет и вы обладаете дееспособностью для совершения сделок с нами;
- подтверждает, что для выполнения вашего заказа мы будем передавать вашу личную информацию третьим лицам, таким как ваш банк и наша курьерская служба, нанятая по контракту, только в той мере, в какой это необходимо; и
- соглашаетесь с тем, что мы расследуем любой заказ и подтверждаем любую предоставленную вами информацию в целях предотвращения мошенничества.
8.6 Ваш договор купли-продажи с нами вступает в силу только после того, как мы примем и отправим ваш заказ. Вы получите уведомление от нас, как только ваш заказ будет обработан и принят.
8.7 Все продукты, представленные на нашем веб-сайте, предоставляются в зависимости от наличия и будут доставлены только в пределах Южно-Африканской Республики.
9. Сбор и доставка
9.1 Заказы будут доставлены после обработки и получения нами полной оплаты.
9.2 Мы доставляем Продукты только в Южно-Африканскую Республику. Доставка платная и зависит от удаленности магазина.
9.3 Мы пользуемся услугами стороннего курьера для доставки любых Продуктов, поэтому процесс доставки не полностью находится под нашим контролем. Несмотря на то, что мы делаем все возможное, чтобы обеспечить доставку Продукта в сроки, указанные на Веб-сайте, такое время выполнения является только оценочным.
9.4 Вы несете ответственность за правильность предоставленной вами личной информации, включая адрес доставки. Мы не несем ответственности за доставку по неверному адресу.
9.5 Мы доставим любой заказанный Товар по указанному адресу доставки при условии, что грузовик может безопасно добраться до вашего местоположения (состояние дороги, маневренность и т. д.). В пункте разгрузки все риски переходят к вам, и мы не несем ответственности за хранение, сборку или установку Продукта.
9.6 Вы должны сообщить нам об отсутствии или повреждении Продукта в течение 24 часов.
9.7 При сборе все заказы должны быть собраны в полном объеме. Частичные сборы не допускаются.
9.8 Вы несете ответственность за то, чтобы ваш автомобиль был полностью оборудован и мог вместить весь объем вашего заказа.
9. 9 Мы оставляем за собой право отказать в загрузке любого Продукта на ваш автомобиль при сборе, если мы сочтем, что существует риск для безопасности.
9.10 Вы должны забрать свой заказ в течение 30 календарных дней с даты получения уведомления о том, что ваш заказ готов к выдаче. По истечении этого периода мы оставляем за собой право взимать ежемесячную плату за хранение до 10% от стоимости заказанных Продуктов. Если вы не забрали свой заказ в течение трех месяцев после получения первого уведомления, мы оставляем за собой право отменить ваш заказ и возместить вам покупную цену за вычетом применимых сборов за хранение. Если ваш заказ индивидуальный или специальный заказ, мы оставляем за собой право сохранить полную стоимость покупки.
10. Прокладка
10.1 Мы предлагаем вам услугу, при которой мы резервируем выбранные вами от вашего имени Продукты, которые вы оплачиваете в течение определенного периода времени. Мы сохраняем эти Продукты до тех пор, пока вы не оплатите полную стоимость покупки.
10.2 Вы соглашаетесь:
- заполнить и подписать отдельную форму с указанием Продуктов, которые вы выбрали для покупки в режиме ожидания, покупной цены и интервалов оплаты;
- немедленно внести депозит в размере 20% и производить платежи через согласованные промежутки времени и в размере не менее минимальной суммы, указанной в форме отложенного платежа в Магазине или с помощью электронных переводов, до или в установленный срок;
- вы не имеете права на получение Продуктов до тех пор, пока не будет уплачена полная покупная цена;
- , что вы не являетесь владельцем Продуктов до тех пор, пока не будет уплачена полная покупная цена, до этого времени Продукты остаются на наш риск;
- , что настоящие положения и условия, а также подписанная вами форма о приостановке составляют полное соглашение между нами для целей приостановки;
- о том, что если ставка НДС в отношении Продуктов, зарезервированных для вас в рамках возможности отложенного хранения, изменится в любое время до того, как вы оплатите полную покупную цену, мы будем иметь право взыскать с вас увеличение НДС до поставки или сбор Продуктов;
10. 3 Вы можете выбрать более регулярные платежи и более высокие суммы, чем указано в форме отсрочки.
10.4 Общий срок Простоя составляет 6 (шесть) месяцев, и этот период не может быть продлен.
10.5 Если вы расторгнете договор о приостановке до уплаты полной покупной цены или не оплатите товар в полном объеме в течение 30 (тридцати) рабочих дней после даты окончательного платежа, указанной в форме о приостановке , мы:
- может взимать штраф в размере 1% от полной покупной цены Продуктов;
- вы можете запросить письменные данные о том, как был рассчитан штраф; и
- возместит любые суммы, уплаченные вами в рамках услуги «Приостановка», после того, как мы вычтем штраф за расторжение договора;
10.6 Мы не будем взимать штраф за расторжение договора, если нам будут предоставлены достаточные доказательства того, что невыполнение платежа было вызвано смертью или госпитализацией.
10.7 Мы можем уведомить вас об отмене задержки по электронной почте или SMS на адрес электронной почты или номер мобильного телефона, который вы нам предоставили.
10.8 Мы предоставим вам выписку по счету по электронной почте и/или SMS. Вы обязаны проверить правильность этого заявления и сообщить нам в течение семи дней после получения, если вы считаете, что заявление неверно.
10.9 Вы обязаны сообщить нам об изменении ваших контактных данных.
10.10 Товары, продаваемые на строительной площадке, и рекламные товары исключаются из списка покупок.
11. Возвраты и возвраты средств
11.1 Возврат товаров Marketplace:
- Товары Marketplace обозначаются индикатором «ДОСТУПНО ТОЛЬКО ОНЛАЙН» 9 0004 и «НЕТ В МАГАЗИНЕ. Это продукт стороннего производителя и нет в наличии в магазине»
- Каждый продавец Marketplace имеет уникальную политику возврата.
Чтобы узнать о политике возврата продуктов Marketplace, ознакомьтесь с Условиями возврата на странице продавца.
- Если для продукта Marketplace требуется возврат средств, возврат будет обработан продавцом Marketplace/сторонним поставщиком после получения продукта и его проверки.
- Магазины Leroy Merlin не осуществляют возврат и возврат средств за товары Marketplace. Товары Marketplace не подлежат возврату в магазины Leroy Merlin.
11.2 Не подлежат возврату следующие Товары:
- товары, которые были настроены в соответствии с вашими требованиями;
- предметов, которые четко персонализированы;
- предметов, поврежденных молнией или иным стихийным бедствием;
- предметов намеренно повреждены или не используются в соответствии с руководством пользователя Продукта; и
- предметов, которые могут быстро испортиться или истечь.
- Растения, деревья, цветы.
11. 3 Продукты, которые не являются дефектными (т.е. «передумали»), могут быть возвращены нам за ваш счет в течение шести месяцев с даты покупки для возмещения или обмена при условии, что:
- у вас есть оригинал подтверждения покупки;
- Товар не использовался;
- Товар находится в оригинальной упаковке;
- Товар находится в товарном состоянии; и
- мы оставляем за собой право взимать плату за пополнение запасов в случае повреждения упаковки.
11.4 В том маловероятном случае, если приобретенный вами Продукт окажется дефектным, вы можете вернуть Продукт в течение шести месяцев с даты покупки.
- Если вы вернете Продукт с дефектом, соответствующий этим требованиям, мы с радостью заменим, вернем деньги или отремонтируем Продукт по вашему выбору.
- Мы оставляем за собой право отправлять Продукты для технической оценки перед заменой, возмещением или ремонтом таких Продуктов.
11. 5 Если вы покупаете Продукты через Интернет , в соответствии с разделом 44 Закона о ДЭХ вы имеете право без объяснения причин и без каких-либо штрафов отменить покупку любых продуктов в течение 7 дней после получения продуктов для Полный возврат. Вы будете нести ответственность за оплату стоимости возврата продуктов.
11.6 В случае возврата, такой возврат будет обработан в соответствии с первоначальным методом оплаты в течение 10 рабочих дней, за исключением сумм наличными свыше 500 рандов, которые будут возвращены электронным переводом или путем выдачи вам ваучера Leroy Merlin. по соображениям безопасности. Возврат EFT может занять до семи рабочих дней, прежде чем он будет отражен в вашем аккаунте. Если вы произвели оплату с помощью электронного платежа, мы можем запросить подтверждение реквизитов вашего банковского счета.
11.7 В случае возврата Продукта мы можем запросить вашу личную информацию, а также причины возврата. Сбор и обработка вашей личной информации будет осуществляться в соответствии с нашей Политикой конфиденциальности.
11.8 Как вернуть товар
- Возврат в магазин
(а) Вы можете вернуть любой товар в надлежащем состоянии в ближайший к Вам магазин Леруа Мерлен вне зависимости от изначально выбранного варианта доставки. Магазины возвращают только вещи в идеальном состоянии. Если ваш товар сломан или имеет дефекты, обратитесь в Контактный центр, который отвечает за организацию возврата вашего товара.
(b) Магазин может направить вас в контактный центр, чтобы помочь вам с возвратом.
- Онлайн-возвраты
(a) Пожалуйста, свяжитесь с контактным центром, чтобы вернуть товар курьером или по почте.
(b) Если продукт, который вы возвращаете, неисправен или сломан, предоставьте нам фотографии повреждений и прикрепите их к контактной форме, которую вам предоставит контактный центр.
(c) Если это посылка небольшого размера, вам будет отправлена этикетка для возврата, которую нужно наклеить на посылку.
Затем вы можете оставить посылку в почтовом отделении и использовать номер, указанный на этикетке, для отслеживания возврата.
(d) В случае тяжелого и/или громоздкого Продукта после регистрации заявки в Контактном центре с вами свяжутся в течение трех рабочих дней для организации получения посылки.
Вам будет отправлено электронное письмо для подтверждения получения товара, возвращенного нашими службами.
12. Политика защиты цен
12.1 Покупатели имеют право на денежный возврат разницы между ценой, которую они заплатили за товар в магазине Leroy Merlin – в обычном магазине или на веб-сайте компании – и его ценой. продается у конкурента.
12.2 Политика ценовой защиты применяется при следующих условиях:
(a) Товар должен быть идентичным, то есть иметь ту же торговую марку, такое же обозначение, такое же описание, тот же цвет, тот же штрих-код.
(b) Исключаются товары по специальным предложениям, акциям и распродажам. Учитываются только обычные цены.
(c) Покупатель должен предоставить Leroy Merlin доказательство лучшей цены, будь то официальное предложение или счет-фактура.
(d) В течение десяти (10) дней с момента покупки товара в магазине Leroy Merlin.
(e) Если цена продажи на конкурсе ниже нашей цены покупки, мы возместим разницу между нашей ценой покупки и нашей ценой продажи.
13. Ограничение ответственности. . Это означает, что у вас не будет претензий к нам, даже если мы проявим небрежность.
13.2 Если мы допустили грубую небрежность, вы не будете предъявлять претензий к любому сотруднику, директору или другому лицу, связанному с Leroy Merlin, непосредственно и лично ответственному за такую грубую небрежность. Ваша единственная возможная претензия — Леруа Мерлен.
13. 3 Мы не несем и не будем нести ответственности за любой ущерб, понесенный вами или вашей собственностью в результате Услуг, оказанных третьей стороной , кроме случаев, когда третья сторона была нанята нами для предоставления Услуги от нашего имени. Вы будете иметь претензии только непосредственно к поставщику услуг.
14. Нарушение
14.1 Если вы нарушаете какое-либо положение настоящих Условий, мы оставляем за собой право прекратить или приостановить любые отношения, существующие между вами и Leroy Merlin, и/или запретить доступ к нашим помещениям/веб-сайту, и/или принять соответствующие юридические меры для возмещения убытков.
14.2 Ни одна из сторон не будет нести ответственность за нарушение любого из настоящих Условий по любому вопросу, находящемуся вне контроля соответствующей стороны. Сюда входят пожары, стихийные бедствия, стихийные бедствия, забастовки, локауты, войны, беспорядки, гражданские волнения, вмешательство правительства или взрыв.
15. Средства правовой защиты
15.1 Если вы считаете, что мы не выполняем свои обещания, данные в настоящих Условиях, или что мы каким-либо образом нарушили ваши права, вы можете направить нам жалобу по электронной почте по адресу contact[email protected]
15.2 При подаче жалобы укажите как можно больше информации, чтобы мы могли решить ее эффективно и быстро. В частности, предоставьте нам следующее:
- ваши полные имена, адрес и контактные данные;
- определить, каким образом мы не соблюдаем эти условия или право, которое предположительно было нами нарушено; N
- изложены обстоятельства и факты, послужившие основанием для предполагаемого нарушения;
- шаги, которые, по вашему мнению, должны быть предприняты нами для устранения предполагаемого нарушения;
- заявление о том, что предоставленная вами информация верна и правдива; и
- заявление о том, что вы действуете добросовестно.
15,3 Мы расследуем все жалобы, соответствующие этим требованиям. По получении результатов расследования мы предпримем все необходимые шаги для исправления ситуации, если это применимо.
16. Изменения Условий
16.1 Leroy Merlin может изменить Условия в любое время, и эти изменения вступят в силу немедленно.
16.2 Последняя версия Условий опубликована на веб-сайте. Вы обязаны регулярно знакомиться с последними Условиями, чтобы убедиться, что вы их понимаете и соблюдаете.
17. Раскрытие информации в соответствии с Законом о ДЭХ
17.1 Доступ к нашему Веб-сайту и его использование могут быть классифицированы как электронные транзакции в соответствии с Законом о ДЭХ, и поэтому у вас есть права, изложенные в Главе 7 Закон об ЭСТ. Следовательно, мы обязаны раскрывать следующую информацию:
Полное имя и юридический статус: | Adeo South Africa Proprietary Limited (регистрационный номер 2016/044487/07) |
Физический адрес: | 35 Roos street, Witkoppen Ext 97, Sandton, Йоханнесбург, 2191 |
Почтовый адрес: | 35 Roos street, Witkoppen Ext 97, Sandton, Йоханнесбург, 2191 |
Номер телефона: | +27 (0) 10 493 8000 |
Адрес электронной почты: | [электронная почта защищена] |
Директора: | Паскаль Бруно Малфой / Филип Франц Лотар Жеромон |
18. Применимое законодательство и юрисдикция
18.1 Эти условия регулируются законодательством Южной Африки.
18.2 И Leroy Merlin, и вы, как клиент, безоговорочно соглашаетесь и подчиняетесь неисключительной юрисдикции местного отделения Gauteng в Йоханнесбурге в отношении всех вопросов, вытекающих из настоящих Условий. Это не лишает вас каких-либо законных прав, которые у вас могут быть, чтобы обращаться в другие органы по разрешению споров в рамках CPA.
19. Делимость
Любое незаконное или неисполнимое положение настоящих Условий может быть отделено, а остальные положения Условий остаются в силе.
20. Мои привилегии лояльности
Рекламная цена (SPECIAL) гарантия на 30 дней
В течение 30 календарных дней с момента покупки мы возместим вам разницу между уплаченной вами ценой и ценой со скидкой.
Легкий возврат
Если вы захотите вернуть товар, вас не попросят предъявить квитанцию, и вам будет предоставлено еще 3 месяца на возврат товара.
Легкая гарантия
Если вы хотите вернуть товар по гарантии, вас не попросят предъявить чек.
Быстрый доступ к услугам
Доступ к дополнительным услугам (доставка, установка, терминал самовыставления счетов) будет облегчен тем, что ваши данные будут немедленно доступны нам, что обеспечит вам быстрый и эффективный клиент опыт.
Льготные предложения и акции
Все акции и предложения доступны только для покупателей с картой лояльности и онлайн-покупателей. Чтобы воспользоваться рекламной деятельностью, перед оплатой проведите пальцем по карте лояльности на кассе. Для онлайн-покупателей создайте онлайн-аккаунт, чтобы воспользоваться рекламными ценами.
Практические примеры: Leroy Merlin | Котлин Мультиплатформенный
Leroy Merlin ↗ помогает людям во всем мире улучшить условия жизни и образ жизни, помогая им проектировать дома их мечты и воплощать их в жизнь.
Мобильное приложение Leroy Merlin помогает покупателям искать товары, совершать покупки в Интернете и находить ближайший магазин.
Решение использовать Kotlin
До 2018 года у Leroy Merlin уже были мобильные приложения для iOS и Android для клиентов. Оба приложения имели нативную реализацию с дублированием доменной логики и очень старый унаследованный код с огромными затратами на управление. Чтобы сделать их более управляемыми, гибкими и экономичными, компания решила их переписать.
Наши приложения были почти идентичны, и ответственность за их переписывание была возложена на мобильную команду, состоящую из 6 инженеров iOS и Android, которые в то время мало делились друг с другом своим опытом, и технического руководителя для управления всей фрагментированной процесс. Это был не масштабируемый поток. Кроме того, у нас было меньше инженеров, чем у типичной команды разработчиков мобильных приложений, а это означало, что нам потребуется больше времени для внесения изменений
У нас было 2 варианта, которые могли помочь нам ускорить процесс: первый — просто нанять больше людей, а второй второй заключался в использовании технологии, которая позволила бы нам обмениваться знаниями и опытом между командами iOS и Android. Мы выбрали второй вариант и начали искать подходящую технологию, помня, что безопасность, качество и стабильность наших приложений имеют первостепенное значение.
Нам потребовалось некоторое время, чтобы найти кроссплатформенное решение с интеграцией пользовательского интерфейса. Это был критический момент, потому что мы хотели использовать полностью общий подход. Мы рассматривали как Flutter, так и React Native. Это был май 2019 года и КММ не был широко известен, поэтому мы его еще не рассматривали.
У нас также есть еще одна команда инженеров, которые разрабатывают внутреннее мобильное приложение для сотрудников компании. Они используют React Native в производстве, так что это была первая технология, на которую мы обратили внимание. Но React Native не оправдал наших ожиданий из-за качества кода. При масштабировании приложения React Native теряет качество, поэтому этот вариант мы не учитывали.
Конечно, мы могли бы создать приложение с помощью Flutter, но, изучив эту технологию глубже, мы обнаружили, что у этого подхода есть две основные проблемы. Первая проблема была с наймом, потому что мало кто знает Dart. Это означало, что проект не будет масштабируемым, потому что у нас возникнут проблемы, если нам понадобится написать какой-то нативный код.
Вторая проблема, которая в конечном итоге более опасна, заключается в том, что и для Android, и для iOS постоянно появляются новые выпуски, новые версии и новые шаблоны проектирования, и более чем вероятно, что между нативным выпуском и его реализацией во Flutter будет разрыв. . Это нормально для использования во внутренних приложениях, но мы не можем использовать этот подход для флагманского приложения, ориентированного на клиента.
Некоторые дальнейшие исследования показали, что было бы лучше не использовать пользовательский интерфейс на разных мобильных платформах. Android и iOS имеют разные рекомендации по пользовательскому интерфейсу, и поддержка этой разницы занимает больше времени, чем просто разработка пользовательских интерфейсов по отдельности.
Мы понимали преимущества кросс-платформенного подхода, и его использование было важно, поскольку другие команды уже создавали внутренние приложения с общей кодовой базой, и наша команда намеревалась обменяться с ними знаниями. Поэтому мы искали подходящее кроссплатформенное решение.
Когда мы впервые услышали о КММ, мы поняли, что это именно тот подход, который мы искали. Он исключает дублирование бизнес-логики, обеспечивая при этом производительность и безопасность собственного пользовательского интерфейса.
Наконец, у нас появилась технология, которая позволила нам совместно использовать бизнес-логику, создавать пользовательские интерфейсы для конкретных платформ в соответствии с рекомендациями и одновременно обеспечивать скорость и качество нативных форм. И это можно написать на языке Kotlin, родном для платформы Android. Мы поняли, что это именно то, что нам нужно для нашего проекта.
Как KMM использовался в продукте
Учитывая, что KMM была новой технологией, мы начали тестировать ее с теми частями приложения, которые использовались реже, такими как соглашения с клиентами и страницы поддержки, чтобы выявить проблемы, связанные с библиотекой. возник бы. В нашем приложении есть два типа запросов, с авторизацией и без. Запросы, требующие авторизации, — самая сложная часть, поэтому мы начали экспериментировать с запросами, не требующими ни авторизации, ни места в кеше.
В процессе перезаписи модулей на KMM мы с самого начала разрабатывали новые пользовательские сценарии с KMM, но существующие сценарии переносились на KMM, когда их нужно было рефакторить.
Прежде чем писать многоплатформенный код, приложения для iOS и Android должны иметь одинаковую архитектуру с модулями или слоями, имеющими одинаковую логику. В наших приложениях было похожее разделение слоев:
- UI (презентация)
- Домен (уровень бизнес-логики)
- Данные (уровень источника данных)
Сначала мы переместили только уровень данных, но затем изменили наш процесс и начали перемещать все остальное, включая варианты использования домена. Единственные части KMM, которые мы не используем, — это пользовательский интерфейс и функции, специфичные для платформы, такие как Apple и Google Pay.
Внутри библиотеки мы используем Ktor, Kotlin Serialization и Coroutines. Мы используем оболочку Rx для адаптации платформы, потому что наши платформы используют Rx, но в будущем мы планируем использовать только Coroutines на Android.
Чтобы улучшить работу функционала корзины пользователя, нам необходимо сделать ее полностью независимой без какой-либо синхронизации с сайтом. Это означает, что с кешем предстоит много работы. Поэтому, чтобы хорошо выполнить эту задачу, мы начали использовать библиотеку SQLDelight для кэширования API. Как только мы закончим эту задачу, мы перенесем больше основных функций приложения в KMM.
Плюсы и минусы
Проблемы, которые мы обнаружили при использовании Kotlin Multiplatform Mobile:
- Наши разработчики iOS обнаружили, что необходимо потратить значительное количество времени на ознакомление и приобретение навыков работы с Gradle, средой разработки и функциями языка .
- Тестировать на устройстве сложнее, и процесс контроля качества обычно сложнее.
- Взаимодействие с iOS, которое в настоящее время является Obj-C.
Прибыль:
- До KMM основные функции, такие как корзина пользователя, требовали примерно 40–60 часов работы для каждой платформы (80–120 часов для обеих), не считая тестирования. С KMM мы можем сократить сроки до 50-70 часов для обеих платформ. Таким образом, используя KMM, мы ожидаем значительного сокращения времени разработки.
- Производительность и качество нативных форм. Мы разделяем только бизнес-логику между платформами и используем собственный код для каждого пользовательского интерфейса. Этот подход дает нам наибольшую производительность с минимальным количеством шаблонного кода.
Простота найма и поддержки. KMM работает на Kotlin, и найти разработчиков для Kotlin очень легко, потому что почти каждый Android-разработчик уже знает его. А благодаря близости к JVM-языкам почти каждый бэкенд-разработчик может работать и с Kotlin, и с KMM.
Идентичная логика на обеих платформах значительно снижает расхождения. На самом деле у нас изначально была проблема в дополнение к дублированию бизнес-логики. Иногда у нас были разные реализации функции на каждой из двух платформ. Мы выпустили наши версии для iOS раньше версий для Android. Иногда мы решали внести некоторые исправления в логику после выхода iOS, и иногда это приводило к тому, что мы внедряли эти исправления только в Android и забывали об iOS. Конечно, это не было правилом, но время от времени случалось. KMM помогает нам избежать этих проблем, потому что если вы что-то исправляете, вы исправляете это на обеих платформах одновременно. Но будьте осторожны: это также означает, что ошибки появятся на обеих платформах.
Предложения, советы и рекомендации.
Допустим, вы решили использовать КММ (хороший выбор). Но в вашей команде есть iOS-разработчики, которые не знакомы с Kotlin и не умеют им пользоваться. Вам обязательно нужно будет помочь им адаптироваться к новому языку. Мы обнаружили, что создание базы знаний Kotlin и KMM значительно облегчает этот процесс. Каждый раз, когда вы сталкиваетесь с проблемой в чем-то (развертывании, добавлении библиотек и т. д.), создавайте документацию и делитесь ею со всеми разработчиками, тогда они смогут обратиться к ней позже и решить, как что-то делать.
Важный момент — не навязывать КММ командам, особенно команде iOS. Нужно объяснить, что с KMM разработчики iOS не перестанут работать с экосистемой Swift или Apple. У нас есть разработчики, которые работают с KMM, и разработчики, которые этого не делают. Важно объяснить, что Kotlin не означает, что вы предпочитаете Android. Это общее решение. Эти пояснения важны, потому что, если вы не проясните эти моменты для разработчиков iOS, они могут отвергнуть этот подход.
Еще одна проблема с iOS — локальная среда Kotlin. Если вы хотите добавить зависимость от вашего локального модуля KMM в качестве модуля через интеграцию с Cocoapods, это означает, что вам необходимо создать собственный код Kotlin для этого модуля. Это усложняет сборку проектов, влияет на разработчиков iOS, которые не хотят работать с мультиплатформой, и увеличивает время сборки проекта.