Создание собственной облачной синхронизации контактов Андроид
В этой статье будет рассказано, как сделать свое собственное облако для синхронизации контактов и календаря для андроида. Зачем это нужно? Хотя бы для того, чтобы не зависеть от Google, ведь неизвестно (особенно в свете раскрытий действий крупных корпораций), как используются данные, которые мы сами предоставляем компаниям, а также неприятно, если вас взломают и у злоумышленников окажутся все данные.
Итак, в результате всех действий мы получим синхронизацию контактов между нашим облаком и устройствами на Андроид. Для этого нам понадобиться компьютер, который находится у вас дома (можно использовать и выделенный сервер где-нибудь на хостинге, но для простоты рассматриваем вариант с компьютером дома), домашняя W-Fi сеть и набор программ из сервера Wamp и CalDAV сервера Baikal.
Сначала скачиваем и устанавливаем Wamp сервер (в зависимости от разрядности вашей ОС), установка проста-соглашаемся с лицензионным соглашением, а затем Далее несколько раз. По умолчанию он ставится на диск С в папку wamp для 32 разрядных ОС или wamp64 для 64 разрядных.
Далее нужно запустить Wamp сервер, чтобы проверить, что он работает, иконкой на рабочем столе. Если все нормально, появится иконка в трее и она будет зеленого цвета. При этом во время запуска сервера Apache может появиться окно с запросом разрешения доступа от Брандмауера Windows, в нем нужно разрешить доступ. При установке на Windows 7 32 разрядную, у нас возникла ошибка при запуске Apache, он сообщал об ошибке vcruntime140.dll. Если вдруг у вас возникнет такая же, нужно просто установить Microsoft Visual C++ Runtime 2015. Если иконка так и не становится зеленой и пишется, что запущен только один сервис – mysql, а не apache, нужно нажать по иконке Wamp в трее, выбрать Apache-Service Administration—nstall Service, появится консольное окно, где будет написано, что порт 80 свободен и предложено нажать Enter для установки сервиса. И после этого надо снова запустить Wamp иконкой с рабочего стола и иконка в трее должна стать зеленой:
Затем нужно в том же меню в разделе PHP-Version выставить версию PHP 7 вместо 5.6. На этом первый этап закончен.
Скачиваем сервер Байкал 0.4.6, это обычный архив, в котором находится папка Baikal. Ее нужно скопировать в папку C:\wamp\www или C:\wamp64\www (смотря какой разрядности ОС) чтобы в итоге получилось так:
После этого можно приступать к настройке Байкала. Сначала нужно узнать ip адрес своего компьютера, нажимаем правой кнопкой мыши по значку мониторчика в трее и заходим в Центр управления сетями и общим доступом, далее жмем слева ссылку Управление параметрами адаптера, далее нажимаем 2 раза мышью на подключение по локальной сети (или по беспроводной, если компьютер подключен через нее) и в открывшемся окошке кнопку Сведения и видим что-то похожее на:
Запоминаем или записываем себе этот адрес, он нам пригодится.
Создадим базу данных, которую будет использовать Baikal, для этого в меню Wamp в трее выбираем пункт phpmyadmin, откроется браузер с запросом логина и пароля, вводим root без пароля и жмем ОК, откроется окно:
В нем заходим в раздел Учетные записи пользователей и жмем ссылку Добавить учетную запись пользователя
Сочиняем пользователя (в примере baikal) и пароль (в примере baikal1, но лучше задать посложнее) и вводим их в окно, также ставим галку о создании базы данных с таким же именем как у пользователя и предоставлении на нее привилегий затем внизу жмем кнопку Вперед:
База данных создана, выбираем ее слева в списке баз данных, заходим в раздел операции и внизу ставим сравнение utf8_unicode_ci и жмем кнопку Вперед:
Дальше открываем любой браузер и пишем в адресной строке http://ваш_ip_адрес/baikal/html/ и нажимаем на enter. Должно открыться такое окошко, в котором надо заполнить часовую зону и сочинить админский пароль именно от Байкала:
Жмем Save changes и переходим на следующую страницу, где надо поставить галку Use MySQLи заполнить поля:
Если все введено корректно, дальше появится такое окно в котором надо нажать зеленую кнопку:
Вводим данные от администрирования байкала:
И попадаем в админку Байкала:
Заходим во вкладку Users and resources, жмем кнопку Add user, откроется окно, в котором надо заполнить все данные о создаваемом пользователе:
И будет создан наш пользователь, данные которого мы будем использовать при подключении аккаунта в Андроид. Для него уже создана Адресная книга по умолчанию и Календарь по умолчанию.
Теперь добавим новый аккаунт в Андроид устройство, для этого надо установить программу DAVdroid, затем запустить ее, нажать красный + внизу, выбрать вход через URL и имя пользователя, ввести в полу Base URL: http://ip_адрес_компьютера/baikal/html/dav.php/ в поле имя пользователя-соответственно имя пользователя, созданного в предыдущем шаге и его пароль. Будет добавлен аккаунт, можно нажать на значок синхронизации и она будет произведена, пока правда контактов на сервере нет. Также в настройках (значок шестеренки) можно поставить галку Sync over WIFi only и задать имя своей домашней WiFi сети, ведь все равно синхронизация без особых настроек будет работать только в ней. Также чуть ниже в разделе CarDAV нужно задать параметр Groups are per-contact categories. На этом настройка Андроида закончена, нужно перенести контакты.
Теперь настало время перенести наши контакты из учетной записи Google в Байкал. Для этого есть 2 варианта-можно или экспортировать их через стандартную звонилку андроид на карту памяти, а затем импортировать в учетную запись байкала или использовать стороннюю программу, например emClient. Рассмотрим 2й метод.
Итак, ставим emClient, добавляем учетную запись Google (Меню-Инструменты-Учетные записи нажать на +), выбрать Контакты-Google контакты, ввести свои данные. Произойдет синхронизация контактов с учеткой Google, они добавятся в меню слева. Затем, точно также добавляем учетную запись нашего сервера Байкал, выбрав вместо Google contacts – CardDAV, вводим точно также адрес нашего сервера, пользователя и пароль и видим слева в меню появившуюся учетную запись Байкала (она выглядит как Имя пользователя-Addressbooks-Default address book, название адресной книги можно поменять в настройках админки Байкала). Вот как это выглядит (желтым отмечен аккаунт Байкала, он переименован из baikal в contact190):
А затем все очень просто-перетаскиваем мышкой контакты из учетки Gmail в адресную книгу Байкала и они синхронизируются с нашим сервером, перетаскивается и вся информация связанная с контактом, единственное фотографии перетаскиваются с плохим качеством, их нужно перезагружать по хорошему.
После того как все заработает, можно немного настроить все это под себя, поменять название адресных книг, выставить категории контактам (это тоже удобно делать в emClient):
Спасибо за внимание и если Вам понадобится компьютерная помощь/обслуживание компьютеров (я конечно понимаю, что такую статью, скорее всего, будут читать те, кто сам что хочешь сделает с компом, но все же, а вдруг), обращайтесь, для форумчан сделаю скидку.
Источник
Простой клиент-сервер на Android (интернет-мессенджер)
Важно. Все написанное ниже не представляет собой какой либо ценности для профессионалов, но может служит полезным примером для начинающих Android разработчиков! В коде старался все действия комментировать и логировать.
Поехали. Многие мобильные приложения (и не только) используют архитектуру клиент-сервер. Общая схема, думаю, понятна.
Уделим внимание каждому элементу и отметим:
- сервер — представляет собой некую программу, работающую на удаленном компьютере, и реализующую функционал «общения» с приложениями-клиентами (слушает запросы, распознает переданные параметры и значения, корректно отвечает на них);
- клиент — в нашем случае, программа на мобильном устройстве, которая умеет формировать понятный серверу запрос и читать полученный ответ;
- интерфейс взаимодействия — некий формат и способ передачи/получения запросов/ответов обеими сторонами.
Неважно, как реализован любой из этих элементов, все они в любом случае присутствуют. Давайте реализуем примитивный сервер и Android клиент, работающий с ним. Как пример, будем использовать любой популярный мобильный интернет-мессенджер (Viber, ICQ), а приложение условно назовем «интернет-чат».
Схема взаимодействия следующая:
Клиент, установленный на устройстве А, посылает сообщение для клиента, установленного на устройстве Б. И наоборот. Сервер играет роль связующего звена между устройством А и Б… С, Д… и т.д. Также он играет роль «накопителя» сообщений, для их восстановления, на случай удаления на одном из клиентских устройств.
Для хранения сообщений используем SQL БД как на сервере, так и на устройствах-клиентах (в принципе, вся работа клиентов интернет-мессенджеров и сводится к постоянной синхронизации локальной и удаленной БД с сообщениями). Дополнительно, наш интернет-чат будет уметь стартовать вместе с запуском устройства и работать в фоне. Взаимодействие будет происходить путем HTTP запросов и JSON ответов.
Более логично, если синхронизация происходит через порт/сокет, это с одной стороны упрощает задачу (не нужно циклично слать HTTP запросы на проверку новых сообщений, достаточно проверять состояние прослушиваемого сокета), но с другой стороны, это усложняет создание серверной части приложения.
Делаем сервер
Для реализации «сервера», нам нужно зарегистрироваться на любом хостинге, который дает возможность работы с SQL и PHP.
Создаем пустую SQL БД, в ней создаем таблицу.
- author — автор сообщения;
- client — получатель сообщения;
- data — время и дата получения сообщения на сервере;
- text — сообщение.
В двух следующих файлах необходимо изменить переменные, содержащие данные для доступа к БД, на свои, полученные Вами при регистрации Вашего«сервера».
Структура запросов к api:
- обязательный атрибут action — может быть равен select (сервер ответит списком записей из своей БД), insert (сервер добавить новую запись в свою БД), delete (сервер очистит свою БД)
- если action=insert, нам нужно будет передать дополнительные параметры: author (кто написал сообщение), client (кому адресовано сообщение), text (сообщение)
- action=select может содержать дополнительный параметр data, в этом случае ответ сервера содержит не все сообщения из БД, а только те, у которых время создания позднее переданного
Примеры:
- chat.php?action=delete – удалит все записи на сервере
- chat.php?action=insert&author=Jon&client=Smith&text=Hello — добавит на сервере новую запись: автор Jon, получатель Smith, содержание Hello
- chat.php?action=select&data=151351333 — вернет все записи, полученные после переданного времени в long формате
Клиентская часть
Теперь структура Android приложения:
В фоне работает FoneService.java, который, в отдельном потоке, каждые 15 секунд делает запрос на сервер. Если ответ сервера содержит новые сообщения, FoneService.java записывает их в локальную БД и отправляет сообщение ChatActivity.java о необходимости обновить ListView, с сообщениями. ChatActivity.java (если она в этот момент открыта) получает сообщение и обновляет содержимое ListView из локальной БД.
Отправка нового сообщения из ChatActivity.java происходит сразу на сервер, минуя FoneService.java. При этом наше сообщение НЕ записывается в локальную БД! Там оно появится только после получения его назад в виде ответа сервера. Такую реализацию я использовал в связи с важным нюансом работы любого интернет-чата — обязательной группировкой сообщений по времени. Если не использовать группировку по времени, будет нарушена последовательность сообщений. Учитывая, что клиентские приложения просто физически не могут быть синхронизированы с точностью до миллисекунд, а возможно будут работать даже в разных часовых поясах, логичнее всего будет использовать время сервера. Так мы и делаем.
Создавая новое сообщение, мы передаем запросом на сервер: имя автора сообщения, имя получателя сообщения, текст сообщения. Получая эту запись назад, в виде ответа сервера, мы получаем то, что отправляли + четвертый параметр: время получения сообщения сервером.
Источник
Веб-сервер на старом смартфоне Android
Бывает такое, что смартфон становится ненужным — например, на нём разбивается экран или он просто старенький, тормозит даже браузер. Что делать с таким гаджетом, не выбрасывать же его? В самом деле, американцы летали на Луну с компьютерами, у которых характеристики много хуже, чем в вашем старом смартфоне. Скорее всего, в нём 4−8 процессорных ядер, 2−4 гигабайта оперативной памяти, блок бесперебойного питания с аккумулятором. Не слабее, чем некоторые компьютеры.
Попробуем найти этому смартфону полезное применение.
Рассматриваем варианты
Первый вариант, который приходит в голову — установить на телефон Linux-окружение и какой-нибудь полезный софт, который будет работать в «фоновом режиме» на пользу домашнему хозяйству. Что это может быть?
Ясно, что телефон не сможет работать как медиасервер и обрабатывать видеопотоки, для этого у него слишком слабый процессор.
Теоретически можно подключить к нему внешний HDD (тоже остался от сломанного ноутбука, для него куплен специальный корпус-переходник с интерфейсом USB). Даже на ёмкой карте microSD он вполне может работать как файловое хранилище или сервер для бэкапов, места хватит. Правда, карты microSD вряд ли можно посоветовать как надёжное хранилище, они часто выходят из строя.
Простая синхронизация
Если поднимать на телефоне сервер для бэкапов или файловый сервер, то самый простой вариант — это установить программу Syncthing.
Syncthing выполняет непрерывную синхронизацию файлов между двумя или более компьютерами в режиме реального времени. В таком варианте синхронизации отсутствует центральный сервер, а все компьютеры участвуют в синхронизации как бы peer-to-peer. Синхронизация идёт по дате изменения файла, ещё имеется поддержка синхронизации на уровне блоков, т.е. при небольших изменениях в файле, будут синхронизированы только изменившиеся блоки, а не весь файл сразу. Трафик шифруется по TLS (transport layer security). Опять же, программа с открытым исходным кодом, что говорит в пользу надёжности и безопасности такого решения.
В любом случае для персональных компьютеров и ноутбуков в доме нужно резервное хранилище, так что это вполне подходящий вариант.
Syncthing выпускается под все распространённые операционные системы: Linux, Windows, macOS, FreeBSD, OpenBSD, NetBSD, Dragonfly BSD, Illumos, Solaris. Ну и Android, конечно. То есть можно выполнять синхронизацию файлов между всеми этими устройствами, если поставить клиент на каждое из них. Затем в программе на компьютере добавляем ID устройства — и они синхронизируются.
Syncthing на компьютере
Затем остаётся выбрать папки для синхронизации на компьютере и телефоне.
Syncthing на телефоне
Потом программа может постоянно работать в фоновом режиме. Как вариант, можно установить конкретные условия, при которых она выполняется.
Сервер для резервного копирования под Linux
Можно поставить более серьёзную программу — UrBackup. Это опенсорсный сервер для резервного копирования. Он может работать по такому же принципу, что и Syncthing — постоянно в фоновом режиме отслеживать папки, которые требуется сохранять в резервной копии, но это более серьёзное решение, которое предпочтительно при управлении бэкапами в сети из десятка компьютеров. Система кроссплатформенная и поддерживает дистрибутивы Linux, Windows и Mac OS.
Веб-интерфейс UrBackup
Чтобы заработал UrBackup, нужно установить Linux-окружение. Тут у нас есть два варианта:
- Установить настоящий дистрибутив через Linux Deploy — опенсорсное приложение с открытым исходным кодом для простой и быстрой установки GNU/Linux на Android.
- Установить Linux-окружение Termux.
Первый вариант более сложный. Но теоретически он позволяет более эффективно использовать ресурсы системы.
Обязательное требование — рутованный смартфон (для рутования можно использовать инструмент, например, такой Magisk).
Итак, алгоритм примерно такой, судя по инструкции от Ханны Ли, которая и реализовала этот план.
- Подключаем HDD/SSD к телефону. Можно подключить его USB-кабелем напрямую: в этом случае мы получим максимально возможную скорость. Но на реальном файл-сервере или сервере бэкапов скорость не всегда является самым критичным фактором, разве что на очень больших объёмах чтения/записи. Важнее стабильность. С USB-кабелем гораздо выше риск столкнуться с ошибками ввода-вывода в процессе копирования.
Поэтому для повышения надёжности лучше использовать USB-хаб, в котором есть microUSB для выхода на телефон и стандартный USB для подключения HDD, плюс дополнительный разъём для питания.
В идеале нужно покупать хаб с адаптером Ethernet. Сервер может работать и по WiFi, но кабельное подключение надёжнее.
USB-хаб с разъёмом Ethernet и выходом microUSB
Примонтировать HDD к телефону, то есть сделать его доступным для операционной системы на телефоне. Если не планировать форматирование диска в будущем, то его можно сразу добавить в mounts — и он будет монтироваться при каждой загрузке. После примонтирования его уже не получится форматировать, да это обычно и не нужно. Лучше монтировать его как логический диск, а не физическое устройство, потому что в последнем случае его имя ( /dev/block/sdX ) может измениться после перезагрузки, а это нежелательно. Если примонтировать его как логический диск ( /dev/sdX ), то имя не изменится.
Найти подключённый HDD, то есть узнать его имя в системе, можно командой lsblk .
Создаём рабочую директорию, устанавливаем стартовый скрипт, запускаем сервис и создаём крон для него. После этого сервер будет доступен через веб-интерфейс по адресу http://YOUR_SERVER_IP:55414 .
Termux
Возможно, всё это можно сделать без рутования, с использованием Linux-окружения Termux. Проверим, так ли это.
Termux — это бесплатный эмулятор консоли и Linux-окружение под Android, которое устанавливается как обычное приложение и не требует рутового доступа, включает в себя множество пакетов операционной системы Linux. В базовом формате там установлен минимум, дополнительные пакеты можно организовать при помощи диспетчера пакетов «pkg» (аналоге apt). Это самый удобный способ запустить на Android практически любые линуксовые программы. Лучше устанавливать его с F-Droid, а не из Google Play.
Изначально Termux устанавливается в виде «голого» эмулятора. При первом запуске загружается небольшая базовая система, а все нужные пакеты можно установить с помощью менеджера пакетов apt , стандартного для Debian и Ubuntu. Но его тоже нужно будет установить с помощью встроенного пакетного менеджера pkg .
В нашем случае можно сразу установить apt:
Затем с его помощью установить wget, ну или использовать родную команду pkg :
Потом можно установить тот же UrBackup, другой файл-сервер или сервер резервного копирования на свой выбор.
К примеру, можем поставить веб-сервер nginx:
После этого запускаем веб-сервер:
Если открыть браузер на смартфоне и набрать localhost:8080 , то мы увидим работающий веб-сервер:
Теперь можно скопировать в рабочую директорию nginx файлы HTML — и на телефоне будет полноценный сайт, который можно открыть для общего доступа через интернет. Тогда у нас будет собственный сервер и собственный хостинг, мы не платим никакому провайдеру, кроме сотового оператора, и можем публиковать в интернете что угодно. В принципе, сайт будет всем доступен до тех пор, пока телефон подключён к сотовой сети, на нём открыта сессия Termux, а в ней запущен nginx. Главное, чтобы сотовый оператор не блокировал этот трафик, потому что мы формально можем нарушать его условия обслуживания.
Конечно, для надёжного хостинга лучше рутануть смартфон и установить нормальный дистрибутив через Linux Deploy. Но и в Termux всё работает, как видим.
Вывод: Таким образом, даже из старого смартфона Android можно сделать адекватный, полнофункциональный многоядерный Linux-сервер на ARM-архитектуре. Если подключить внешний HDD/SDD, то он будет работать как хранилище файлов, сервер резервного копирования для домашней сети или веб-сервер, для ваших личных нужд.
НЛО прилетело и оставило здесь промокоды для читателей нашего блога:
— 15% на все тарифы VDS (кроме тарифа Прогрев) — HABRFIRSTVDS .
Источник