• Как правильно настроить NS DNS записи для MTA (Postfix)?

    @tiger_13 Автор вопроса
    и у кого больше приоритет, туда идет почта, правильно?
    То что запись A указывает на другой IP вообще не играет роли, правильно?
  • Как правильно настроить NS DNS записи для MTA (Postfix)?

    @tiger_13 Автор вопроса
    то есть - я ставлю в записях MX - IP сервера с Postfix, правильно?
  • Как правильно работать с One Time Password (OTP)?

    @tiger_13 Автор вопроса
    Дмитрий, логично) понял, спасибо
  • Как правильно работать с One Time Password (OTP)?

    @tiger_13 Автор вопроса
    Дмитрий,
    Спасибо за Ваши ответы!

    Если вам нужен 2FA, то код должен прийти в sms, иначе в этом нет смысла

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

    По поводу OTP - какая вообще практика с секретом - под каждого клиента свой, или один раз указывается для всего приложения?
  • Как правильно работать с One Time Password (OTP)?

    @tiger_13 Автор вопроса
    есть ли смысл тогда вообще пользоваться библиотекой pyOTP? Или проще просто генерировать код, писать в бд и потом сравнивать?

    Еще пришла следующая идея:
    клиент (моб. приложение) отправляет запрос на отправку кода, в ответе мы отдаем уже сам код, который должен прийти. И уже клиент сам разбирается с логикой правильный ли код вводит пользователь. Или лучше так не делать?
  • Как правильно реализовать подгрузку уведомлений?

    @tiger_13 Автор вопроса
    Иван Воробей, решаю проблему с авторизацией в приложении (если это можно назвать проблемой). Не до конца понимаю, как грамотно работать с JWT с точки expiration time. Пример проблемы:
    юзер залогинился в приложение (приложение не банковское, где логин происходит каждый раз при лаунче), и моя цель - всегда поддерживать его залогиненый статус (пока он не нажмёт "Выйти"). Так как впервые столкнулся с работой с JWT, то, не совсем понимаю основную логику работы с ним. Сервер при логине выдает токен. Какая вообще логика работы с ним с точки зрения приложения (именно волнует проверка его на валидность и expires on)? Проверяем перед каждым запросом не истек ли он и получаем если надо новый? Или ждем от сервера 403 Forbidden? На какой срок лучше всего выдавать токен (вопрос больше по бэкенду и безопасности)?
  • Как правильно реализовать подгрузку уведомлений?

    @tiger_13 Автор вопроса
    Иван Воробей,
    выводил print(UIApplication.shared.isRegisteredForRemoteNotifications) - в консоли true
    didRegisterForRemoteNotificationsWithDeviceToken не вызывается.
    Взял другой айфон, на котором это приложение никогда не ставилось - didRegisterForRemoteNotificationsWithDeviceToken вызывалось 0_0 ))
    на эппловском форуме даже есть топик по поводу такого этого бага)))

    Спасибо что помогли разобраться! Какое у Вас мнение по поводу хранению и использованию JWT? (помимо KeyChain), так как недавно натолкнулся на статью:
    https://tech.just-eat.com/2019/12/04/lessons-learn...
    Или просто хранить в KeyChain и каждый раз доставать и проверять валидный ли токен?
  • Как правильно реализовать подгрузку уведомлений?

    @tiger_13 Автор вопроса
    Иван Воробей, пробовал не на симуляторе, на проекте, в котором с сервера отправляются пуш уведомления (не в ручную), то есть, на рабочем варианте.
    didFailToRegisterForRemoteNotificationsWithError - не вызывается.
    UNUserNotificationCenter.current().getNotificationSettings дает следующее:
    Notification settings: <UNNotificationSettings: 0x281ac0af0; authorizationStatus: Denied, notificationCenterSetting: Disabled, soundSetting: Disabled, badgeSetting: Disabled, lockScreenSetting: Disabled, carPlaySetting: NotSupported, announcementSetting: Disabled, criticalAlertSetting: NotSupported, alertSetting: Disabled, alertStyle: None, groupingSetting: Default providesAppNotificationSettings: No>


    Пробовал несколько раз, перед каждым разом удалял приложение с телефона (каждый раз спрашивалось разрешение).

    разрешение уведомлений в настройках проекта - есть, идентификатор приложения добавлен и на developer.apple.com, и для него разрешены пуши
    5ed55af745c73757605380.png
  • Как правильно реализовать подгрузку уведомлений?

    @tiger_13 Автор вопроса
    Спасибо за Ваш ответ!
    Про long polling - стыкался с таким при написании ботов для телеграм.

    На счет пушей - проверил, если при запросе разрешения на отправку уведомлений нажимаем "не разрешать", то, при
    DispatchQueue.main.async {
              UIApplication.shared.registerForRemoteNotifications()
            }


    didRegisterForRemoteNotificationsWithDeviceToken не вызывается, соответственно токен не получаем, возможность слать пуш уведомление для тех кто не разрешил уведомления - отсутствует (возможно у Вас получилось получить токен при запрете пользователя)

    Вебсокеты - думал в их сторону, но говорят что едят много аккумулятора, но это прям realtime.

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

    По факту - скорее всего буду реализовывать на сокетах. Не понимаю только куда впихнуть логику сокета (в какой ViewController), если нужно в любой момент в приложении получать эти уведомления. Или думать в сторону singleton?
  • Как скачать картику с помощью BeautifulSoup?

    @tiger_13
    deadlymouse14221,
    import bs4
    import requests
    from bs4 import BeautifulSoup
    
    headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'}
    r = requests.get("https://prnt.sc/rblzyl", headers=headers)
    
    soup = BeautifulSoup(r.content,'lxml')
    img = soup.find(id='screenshot-image')
    link = img['src']
    print("Ссылка на картинку:{}".format(link))
    with open("image.png".format(link),"wb") as f:
        f.write(requests.get(link).content)


    результат:
    5e8889e2857cd714264714.png

    P.S.
    перед тем как запускать установи BeautifulSoup4, requests,lxml (выполняешь в командной строке):
    pip3 install BeautifulSoup4
    pip3 install requests
    pip3 install lxml


    P.P.S.
    Хедер к запросу надо добавлять обязательно, так как сайт шарит что ты бот, поэтому создаем видимость что заходит браузер и добавляем хедер:
    headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'}
  • На чем лучше строить проект?

    @tiger_13 Автор вопроса
    Спасибо! О таких инструментах как Кафка не знал, поэтому и была сложность в понимании как читать данные с одного процесса во втором (без бд, так как чтение с бд может затянуть процесс).
    Про push/UDP тоже спасибо, свой взгляд на push (особенно silent push) пересмотрел, спасибо!
  • На чем лучше строить проект?

    @tiger_13 Автор вопроса
    по пушу для мобилок - для разовых уведомлений вещь хорошая (чтобы юзер зашел в приложение), но как часть проекта - надо передавать данные, которые парсятся через TCP-соединение в режиме реального времени на мобилку. Приметил для себя socket.io, у них и для Python есть библиотека и для Swift. Два сервиса - хороший вариант, но тогда подскажите, пожалуйста, как мне с в режиме реального времени передавать данные с TCP сервера на HTTP, который потом будет на мобилку передавать? Потому что мне пока в голову пришло следующее:
    1. Мне приходит TCP сокет, я с TCP сервиса делаю push-уведомление на мобилку.
    2. Если мобилка заходит, с нее делаю запрос на HTTP сервис узнаю ее айпи, передаю данные на TCP сервис.
    3. Делаю WebSocket (скажу сразу, с ними не особо знаком, может там не нужен айпи), и когда приходит TCP сокет - парсю данные, передаю через WebSocket на приложение.

    Краткосрочное соединение - если сессия будет, допустим, длиться 10 минут, нормальное ли решение стучаться с телефона каждые н-секунд на сервер за обновлением? Или Вы имеете ввиду что-то другое?
  • Как скачать картику с помощью BeautifulSoup?

    @tiger_13
    риквестом делаешь гет запрос:
    r = requests.get("prnt.sc/rblzyl")

    дальше готовишь супчик (r.content возвращает html с get запроса):
    soup = BeautifulSoup(r.content)

    дальше ищешь див нужный, так как у тебя у img нет id, а через класс искать так себе (может еще есть такие же элементы с таким же классом).в твоем случае div class = "under-image", в чилдренах находишь картинку, и дальше как я написал
  • Почему UITapGestureRecognizer не срабатывает?

    @tiger_13 Автор вопроса
    briahas, зкинул в генератор, проблема пропала. Спасибо Вам! Хорошего дня
  • Почему UITapGestureRecognizer не срабатывает?

    @tiger_13 Автор вопроса
    briahas, 5e79ffb30bc1f083445052.jpeg
    5e79ffc3480cc100341655.jpeg

    Когда закрываю приложение - снизу иконки появляется черная полоска. При разработке думал, что просто из-за того что прога пока не в АппСторе. Но она уже выгружена, полоска все равно осталась. Сейчас готовлюсь выгружать еще два приложения, проблема такая же осталась (первая иконка делалась в Фотошопе, вторая в Скетче, поэтому не думаю, что в этом проблема). Возможно у Вас была такая же проблема?

    П.С. ссылка на приложение:
    https://apps.apple.com/ua/app/leok/id1484653252?l=ru
  • Почему UITapGestureRecognizer не срабатывает?

    @tiger_13 Автор вопроса
    briahas, результат дебага - тапГестуры стояли везде, просто была слишком сложная иерархия вьюшек (их было слишком много). В итоге - упростил иерархию, и понял, что скорее всего есть какой-то лимит по глубине вьюшки. briahas, есть вопрос по иконке, может можете помочь
  • Почему UITapGestureRecognizer не срабатывает?

    @tiger_13 Автор вопроса
    нет, не помогло(
    добавил на контроллер (в UITextField ) тоже еще один UITapGestureRecognizer тоже не работает(( хотя кнопка на контроллере работает
  • Как реализовать дизайн?

    @tiger_13 Автор вопроса
    Иван Воробей, понял, спасибо Вам большое за помощь!