Дизайн беджа для Сейви
В Сейви 1.3 мы добавили фичу с отображением беджа с количеством неразобранных аудиозаписей:
Это для тех, кто предпочитает записи разгребать, а не копить. На самом деле мы хотели это в первой версии, но пришлось пофлексить, потому не было времени дизайнить. Казалось бы, что там дизайнить? Это же встроенная фича системы, бери да пользуйся. Но нет.
Это длинная скучная заметка.
Начиная с 10-го Ай-ОСа, отображение беджа считается «уведомлением», и поэтому требует разрешения пользователя. Так что если бы мы попытались показать бедж, пользователь бы увидел системное окно, спрашивающее, не хочет ли он получать уведомления.
Мы уже просим два разрешения при первом запуске: микрофон и распознавание речи (это разные вещи, к сожалению). Перед тем, как спрашивать, мы показываем такой экран::
Так мы готовим пользователя к вопросу и увеличиваем шанс того, что он согласится. Микрофон:
Распознавание речи:
Заметьте, что тут мы ещё можем добавить отсебятины в текст, чтобы лучше объяснить, почему это окно появилось.
Мы могли бы добавить ещё один объясняющий экран про уведомления: рассказать, что мы будем показывать бедж и только потом спросить разрешения. Но ещё один такой экран и третий вопрос о разрешениях превратит первый запуск программы в пытку. И, что ещё важнее, многие всё равно не согласятся на уведомления, потому что при первом запуске они понятия не имеют, нафиг им этот бедж. Да и вряд ли будут вникать в наши объяснения.
И тогда что дальше, если человек нажмёт Don’t Allow? Разрешения можно спросить только один раз.
Если человек откажет нам в микрофоне или распознавании речи, то всё просто — без них мы вообще не можем ничего делать, поэтому показываем такую заглушку:
Но с беджем мы так сделать не можем, потому что бедж необязателен. Кому-то нужен, кому-то нет. Так что если человек нажмёт Don’t Allow, нам надо будет где-то объяснить, как включить его позже. А у нас ни эбаута нет, ни настройки.
Можно, конечно, добавить настройку, где будет только этот бедж... В общем, уже получается слишком сложно. И это тупо, ведь в Ай-ОСе уже есть встроенная настройка уведомлений, и мы никаких других «уведомлений» не используем. Поэтому следующая идея была давать это настроить только через системное окно настройки уведомлений:
Если тут включены уведомления, то показываем бедж, если нет, то нет (ну нам и не дадут). А где настроить — объяснили бы в описании приложения.
Так тоже не вышло. Оказалось, что нельзя добавить пункт Notifications в список разрешений приложения, не спросив разрешения сперва. То есть даже чтобы получить ответ «Нет», нужно спросить разрешения! Бесит ещё, что сам текст окна начинается со слов «Sayve Would Like to Send You Notifications», не соответствующих действительности:
На самом деле мы не хотим отправлять никаких уведомлений, у нас их нет. И даже бедж мы не «хотим», а просто можем показывать, если пользователь хочет. Что ещё хуже, именно в этом диалоге, в отличие от двух других, нельзя дописать объясняющей отсебятины.
Но на это всё мы не можем влиять — вопросы задаёт Ай-ОС, а не мы.
Поэтому мы добавили в правый верхний угол иконочку:
Идея была такая: когда человек жмёт, мы сначала спрашиваем, хочет ли человек бедж. И если он говорит, что хочет, мы уже получаем у системы разрешение на уведомления. И потом убираем эту иконку, чтобы не мозолила глаза.
Это, конечно, снова не сработало. Что если пользователь откажется уже в первом окне? Нам придётся не показывать второе, а тогда мы не сможем добавить саму возможность включить уведомления, как я уже объяснял выше. Выходит, нам нельзя спрашивать, хочет ли человек бедж, а нужно просто сказать, мол, «сейчас система спросит про уведомления, а ты ответь, не хочешь ли ты бедж» (жесть).
В итоге в вышедшей недавно 1.3 если нажать в правый верхний угол, вы увидите такое:
И когда вы нажмёте «OK» (мы его ещё и написали неправильно), тогда уже вы увидите системный диалог про уведомления.
Уже после релиза мы поняли, что лучше было написать что-то вроде Continue вместо «OK», а то кажется, будто мы вынуждаем человека согласиться.
Не могу сказать, что этот дизайн достоин попадания в музей, но это лучшее, что мы пока смогли придумать в условиях айосных ограничений.
Мы — это я и разработчик Сейви — Михаил Рубанов.
Кнопка: