Рубрики
Без рубрики

Как я переделал AirDrop из iOS на Windows

Airdrop всегда была по -настоящему полезной особенностью экосистемы Apple, так как она позволяет обмениваться текстом, файлы … Tagged с Python, Firebase, Windows, iOS.

AirDrop всегда была по -настоящему полезной особенностью экосистемы Apple, поскольку она позволяет вам легко обмениваться текстом, файлами и изображениями между устройствами Apple. Однако, если вы похожи на меня и предпочитаете использовать компьютер Windows с устройством iOS, нет возможности беспрепятственно обмениваться данными между двумя устройствами, без необходимости отправить электронное письмо себе или что -то в этом роде.

Итак, я придумал эту идею, чтобы воссоздать знаменитую AirDrop iOS, но также доступен для Windows. Архитектура проекта, которую я выбрал, была следующей:

  1. Комплект iOS отправляет данные в базу данных, когда что -то общее
  2. Программа Python на моем компьютере поднимает эти данные
  3. Тогда данные представлены в уведомлении
  4. Если это уведомление нажимается, данные копируются в буфер обмена

Легко, верно?

База данных, которую я выбрал, была База данных Firebase в реальном времени Google, так как это невероятно просто в использовании и совершенно бесплатно. Как только база данных в реальном времени была настроена, мне пришлось сделать ярлык iOS. Интересной особенностью, которая соответствует моим потребностям, была функция «Show in Share Sheets» для ярлыков. Как говорится в названии, он показывает ярлык в меню «Общие», что позволяет создавать ярлык, который делает различные вещи с общими данными в качестве входных данных. Именно то, что мне было нужно!

Как видите, ярлык появляется в общих листах:

Затем ярлык просто сделает запрос на HTTP Post на Firebase, причем ввод ярлыка прошел в теле запроса.

Итак, теперь у меня был ярлык, который мог отправить что -то общее на iOS, Firebase. Теперь мой компьютер просто должен был забрать эти данные.

Перво -наперво, поэтому я начал с создания связи с Firebase. Для этого была необходима единственная зависимость:

import firebase_admin
from firebase_admin import credentials
from firebase_admin import db

Импортируется с помощью пип вот так:

pip install firebase-admin

Затем мой скрипт Python должен был получить аутентификацию, чтобы получить доступ к Firebase, которая была сделана с использованием файла JSON аутентификации. Если вы следите за этой статьей в качестве учебника, метод получения этого файла JSON объясняется Здесь Анкет Итак, вот код для аутентификации:

configFile = 'config.json'
cred = credentials.Certificate(configFile)
app = firebase_admin.initialize_app(cred, {
  'databaseURL': 'myDataBaseUrl' # this is not my actual database URL, for security purposes
})

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

hasGotFirst = False

def listener(data):
  global hasGotFirst
  if hasGotFirst:
    # Here we'll use the fetched data
  hasGotFirst = True

# Here we just listen at the root of the database
db.reference('/').listen(listener)

Затем я хотел, чтобы данные отображались в красивом уведомлении, когда они были получены, а затем скопированы в буфер обмена, когда это уведомление было нажатило. Для этого я добавил еще две зависимости:

from win10toast_click import ToastNotifier # Notifications
import pyperclip # Clipboard

Импортируется с помощью пип вот так:

pip install win10toast-click
pip install pyperclip

Затем сценарий Python отобразит уведомление при получении данных, и скопируют эти данные в буфер обмена в обратном вызове уведомления. Вот полный код:

def listener(data):
  global hasGotFirst
  if hasGotFirst:
    msg = str(data.data['value']) # Get the 'value' property from the data
    toaster.show_toast("Data Sent From Phone", msg, callback_on_click=click, icon_path='')
  hasGotFirst = True

def click(data):
  pyperclip.copy(data)

Так что теперь Airdrop в основном работал! Я мог бы поделиться строкой текста с моего телефона, и это волшебным образом появилось бы в уведомлении на моем компьютере, которое я мог бы скопировать, нажав на него!

Если бы я поделился запиской, содержащей текст «Привет из iOS!», Подобно бы уведомление, как это:

Однако, чтобы сделать процесс еще более гладким, я добавил автоматическое обнаружение URL -адреса, которое добавило еще пару пакетов:

import re
import webbrowser

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

Что касается кода, он просто проверяет на предмет URL -шаблона при получении данных с использованием Re модуль, и если он оценивается на True, этот URL -адрес затем открывается с использованием Webbrowser модуль, как так:

def listener(data):
  global hasGotFirst
  if hasGotFirst:
    msg = str(data.data['value'])
    matches = re.match(r'https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)', msg)
    if matches:
      webbrowser.open(msg)
    else:
      toaster.show_toast("Data Sent From Phone", msg, callback_on_click=lambda val=msg: click(val), icon_path='')
  hasGotFirst = True

И теперь мы полностью закончили! С помощью скрипта Python, работающего в фоновом режиме, теперь я могу с легкостью обмениваться данными между моим iOS -телефоном и компьютером Windows.

Если вам нужен полный исходный код, он доступен на GitHub: https://github.com/oskar-codes/windows-airdrop

Оригинал: “https://dev.to/oskarcodes/how-i-remade-airdrop-from-ios-on-windows-2pa7”