INFOSTART EVENT 2018 EDUCATION

Второй тур голосования за доклады.
Окончание 5 сентября.

Соседова Снежана Дмитриевна | Разработчик мобильных приложений | 1С-Рарус

«Как улучшить продукт и увеличить выручку в несколько раз (Немного про UX/UI, воронку AARRR и реальном опыте применения статистики в мобильном приложении)»

Поговорим о тиражных приложениях, и не только мобильных, и не обязательно на 1С :) В своем докладе я поделюсь нашим опытом разработки мобильного приложения Boss - как мы принимали решения о развитии приложения, на какие грабли наступали и какие выводы сделали: - "Ошибка выжившего" или почему фидбек от пользователей - это не всегда хорошо. - Сделаем продукт лучше! Добавим новые фичи! Или нет?) - Куда уходят пользователи? И так ли важно количество скачиваний приложения? - Статистика - что собираем, и главное Зачем? - Несколько реальных кейсов из нашего опыта - как мы увеличили выручку, не меняя функциональность приложения.

1. TreeDogNight 17 05.08.16 14:35 Сейчас в теме

Проблемы с разработкой мобильного приложения

Всем привет! Написал мобильное приложение, Интернет-магазин текстильной одежды.
Возникло несколько проблем и пожеланий заказчика, которые к сожаление пока что не удалось решить, может быть кто-нибудь на этом форуме сталкивался с такими же проблемами:

1) Периодически приложений вылетает, на некоторых смартфонах с ошибкой, на некоторых без:

Чаще всего вылетает в момент переключения категории товаров или смены ориентации экрана.

2) Заказчик попросил убрать верхнюю панель с надписью "Рабочий стол":

Искал в интернете, как же можно убрать эту панель, кто-то писал что надо подкорявить манифест приложения, но то имено подкорявить, так и не написали...

3) Из командной панели заказчик так же попросил убрать стандартную команду "Список приложений":

Как это сделать, я тоже к сожалению не нашёл

Загрузить приложение можно по адресу: http://91.234.219.212/kamalak/ws/ExchangeOfDataBaby.1cws?wsdl
Ответы
Сортировка: Древо
2. dj_serega 353 05.08.16 15:06 Сейчас в теме
2 и 3 думаю без ковыряния манифеста не получился однозначно. Но я бы не менял а сослался на типовой механизм.
1. А перед вылетом СМС случайно не получали? :)
3. TreeDogNight 17 05.08.16 15:18 Сейчас в теме
(2) dj_serega, Нет =) Я подозреваю, что приложение вылетает из-за большой загрузки оперативной памяти, которая может быть вызвана большим количеством картинок в приложении... Было-бы в 1С что-нибудь наподобии Garbage collector =)
4. dj_serega 353 05.08.16 15:32 Сейчас в теме
(3) TreeDogNight,
Нет =)
А чего смеетесь :) Я озвучил фичу одного из релиза 8.3.5 (если не ошибаюсь).
По поводу вылета. Это более чем возможно. Вспомнил что были еще вылети при чтении большой xml обмена. Повторяется при выгрузке файла на более чем 30мб (если передавать в виде ДД (двоичных данных)). Если ДД запаковать в ХЗ (хранилище значения) с максимальным сжатием то передаваемый объем может увиличится (но не проврял).
5. TreeDogNight 17 05.08.16 15:40 Сейчас в теме
(4) dj_serega, На данный момент картинки в м.п. хранятся в Хранилище значений без сжатия
6. TreeDogNight 17 05.08.16 15:46 Сейчас в теме
Кстати, релиз платформы - 8.3.8.58
7. Xershi 386 05.08.16 15:49 Сейчас в теме
(6) TreeDogNight, попробуй обновить на более свежий.
А по 2 и 3 это типовой механизм. Приложение на 1С, так что нечего его ковырять, если вы не кровавый хирург))
8. TreeDogNight 17 05.08.16 16:08 Сейчас в теме
(7) Xershi, На данный момент последняя платформа это ТЕСТОВАЯ версия 8.3.8.63 от 08.07.2016, которая идет сразу после 8.3.8.58
Как-то опасаюсь ставить тестовую...
9. dj_serega 353 05.08.16 17:14 Сейчас в теме
По 1. нужно переработать логику вывод картинок.
10. TreeDogNight 17 05.08.16 17:31 Сейчас в теме
(9) dj_serega, Уже несколько раз, по-разному перерабатывал. Изначально, сразу выводились все товары на одну страницу. Потом сделал порционный вывод товаров на страницу (по 10 штук), в конце страницы была кнопка "Показать ещё", которая выводила ещё 10 штук (или остаток). Вылетать стало реже, но после того, как на форме уже было более 40-50 товаров, приложения опять вылетало.
Потом, я сделал переключение страниц, после чего на форме одновременно было не больше 10 товаров. Вылетать стало намного реже, но при частом переключении страниц, приложение рано или поздно все-равно вылетает.
Больше идей у меня нет...
11. dj_serega 353 05.08.16 17:43 Сейчас в теме
(10) TreeDogNight, А если реализовать все на одной странице но удалять элементы?
13. TreeDogNight 17 05.08.16 18:45 Сейчас в теме
(11) dj_serega, Сейчас при переходи с одной страницы на другую, предыдущие элементы формы удаляются
(12) flyer, Вот код:
&НаКлиенте
Процедура ПредыдущаяСтраница(Команда)
	
	ТекущаяСтраница = ТекущаяСтраница - 1;
	ОбновитьЭлементыФормы(ТекущаяОриентацияЭкрана());
	ЭтаФорма.ОбновитьОтображениеДанных();
	
