Elkews или Создание новостного агрегатора для Android-гиков

в 4:12, , рубрики: android, elkews, Geektimes, агрегатор, Лайфхаки для гиков, Новости, персонализация, смартфоны

Эту статью я хотел бы посвятить ответам на следующие вопросы:

  • Есть ли алгоритм отбора самых обсуждаемых новостей IT мира?
  • Что должно отображать мобильное приложение при первом запуске?
  • Какая авторизация пользователей сейчас актуальна?
  • Как назвать свой проект?
  • Что же у меня с приятелем из этого в итоге получилось?

У каждого человека свои интересы, свои взгляды на хорошее и плохое и даже потрясающая занудная новость для одного может оказаться безумно интересной другому человеку, который, к примеру, занимался исследованиями в этой области или мечтал сделать как раз что-то подобное.
Но можно ли создать алгоритм релевантности, который удовлетворит пусть не всех, но хотя бы просто многих? Этим и занялся мой приятель…

Алгоритм самых обсуждаемых новостей

Мой друг заметил, что получить список новостей из мира IT, отсортированных по релевантности почти невозможно. Вернее, это очень легко, но за словом релевантность будут скрываться сложные и непонятные алгоритмы Google, Yandex и тому подобных…
А хотелось чего-то очень простого. Хотелось, чтобы было приложение, в котором ты видишь список новостей, действительно релевантных для тебя самого.
Оказалось, что социальные сети facebook уже давно исследует данную область, стараясь отображать в новостной ленте посты, отсортированные по релевантности для текущего пользователя.
К сожалению, при более детальном изучении алгоритма facebook выяснилось, что тот имеет, как минимум, еще одного важного заказчика — рекламодателя, интересы которого подчас ставятся выше самого пользователя и, в итоге, мы получаем новостную ленту, далекую от того, что хотел пользователь.
Но что действительно работает в facebook, так это весомый вклад количества репостов данной новости и особенно репостов твоих друзей.
Причем этот тренд сейчас используется во многих проектах — особенно меня поразила легкость и изящность алгоритма релевантности в популярной нынче у нас социальной сети secret:
— Изначально новый пост становится доступен только вашим друзьям
— Как только пост набирает определенное количество лайков от друзей, он становится доступен друзьям друзей
— Далее продвижение аналогично, только теперь пост распространяется сначала среди локальных (географически) сообществ, а потом и по всему миру

Почему бы тогда не попытаться применять схожие алгоритмы сортировки новостей?

Оказалось, что это работает и таким образом выплывают действительно интересные новости. Причем, можно строить данные оценки по дню, неделе, месяцу и т. д.

Первый запуск приложения

Что сразу приходит в голову — это экран с регистрацией. На данный момент, это почти стандарт, но действительно ли пользователь хочет видеть именно его после того, как только что установил мобильное приложение?
Многие компании задумывались об этом и Spotify, на мой взгляд, нашел хорошее решение, сделав экран регистрации с фоновым видео, демонстрирующим счастливых пользователей-меломанов.
Думаю, это правильное направление — дать пользователю почувствовать, что же именно дает приложение. Но мне кажется, что хорошо было бы сразу отобразить что-то действительно работающее.

Мы долго обсуждали, что же отображать в случае с новостями, ничего не зная о пользователе?
На самом деле, что-то знает каждое приложение. Например, текущую локаль, характеристики устройства и прочее.
Потому и решено было сразу же отображать список новостей, наиболее обсуждаемых в данной локали и отформатированных под текущее устройство.

Что еще нужно пользователю? Наверное, отсутствие рекламы и удобный формат для чтения. Получилось что-то такое:

Elkews или Создание новостного агрегатора для Android-гиков - 1

А что с регистрацией?

Авторизация пользователя в ноль кликов

Когда мы задумались о разработке Андроид приложения, то встал также вопрос авторизации. И здесь тоже чувствуется мировой тренд…
Почему WhatsApp выстрелил на весь мир? Было ли в нем что-то революционное, отличающее от существовавших (и популярных) тогда мессенджеров типа ICQ, Google Talk?
Я думаю, что было — это новый взгляд на вопрос авторизации пользователей. Он был прост до нельзя по сравнению со стандартными в то время связками логин/емейл + пароль, которые постоянно забывались.
WhatsApp вышел на рынок с авторизацией по номеру телефона. И, да, на мой взгляд, это была революция мысли на то время (по крайней мере, среди популярных мессенджеров).
Помню, представился мне как-то случай иметь честь беседовать с самим Брайаном Эктоном и я спросил его, действительно ли в википедии пишут правду и WhatsApp изначально не планировался, как мессенджер? После его положительного ответа, я капнул чуть глубже: «Неужели тогда ваше чутье превратило проект по обмену статусами в самый популярный в мире мессенджер или есть секрет, как почувствовать, что надо сильно менять курс своего проекта?» Его ответ оказался кратким, лаконичным и очень релевантным: «Все просто: вы лишь смотрите за пожеланиями ваших пользователей и стараетесь найти среднее арифмитическое среди всех их запросов.»
Это безусловно не удовлетворит всех. Точно найдутся люди, которые выйдут из проекта резко сменившего свой курс. Но эта релевантность как раз та, что нужна абсолютному большинству пользователей мессенджеров в мире.

