Реализация Cross-Device Copy-Paste через мобильное приложение

TRUETECH занимается разработкой, поддержкой и обслуживанием мобильных приложений iOS, Android, PWA. Имеем большой опыт и экспертизу для публикации мобильных приложений в популярные маркеты Google Play, App Store, Amazon, AppGallery и другие.
Разработка и поддержка любых видов мобильных приложений:
Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

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

Предлагаемые услуги
Показано 1 из 1 услугВсе 1735 услуг
Реализация Cross-Device Copy-Paste через мобильное приложение
Средняя
~3-5 рабочих дней
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    756
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    624
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1054
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    947
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    862
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    445

Реализация Cross-Device Copy-Paste через мобильное приложение

Скопировать текст на телефоне — вставить на ноутбуке. Звучит просто, но реализация натыкается на ограничения буфера обмена на обеих платформах и требует серверного компонента. Нативный универсальный буфер обмена (Apple Universal Clipboard) работает только в экосистеме Apple и только при включённом Handoff. Для кросс-платформенных сценариев (iOS → Android, мобильный → десктоп) нужен другой подход.

Apple Universal Clipboard: когда работает само

Если оба устройства — Apple, вошли под одним Apple ID, и включён Handoff — UIPasteboard.general на iOS автоматически синхронизируется через iCloud. Ничего реализовывать не нужно. Но это только для текста и изображений, с задержкой до 30–60 секунд, и работает только в пределах Apple-экосистемы.

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

Архитектура кросс-устройственного буфера

Минимальная схема: сервер хранит буфер обмена пользователя, клиенты синхронизируются через WebSocket или polling.

// Серверная часть: простое хранилище с TTL
type ClipboardEntry = {
  userId: string;
  content: string;
  contentType: 'text' | 'image' | 'file';
  mimeType?: string;
  expiresAt: number; // unix timestamp
  deviceId: string; // откуда скопировали
};

TTL — обязателен. Буфер обмена не должен хранить данные вечно: чувствительная информация (пароли, токены, карточные данные), которую пользователь скопировал, должна удаляться. 30–120 минут — разумный TTL для большинства сценариев.

Нативный буфер обмена в React Native

import Clipboard from '@react-native-clipboard/clipboard';

// Копирование с синхронизацией на сервер
const copyToCloudClipboard = async (text: string) => {
  // Сначала в локальный буфер — мгновенно
  await Clipboard.setString(text);

  // Параллельно отправляем на сервер
  await api.clipboard.push({
    content: text,
    contentType: 'text',
    deviceId: getDeviceId(),
  });
};

// Вставка: сначала проверяем облачный буфер
const pasteFromCloudClipboard = async (): Promise<string> => {
  const [localContent, cloudEntry] = await Promise.all([
    Clipboard.getString(),
    api.clipboard.getLatest(),
  ]);

  // Выбираем более свежий
  if (cloudEntry && cloudEntry.updatedAt > localTimestamp) {
    return cloudEntry.content;
  }
  return localContent;
};

Контент не только текст

Изображения: загружаем в S3/CDN, в буфере храним только URL + метаданные. Размер изображения в буфере — до 10 МБ, ограничиваем на клиенте. Файлы: аналогично, URL для скачивания.

На iOS UIPasteboard поддерживает типы через UTType. При копировании изображения в нативное приложение нужен нативный модуль, который читает UIPasteboard.general.image и кладёт его в облачный буфер. @react-native-clipboard/clipboard в базовой комплектации не поддерживает изображения — патчим или пишем нативный модуль.

Уведомление о новом контенте в буфере

Push-уведомление при появлении нового контента в буфере — плохой UX: пользователь сам только что что-то скопировал, зачем ему пуш? Лучше: индикатор в интерфейсе при открытии приложения или тихая синхронизация через background fetch.

WebSocket-подход: при открытии приложения подписываемся на канал пользователя. Когда с другого устройства приходит новый буфер — показываем non-blocking banner «Скопировано с MacBook: "текст..."».

Безопасность: что не должно попасть в облачный буфер

Детект чувствительного контента перед отправкой на сервер:

  • Regex на номера карт (Luhn-валидация): не отправлять, очистить через 30 сек.
  • Regex на пароли в формате password: xyz — не отправлять.
  • Очень длинные строки (>100 KB) — вероятно, не то, что нужно в буфере.

Шифрование: контент буфера шифруем ключом, производным от пользовательского пароля или device key. Сервер хранит зашифрованный blob — не может читать содержимое.

Оценка

Кросс-устройственный буфер обмена (текст + изображения) с E2E-шифрованием, WebSocket-уведомлениями и TTL: 3–5 недель.