Перейти к содержимому

Приложение для iOS

rChat для iOS работает на iPhone и iPad и подключается к ретранслятору, который запускаете вы или тот, кому вы доверяете. Надписи интерфейса приводятся по-английски, как в приложении.

Список чатов rChat на iPhone Список чатов rChat на iPhone
Чаты
Разговор в rChat с текстом, фотографией и голосовым сообщением Разговор в rChat с текстом, фотографией и голосовым сообщением
Разговор
  • iPhone или iPad с iOS 17 или новее.
  • Приглашение от оператора ретранслятора rChat с протоколом v3 (rChat 2.0.0): QR-код или ссылка rchat://relay. Без приглашения нужен URL ретранслятора, включая путь WebSocket, например wss://chat.example.com/<websocket_path>.

Приложение скоро появится в App Store. Приложения для Mac пока нет; см. Приложение для Mac.

  1. Welcome. Пролистайте приветствие, чтобы начать настройку.
  2. Connect. Введите отображаемое имя, затем выберите ретранслятор: Scan relay invite (отсканируйте QR-код оператора) или Paste invite. rChat показывает имя хоста ретранслятора и просит подтверждения, затем сохраняет адрес и закрепляет идентичность ретранслятора. Без приглашения URL сервера можно ввести через Enter manually. Ваше отображаемое имя видно контактам.
  3. Your identity. Приложение создаёт ваши ключи идентичности на телефоне и хранит секрет в связке ключей iOS, доступный только на этом телефоне после первой разблокировки. Оно также создаёт ключ устройства этого телефона в Secure Enclave. Оно показывает короткий фрагмент вашего открытого ключа, чтобы ключ можно было узнать с первого взгляда.
  4. Exchange codes. Покажите свой QR-код собеседнику или отсканируйте его код. Этот шаг можно пропустить и добавить контакты позже.

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

Приглашение на ретранслятор закрепляет идентичность сервера сразу после подтверждения. В разделе «Настройки → Подключение → Invite someone to this relay» приглашением можно поделиться: любой, у кого оно есть, может подключиться к вашему ретранслятору, но не может читать сообщения. Без приглашения приложение запоминает идентичность сервера после первого подключения. Если она меняется без передачи, подписанной старой идентичностью, приложение прекращает подключаться и сообщает об этом.

В настройках подключения можно ввести идентичность, которую дал оператор сервера (rk:1:…), и включить Require a saved server identity, чтобы приложение не доверяло первому подключению.

Экран Add Contact в rChat с вариантами Scan QR и Enter Manually Экран Add Contact в rChat с вариантами Scan QR и Enter Manually
Добавление контакта
Экран My QR Code в rChat с кнопкой Copy под кодом Экран My QR Code в rChat с кнопкой Copy под кодом
Ваш код

В списке контактов выберите добавление контакта, затем:

  • Scan QR: отсканируйте код собеседника; или
  • Enter manually: вставьте код контакта, который он вам скопировал, или заполните его имя, ключ идентичности и ключ согласования.

Добавление человека по его коду принимает его и сохраняет его ключи, включая его ключ устройства, который позволяет rChat автоматически повторно отправлять потерянные сообщения. Вставленный код задаёт ключ устройства, только если добавляет совершенно новый контакт; для уже существующего контакта отсканируйте его код лично. rChat не будет общаться с ним под другими ключами: если ретранслятор предъявит другие ключи, контакт показывает Keys don’t match, пока вы снова не отсканируете его код.

Разговор открывается, когда вы оба добавили друг друга или один из вас принял запрос другого.

Чтобы позже поделиться своим кодом, откройте его в настройках; там же его можно скопировать как текст.

Запрос на переписку в rChat с вариантами Accept, Delete и Block Запрос на переписку в rChat с вариантами Accept, Delete и Block
Запрос

Тот, у кого есть ваш код, но кого вы не приняли, появляется в неприметной строке Requests в чатах. Он не видит, в сети ли вы, и ничего не получает от вас, пока вы не примете запрос. Запрос может содержать одно короткое первое сообщение.

Запрос можно принять, удалить или заблокировать. Затем Contact Info показывает, откуда взялись ключи: Keys from their code или Keys from their first message. Для контакта, пришедшего через запрос, сравните коды безопасности или отсканируйте его код лично.

Экран кода безопасности в rChat с 60 цифрами, разбитыми на группы Экран кода безопасности в rChat с 60 цифрами, разбитыми на группы
Код безопасности

В Contact Info есть строка Safety number. Нажмите View, чтобы увидеть все 60 цифр. Сравните каждую группу с собеседником лично или по телефону (не сравнивайте, пересылая номер в rChat), затем нажмите Mark as compared.