КонецПроцедуры

&НаКлиенте
Процедура СледующаяСтраница(Команда)
	
	ТекущаяСтраница = ТекущаяСтраница + 1;
	ОбновитьЭлементыФормы(ТекущаяОриентацияЭкрана());
	ЭтаФорма.ОбновитьОтображениеДанных();
	
КонецПроцедуры

&НаСервере
Процедура ОбновитьЭлементыФормы(Ориентация)
	
	//Удалим старые Элементы формы
	Для каждого Стр из ТЧ_ДобавляемыеЭлементы Цикл  
		Группа = Элементы.Найти(Стр.ИмяГруппы);
		Если Не Группа = Неопределено Тогда 
			Элементы.Удалить(Группа);	
		КонецЕсли;
		
		Элемент = Элементы.Найти(Стр.ИмяЭлемента);
		Если Не Элемент = Неопределено Тогда 
			Элементы.Удалить(Элемент);	
		КонецЕсли;
	КонецЦикла;
	ТЧ_ДобавляемыеЭлементы.Очистить();
		
	РПТовары = ТЧ_Товары.НайтиСтроки(Новый Структура("ПолоВозрастнаяГруппа, НомерСтраницы", ПолоВозрастнаяГруппа, ТекущаяСтраница));	
	Для каждого Стр из РПТовары Цикл  
		пп  = Стр.НомерСтроки;
		
		ИмяГруппы 	= "Группа"+пп;
		Стр.Цена	= ?(ТипЗнч(Стр.Цена) = Тип("Число"), СокрЛП(Стр.Цена) + " сум.", Стр.Цена);
		
		Группа 						= Элементы.Добавить(ИмяГруппы, Тип("ГруппаФормы"), ЭтаФорма);
		Группа.Вид					= ВидГруппыФормы.ОбычнаяГруппа;
		Группа.ОтображатьЗаголовок 	= Ложь;
		Группа.Отображение 			= ОтображениеОбычнойГруппы.Нет;
		Группа.Группировка 			= ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная;
		
		ДвоичныеДанные = Стр.Фото.ДанныеФайлаМиниатюры.Получить();
		Если ДвоичныеДанные = Неопределено Тогда 
			Стр.НавигационнаяСсылка = ПутьКПустойКартинке;
		Иначе 
			Стр.НавигационнаяСсылка = ПолучитьНавигационнуюСсылку(Стр.Фото, "ДанныеФайлаМиниатюры");
		КонецЕсли;
		
		Элемент 						 = Элементы.Добавить("ПолеФото"+пп, Тип("ПолеФормы"), Элементы[ИмяГруппы]);
		Элемент.ПутьКДанным 			 = "ТЧ_Товары["+(пп-1)+"].НавигационнаяСсылка";
		Элемент.Вид						 = ВидПоляФормы.ПолеКартинки;
		Элемент.Подсказка				 = пп-1;
		Элемент.ПоложениеЗаголовка 		 = ПоложениеЗаголовкаЭлементаФормы.Нет;
		Элемент.РазмерКартинки			 = РазмерКартинки.Пропорционально;
		Элемент.ГоризонтальноеПоложение  = ГоризонтальноеПоложениеЭлемента.Лево;
		Элемент.РастягиватьПоГоризонтали = Ложь;
		Элемент.Гиперссылка				 = Истина;
		Элемент.УстановитьДействие("Нажатие", "ОбработкаНажатия");
		
		НоваяСтрока 				= ТЧ_ДобавляемыеЭлементы.Добавить();
		НоваяСтрока.ИмяГруппы 		= ИмяГруппы;
		НоваяСтрока.ИмяЭлемента 	= Элемент.Имя;
		
		ПодГруппа_1 					= Элементы.Добавить("ПодГруппа"+пп, Тип("ГруппаФормы"), Группа);
		ПодГруппа_1.Вид					= ВидГруппыФормы.ОбычнаяГруппа;
		ПодГруппа_1.ОтображатьЗаголовок	= Ложь;
		ПодГруппа_1.Отображение 		= ОтображениеОбычнойГруппы.Нет;
		ПодГруппа_1.Группировка 		= ГруппировкаПодчиненныхЭлементовФормы.Вертикальная;
		
		Элемент 					= Элементы.Добавить("ПолеТовар"+пп, Тип("ДекорацияФормы"), Элементы["ПодГруппа"+пп]);
		Элемент.Заголовок 			= ТЧ_Товары[(пп-1)].Товар;
		Элемент.Подсказка			= пп-1;
		Элемент.Гиперссылка			= Истина;
		Если Ориентация = ОриентацияСтраницы.Портрет Тогда
			Элемент.Шрифт			= Новый Шрифт(Элемент.Шрифт,,7,Истина);	
		Иначе 
			Элемент.Шрифт			= Новый Шрифт(Элемент.Шрифт,,8,Истина);	
		КонецЕсли;
		Элемент.УстановитьДействие("Нажатие", "ОбработкаНажатия");
		
		НоваяСтрока 			= ТЧ_ДобавляемыеЭлементы.Добавить();
		НоваяСтрока.ИмяГруппы 	= ИмяГруппы;
		НоваяСтрока.ИмяЭлемента = Элемент.Имя;
		
		Элемент 					= Элементы.Добавить("ПолеЦена"+пп, Тип("ПолеФормы"), Элементы["ПодГруппа"+пп]);
		Элемент.ПутьКДанным 		= "ТЧ_Товары["+(пп-1)+"].Цена";
		Элемент.Вид					= ВидПоляФормы.ПолеНадписи;
		Элемент.Подсказка			= пп-1;
		Элемент.ПоложениеЗаголовка  = ПоложениеЗаголовкаЭлементаФормы.Нет;
		Элемент.Гиперссылка			= Истина;
		Если Ориентация = ОриентацияСтраницы.Портрет Тогда
			Элемент.Шрифт			= Новый Шрифт(Элемент.Шрифт,,8,Истина);	
		Иначе 
			Элемент.Шрифт			= Новый Шрифт(Элемент.Шрифт,,9,Истина);	
		КонецЕсли;
		Элемент.УстановитьДействие("Нажатие", "ОбработкаНажатия");
		
		НоваяСтрока 			= ТЧ_ДобавляемыеЭлементы.Добавить();
		НоваяСтрока.ИмяГруппы 	= ИмяГруппы;
		НоваяСтрока.ИмяЭлемента = Элемент.Имя;
		
		
		ПодГруппа_2 						 = Элементы.Добавить("ПодПодГруппа"+пп, Тип("ГруппаФормы"), Элементы["ПодГруппа"+пп]);
		ПодГруппа_2.Вид						 = ВидГруппыФормы.ОбычнаяГруппа;
		ПодГруппа_2.ОтображатьЗаголовок		 = Ложь;
		ПодГруппа_2.Отображение 			 = ОтображениеОбычнойГруппы.Нет;
		ПодГруппа_2.Группировка 			 = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная;
		ПодГруппа_2.РастягиватьПоГоризонтали = Ложь;
		
		Элемент 					= Элементы.Добавить("ПолеКоличество"+пп, Тип("ПолеФормы"), Элементы["ПодПодГруппа"+пп]);
		Элемент.ПутьКДанным 		= "ТЧ_Товары["+(пп-1)+"].Количество";
		Элемент.Вид					= ВидПоляФормы.ПолеВвода;
		Элемент.Подсказка			= пп-1;
		Элемент.ПоложениеЗаголовка  = ПоложениеЗаголовкаЭлементаФормы.Нет;
		Элемент.КнопкаРегулирования	= Истина;
		Элемент.МинимальноеЗначение = 0;
		Если Ориентация = ОриентацияСтраницы.Портрет Тогда
			Элемент.Шрифт			= Новый Шрифт(Элемент.Шрифт,,8,Истина);	
		Иначе 
			Элемент.Шрифт			= Новый Шрифт(Элемент.Шрифт,,9,Истина);	
		КонецЕсли;
		
		НоваяСтрока 			= ТЧ_ДобавляемыеЭлементы.Добавить();
		НоваяСтрока.ИмяГруппы 	= ИмяГруппы;
		НоваяСтрока.ИмяЭлемента = Элемент.Имя;
		
		Команда 			= Команды.Найти("Купить"+пп);
		Если Команда = Неопределено Тогда 
			Команда	 		= Команды.Добавить("Купить"+пп); 
		КонецЕсли;
		Команда.Заголовок 	= "Купить";
		Команда.Подсказка	= пп-1;
		Команда.Картинка 	= БиблиотекаКартинок.Корзина;
		Команда.Действие	= "Купить";
		
		Элемент 			= Элементы.Добавить("ФормаКупить"+пп, Тип("КнопкаФормы"), Элементы["ПодПодГруппа"+пп]);
		Элемент.Вид			= ВидКнопкиФормы.ОбычнаяКнопка;
		Элемент.ИмяКоманды	= Команда.Имя;
		//Элемент.Ширина		= 7;
		Элемент.Высота		= 1;
		Если Ориентация = ОриентацияСтраницы.Портрет Тогда
			Элемент.Шрифт		= Новый Шрифт(Элемент.Шрифт,,6,Истина);	
			Элемент.Отображение = ОтображениеКнопки.Картинка;
		Иначе 
			Элемент.Шрифт		= Новый Шрифт(Элемент.Шрифт,,7,Истина);	
			Элемент.Отображение = ОтображениеКнопки.КартинкаИТекст;
		КонецЕсли;
		
		НоваяСтрока 			= ТЧ_ДобавляемыеЭлементы.Добавить();
		НоваяСтрока.ИмяГруппы 	= ИмяГруппы;
		НоваяСтрока.ИмяЭлемента = Элемент.Имя;
	КонецЦикла;
	
	Элементы.Переместить(Элементы.ГруппаПереключениеСтраниц, ЭтаФорма);
	
	РПТовары_2 = ТЧ_Товары.НайтиСтроки(Новый Структура("ПолоВозрастнаяГруппа", ПолоВозрастнаяГруппа));
	Если РПТовары.Количество() = РПТовары_2.Количество() Тогда 
		Элементы.ГруппаПереключениеСтраниц.Видимость = Ложь;	
	Иначе 
		Элементы.ГруппаПереключениеСтраниц.Видимость = Истина;	
		
		Если ТекущаяСтраница = 1 Тогда 
			Элементы.ПредыдущаяСтраница.Доступность = Ложь;
			Элементы.СледующаяСтраница.Доступность  = Истина;
		ИначеЕсли ТекущаяСтраница = РПТовары_2[РПТовары_2.ВГраница()].НомерСтраницы Тогда 
			Элементы.ПредыдущаяСтраница.Доступность = Истина;
			Элементы.СледующаяСтраница.Доступность  = Ложь;
		Иначе 
			Элементы.ПредыдущаяСтраница.Доступность = Истина;
			Элементы.СледующаяСтраница.Доступность  = Истина;
		КонецЕсли;
	КонецЕсли;
	
	Если РПТовары.Количество() > 0 Тогда 
		ЭтаФорма.ТекущийЭлемент = Элементы["ПолеФото"+РПТовары[0].НомерСтроки];
	КонецЕсли;
	