Мы решили, что надо пойти дальше и убрать любые окна логина. Как я писал выше, в нашем приложении пользователь должен сразу же после установки попадать в список самых релевантных IT новостей. Пока пользователь не залогинен — это релевантность для его локали, в которой мы строим рейтинг новости, учитывая количество ее перепостов в социальных сетях и медиа, а также число комментариев и популярность на самом ресурсе.

Когда же человек захочет персонализировать результаты, то он делает единственный выбор: какой из его Google аккаунтов (а хотя бы один должен найтись у любого Андроидовода) использовать, как ключ для приложения:

Elkews или Создание новостного агрегатора для Android-гиков - 2

Все что мы делаем — это получаем хэш токена от гугла и верифицируем его на стороне сервера. Далее используется сгенерированный ключ (токен нашего сервера) для данного пользователя, чтобы фильтровать актуальные для него статьи, обозначать и скрывать со временем прочитанные. Дополнительно решено было добавить разделы «Избранные статьи» и «Читать позже».
При таком подходе человеку нужно запомнить лишь одно: какой из его Google аккаунтов он авторизовал в нашем приложении.

Существует ли еще более незаметный (для пользователя) механизм авторизации? К сожалению, все проблемы авторизации без каких-либо действий пользователя сводятся к одной: защите данных этого пользователя. Как узнать, что ключ, посланный приложением действительно принадлежит пользователю, а не украден у того? Вот тут и оказывается полезным API для верификации токена на стороне сервера (GoogleIdTokenVerifier::verify()), чтобы удостовериться в валидности данного токена для данного пользователя плюс Google и наш серверный токены постоянно истекают и генерятся новые. В общем, создавать самому всю это инфраструктуру довольно сложно.
Есть еще вариант дать Андроид приложению права получать список гугл аккаунтов и молча авторизовывать пользователя по первому из них, но нам показалось это каким-то неправильным. Прицепляться к IMEI и прочим идентификаторам девайса? Тут всплывает проблема верификации на стороне сервера и что если пользователь захочет обновить свой гаджет на новый?

И все же, есть ли у кого-то идея, как сделать авторизацию пользователя за ноль кликов?

Выбор названия проекта

Когда мы задумались над названием всего проекта, то в голову были взяты следующие факторы:
— Наш проект должно быть легко найти в интернете и домен с таким именем должен быть доступен
— Имя должно запоминаться и вызывать некоторую ассоциацию
— Имя должно быть связано с темой проекта

Начнем с последнего: первое, что мне приходило в голову при мысли об IT новостях и гиках вроде вас с нами — это свитер с лосями. Типа такого:

Elkews или Создание новостного агрегатора для Android-гиков - 3

В русском языке, к сожалению, слово «лось» не создает никаких позитивных ассоциаций. Зато слово Elk звучит вполне себе приветливо. Так мы остановились на английском названии.
Далее, хорошо бы вместить и слово новости, но ElkNews как-то не звучит, да и оказалось, что в интернете уже есть такие проекты… Например, такой или даже такой...

Тогда я снова вспомнил о современных трендах обрезания модификации слов в духе Pinterest и проект решили назвать Elkews.
Тут еще стоит задуматься, не значит ли данная аббревиатура чего-нибудь нехорошее на других языках (как, к примеру, получилось с Daewoo Kalos). Пообщался с американцами — те, вроде, ничего плохого не вспомнили…

А вы что думаете про такое название?

Что же получилось из этих идей?

Без особой спешки через 8 месяцев обсуждения идей, их реализации и усовершенствования, наше приложение доросло до версии 1.0! Последними фичами стали офлайн чтение статей и всевозможные оптимизации.
Конечно же, приложение совершенно бесплатно, не содержит рекламы и доступно для всех Андроид-пользователей в СНГ на Google Play, а для всего мира пока только на 4pda.ru.
Впереди много работы, но уже сейчас проект помогает нам моментально видеть самые обсуждаемые статьи из Хабра, Гиктаймс, Мегамозга и их англоязычных братьев.
Особенно приятно, вернувшись из спячки, узнать, что более всего волновало IT мир в последнюю неделю, месяц или и того больше.
Для развелечения и мимимишных котиков решили недавно добавить проект Adme.ru. Причем, можно заходить прямо в саму подписку и смотреть котиков (как и любой другой ресурс) по дате поступления без всякой релевантности=)

Любопытно услышать ваши мнения, каких фич и ресурсов проекту не хватает (кстати, есть ли англоязычный аналог Adme.ru?)
Также все написанное выше является моим имхо, а потому комментарии и замечания тоже безумно интересны.
Если вы хотите помочь нам улучшаться и расти, то отправляйте свои идеи и замечания на: hi@elkews.com
Все самую последнюю информацию о нашем проекте можно получить на: vk.com/elkews или elkews.com

Автор: goRGonito

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js