Чтобы сравнить по QR, нажмите Show code на одном телефоне и Scan their safety number на другом. rChat сравнит номера сам и предложит Mark as compared, если они совпадают.

Если ключи собеседника позже изменятся, отметка снимается.

Поле ввода и заголовок чата показывают, что происходит:

ЗаголовокПодсказка в поле вводаЗначение
EncryptedMessageПодключено к ретранслятору, сеанс с этим собеседником есть.
Connecting…Connecting — messages will queueПодключено к ретранслятору, сеанс ещё не установлен.
OfflineNot connected — messages will queueНет подключения к ретранслятору.

Отправка доступна в любом состоянии. Сообщения сохраняются на телефоне и отправляются, когда подключение и сеанс готовы.

Каждое исходящее сообщение показывает одно из: Sending (отправляется), Sent (ретранслятор его принял), Delivered (сохранено на телефоне собеседника), Read (прочитано), Not delivered (телефон собеседника не смог его прочитать), Not confirmed (подтверждение ретранслятора не пришло вовремя) или Failed to send (не удалось отправить). Уведомления о доставке и прочтении зашифрованы сквозным шифрованием и приходят чуть позже, небольшими пакетами.

Перезапуск приложения не теряет ни одного сообщения, принятого ретранслятором, с ограничениями, описанными на странице Доставка и восстановление. Если собеседник переустанавливает rChat, сообщения, которые его телефон не смог прочитать, отправляются повторно автоматически с пометкой Resent, если его ключ устройства был закреплён из его кода (сканированием лично или вставкой, которой вы его впервые добавили); иначе они показывают Not delivered с кнопкой Resend. См. Доставка и восстановление.

  • Текст, фотографии и голосовые сообщения до 60 секунд. Всё зашифровано сквозным шифрованием и дополнено до размерной корзины.
  • Проведите по сообщению, чтобы ответить на него.
  • Сообщения хранятся на телефоне в зашифрованном виде, с ключом в связке ключей iOS. Базы данных и медиафайлы rChat исключены из резервных копий устройства.
  • Входящие медиафайлы проверяются перед показом: слишком большие изображения отклоняются, остальные перекодируются, голосовые сообщения длиннее 5 минут отклоняются, очень длинные тексты обрезаются.
Экран Settings в rChat Экран Settings в rChat
Настройки
  • Server. Измените URL сервера и выберите Save & Reconnect.
  • Identity. Показывает фрагмент вашего открытого ключа.
  • Rotate keys. Создаёт новые ключи для вашей учётной записи и сообщает контактам уведомлением, подписанным текущими ключами, чтобы разговоры продолжались. Ротация возможна раз в сутки, и ваши коды безопасности со всеми меняются. rChat доходит с новыми ключами максимум до 90 контактов в сутки. Ротация не возвращает украденную учётную запись: если ваш телефон или ключи могли быть украдены, используйте Reset Identity.
  • Reset Identity. Удаляет с телефона вашу идентичность, ключ устройства, настройки сервера и сохранённые данные. Вы начинаете заново без контактов, которым придётся добавить ваш новый код.
  • Extra traffic protection (по умолчанию выключено). Отправляет небольшие фиктивные сообщения, пока rChat открыт. Это расходует больше трафика и батареи, лишь немного затрудняет анализ времени ваших сообщений и позволяет людям, с которыми у вас открыты разговоры, понять, когда rChat открыт.
  • Incognito keyboard (по умолчанию выключено). Отключает автокоррекцию и подсказки в чатах.

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

Остаётся «Not connected» или «Connecting…»

  • Проверьте URL сервера, включая точный путь WebSocket. При неверном пути ретранслятор отдаёт сайт-приманку, и приложение не может подключиться.
  • Используйте wss://.
  • Если ретранслятор только что настроен с автоматическими сертификатами, дождитесь выпуска первого сертификата и убедитесь, что он не остался в режиме staging.

«This server couldn’t prove its identity»

Что-то перед ретранслятором завершает TLS. Оператор должен дать ретранслятору завершать TLS самому (см. За TCP-фронтендом).

Идентичность сервера изменилась

Ретранслятор предъявил другую идентичность без подписанной передачи. Прежде чем доверять, спросите оператора.

Контакт остаётся в «Connecting…»

  • Вы оба должны пользоваться одним ретранслятором.
  • Вы оба должны принять друг друга: сканированием кодов или принятием запроса одним из вас.
  • Телефон собеседника должен хотя бы раз подключиться, чтобы его ключи были опубликованы.

Сообщения приходят с задержкой после того, как приложение было в фоне

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