КонецПроцедуры
Показать


ТекущаяОриентацияЭкрана() - это экспортная функция в Модуле Управляемого приложения:
Функция ТекущаяОриентацияЭкрана() Экспорт
	
	ПараметраЭкрана = ПолучитьИнформациюЭкрановКлиента();
	Если ПараметраЭкрана.Количество() > 0 Тогда 
		ИнфаЭкрана = ПараметраЭкрана[0];    
		
		Если ИнфаЭкрана.Высота > ИнфаЭкрана.Ширина Тогда 
			Возврат ОриентацияСтраницы.Портрет;	
		Иначе 
			Возврат ОриентацияСтраницы.Ландшафт;	
		КонецЕсли;
	КонецЕсли;

КонецФункции
Показать
12. flyer 204 05.08.16 18:24 Сейчас в теме
идея хорошая для моб.приложения. что то делал похожее. и тут вопросы задавал по выводу фото. тоже вылеты были. покажи код как выводишь фото на страницу? может есть смысл оптимизировать.
14. flyer 204 06.08.16 08:52 Сейчас в теме
основная беда это перебор с памятью. убери максимально все элементы с экрана. и минимальные фото сделать.
15. TreeDogNight 17 06.08.16 11:40 Сейчас в теме
(14) flyer, А есть какие-нибудь способы программно очищать оперативную память?
16. flyer 204 06.08.16 15:14 Сейчас в теме
(15) TreeDogNight, попробуй еще 8.3.9. правда тестовая вышла может она получше
17. TreeDogNight 17 30.08.16 17:50 Сейчас в теме
Всем большое спасибо за советы! Решить проблему вылетов помог переход на платформу 8.3.9.64!
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии


Программист 1С
Москва
зарплата от 100 000 руб. до 200 000 руб.
Полный день

Преподаватель 1С
Санкт-Петербург
Полный день

Удаленный ИТ-журналист
Санкт-Петербург
По совместительству

Удаленный бизнес-аналитик 1С
Санкт-Петербург
Временный (на проект)