• В каком случае лучше использовать абстрактный класс, а в каком интерфейсы?

    valerium
    @valerium
    Изобретая велосипед
    Абстрактный класс реализует часть своих методов, а часть требует реализовать у потомков. Интерфейс же не делает вообще ничего, вся логика целиком перекладывается на плечи потомков.

    UPD. Интерфейсы, имхо, удобно использовать для описания шлюзов. То есть приложение получает данные из разрозненных источников в самых разных форматах, и не хочет об этих форматах ничего знать. А абстрактные классы хороши для описания родственных сущность, например, организации с различной формой собственности (им всем потребуется метод для валидации ИНН и запроса адреса регистрации с сайта налоговой). Но вообще, повторюсь, грань тонка.
    Ответ написан
    2 комментария
  • Как сделать регистрацию и авторизацию пользователей через мобильный номер?

    @Tirael78
    необходимо:
    1 подключиться к услуге рассылки СМС, наилучшее решение через существующий шлюз, например по России, мы после большого перебора остановились на smsc.ru (это не реклама), у них хороший api, цены в рынке.
    2 Необходимо реализовать взаимодействие с api смс шлюза на своем сервере (в зависимости от выбора api).
    3 На стороне сервера необходимо генерировать код подтверждения, к примеру набор из 4 или 6 цифр или букв, или иной комбинации. Сохранить связку пользователь - код подтверждения, чтобы иметь возможность сравнения в будущем.
    4 используя api шлюза отправляете код подтверждения на номер пользователя.
    5 абонент вводит код подтверждения и отправляет вам на сервер, любым реализованным вами механизмом.
    6 получив под подтверждения, проверяете, что данному пользователю был отправлен именно этот код. Если данные совпали - авторизуете пользователя.

    Некоторые советы по реализации:
    1 установите срок жизни кода, это нужно для безопасности
    2 введите ограничение на количество попыток ввода, опять же для безопасности
    3 при взаимодействии с api шлюза, необходимо анализировать ответы на ваши запросы, скажем человек ввел не существующий номер телефона, ошибся, вам необходимо корректно обработать данную ситуацию, подобных моментом может быть достаточно много.
    4 некоторые шлюзы (как например указанный мной выше) примут российский номер в формате 89 и так далее, но надо понимать что не факт что все шлюзы так поступят, правильный код России 7, и следовательно номер мобильного должен начинаться на 79, в других странах есть свои особенности, и это надо учитывать.
    5 установите срок жизни СМС сообщения (если шлюз позволяет это в своем api) не более срока жизни кода на вашем сервере, к примеру человек вне зоны действия сети, и СМС придет к нему через 1 час, когда уже не будет актуальна, в итоге вы заплатите за бессмысленное СМС сообщение, если у вас много абонентов, в итоге может набежать большая сумма. А так, сообщение просто не будет отправлено и вы сэкономите деньги.

    На самом деле там еше много нюансов, в зависимости от потребности вашего сервиса, но в общих чертах примерно так.
    Ответ написан
    Комментировать
  • ReplyKeyboardMarkup в sendMessage как передать правильный запрос в JSON?

    @CAPTCHAnotValid
    Кавычки поставьте!
    reply_markup:{"ReplyKeyboardMarkup":{"keyboard":[[{"KeyboardButton":{"text":"test"}}]]}}
    Ответ написан
    Комментировать
  • ReplyKeyboardMarkup в sendMessage как передать правильный запрос в JSON?

    @zo0Mx
    "reply_markup": { "keyboard": [ [{"text": "FIRST_BUTTON"}], [{ "text": "SECOND_BUTTON"}], [{ "text": "THIRD_BUTTON"}] ] }
    Ответ написан
    Комментировать
  • Как создать инлайн кнопку Показать еще в Телеграм боте?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    У inline-кнопок есть поле callback_data которое может содержать произвольные данные.
    Во время отправки кнопки пользователю (ответ от бота) в зависимости от логики приложения туда помещаете нужную строку, которая затем вернётся на сервер при нажатии кнопки пользователем.
    Например это может быть callback_data = "list_sushi_page_2" что будет означать для вас "пользователь нажал переход на 2 страницу списка" или как вариант "/list_sushi?from=11&to=22" и тд.

    https://core.telegram.org/bots/api#inlinekeyboardmarkup
    Ответ написан
    5 комментариев