Страница 1 из 23
[Apple] Использование Apple (find my device) в GPS-трэкере
Добавлено: Пт мар 14, 2014 3:52 am
tammat
Добрый день, всем!
Нашел интересную библиотеку
https://github.com/sinky/php-location-tracking-icloud по извлечению местоположений из iCloud(Aplle)
Принцип работы
В поле deviceID таблицы gpsdevices заносятся данные типа
[icloud_username]:[icloud_password]:[Id прибора в списке icloud, начиная с 0]
Из этой таблицы выбираются данные о приборах Apple(я в поле Title внес Apple
далее несколько модифицировал код gps.php
1.Выборка по всем приборам apple
2. Запрос к iCloud осуществляется со стороны MJ
3. Добавил в cron.
В gps.php есть следующий код
Код: Выделить всё
if ($device[$iD]['USER_ID']) {
$user=SQLSelectOne("SELECT * FROM users WHERE ID='".$device[$iD]['USER_ID']."'");
if ($user['LINKED_OBJECT']) {
setGlobal($user['LINKED_OBJECT'].'.Coordinates', $rec['LAT'].','.$rec['LON']);
setGlobal($user['LINKED_OBJECT'].'.CoordinatesUpdated', date('H:i'));
setGlobal($user['LINKED_OBJECT'].'.CoordinatesUpdatedTimestamp', time());
setGlobal($user['LINKED_OBJECT'].'.BattLevel', $rec['BATTLEVEL']);
setGlobal($user['LINKED_OBJECT'].'.Charging', $rec['CHARGING']);
$prev_log=SQLSelectOne("SELECT * FROM gpslog WHERE ID!='".$rec['ID']."' AND DEVICE_ID='".$device[$iD]['ID']."' ORDER BY ID DESC LIMIT 1");
if ($prev_log['ID']) {
$distance=calculateTheDistance ($rec['LAT'], $rec['LON'], $prev_log['LAT'], $prev_log['LON']);
if ($distance>100) {
//we're moving
//DebMes("Distance: ".$distance. " (point A: ".$rec['LAT'].":".$rec['LON']." point B: ".$prev_log['LAT'].":".$prev_log['LON'].")");
setGlobal($user['LINKED_OBJECT'].'.isMoving', 1);
clearTimeOut($user['LINKED_OBJECT'].'_moving');
setTimeOut($user['LINKED_OBJECT'].'_moving', "setGlobal('".$user['LINKED_OBJECT'].".isMoving', 0);", 15*60); // stopped after 15 minutes of inactivity
}
}
}
}
1.Как использовать данный функционал, что бы хранить логины и пароли в deviceID.
2. Хотелось бы добавить список типов приборов (Apple,Andoroid, WinMobile) при внесении информации о приборах
3. Как бы бы этот скрипт запускать через cycle.php c определенной периодичностью.
Спасибо
Re: Использование Apple (find my device) в GPS-трэкере
Добавлено: Пт мар 14, 2014 9:48 am
LutsenkoDenis
Могу предложить зарефакторить таблицы gpsdevices, gpsactions, gpslocations и gps_log.
Добавить еще одну или возможно несколько табличек типа device_type и связать все вместе, удалив дублирующиеся поля.
Хранить пароли в поле device_id считаю неправильным решением, хотя и имеющим право на существование от безысходности
Лучше сделать отдельную таблицу или поля в существующей таблице и дописать функционал.
С определенной периодичностью либо в крон, что железобетонно будет выполняться, либо что-то типа onNewMinute. использовать.
Re: Использование Apple (find my device) в GPS-трэкере
Добавлено: Пт мар 14, 2014 1:42 pm
LutsenkoDenis
Эх, не удержался...
Черновой вариант, так сказать.
Ссылка на модель, так как svg не показывает.
Коментарии к модели:
Таблицы:
- 01. USERS (Пользователи) - список пользователей MDM
02. DEVICE_TYPE(Виды устройств) - Виды доступных в MDM устройств(Apod, Android, Nokia и т.д.)
03. DEVICE (Устройства) - Описание устройства, id и за кем из пользователей оно закреплено
04. EXT_APP (Внешние приложения) - Внешние приложения от которых приходят данные
05. EXT_APP_ICOUD (Внешнее приложение iCloud) - Набор данных относящийся к iCloud'у (логин, пароль и т.д)
06. EXT_DEVICE (Устройства внешних приложений) - Таблица для привидения соответствий ID устройства внешнего приложения и ID устройства в MDM
07. DEVICE_LOCATION (Местоположение устройства) - Текущие координаты устройства
08. DEVICE_LOCATION_H (История местоположений устройства) - История перемещений устройства
09. POS (Точка интереса) - Координаты магазина или еще какого объекта
10. VPOS_USER - Расстояние от пользователя до точки интереса.
11. VUSER_ACTION - Действие которое будет срабатывать при нахождении пользователя на указанном расстоянии до точки интереса.
Есть какие-либо замечания, пожелания или комментарии?
Re: Использование Apple (find my device) в GPS-трэкере
Добавлено: Ср дек 10, 2014 5:24 pm
zelevova
UPD: не актуально. Идем в маркет дополнений (iDevices). Там все проще. или в тему
viewtopic.php?f=5&t=4930
Наконец дошли руки и я написал функцию для сабжа.
Для ее использования нужно извлечь прикрепленный архив в ROOT/lib (то есть добавить саму подключаемую функцию), а дальше использовать в коде:
Код: Выделить всё
findMyiPhone($AppleID, $ApplePass, $id, $timeout); //Ищет устройство и заполняет данные для приложения GPS-трэкер, а так же обновляет объект User привязанный в приложении
soundToMyiPhone($AppleID, $ApplePass, $subject, $id); // воспроизводит звуковое оповещение на устройстве
messageToMyiPhone($AppleID, $ApplePass, $message, $subject, $sound, $id); // Выводит сообщение на устройстве, звуковое сопровождение опционально
Где:
- AppleID - понятно.
ApplePass - пароль к AppleID
id - номер устройства, по умолчанию 0, если устройство к AppleID привязано одно, можно не указывать.
timeout - таймаут поиска, по умолчанию 240.
subject - текст заголовка, по умолчанию пустой
message - текст сообщения.
sound - воспроизводить звук, по умолчанию true.
Параметры которые заданны по умолчанию, можно не указывать.
Теперь умный дом может вывести список покупок прямо на экран устройства Apple когда ты приехал в магазин.
Обнаружилось что при заходе с нового устройства, компания apple первые 100 раз шлет письмо с предупреждением, а потом устает. Как это побороть пока не знаю.
PS: Засыл писем вроде нашел где отключается. Кто бы проверил на свежей связке...
UPD: не актуально. Идем в маркет дополнений. Там все проще.
Re: Использование Apple (find my device) в GPS-трэкере
Добавлено: Ср дек 10, 2014 6:49 pm
sergejey
Очень интересно... А как часто можно опрашивать этот сервис? Может какие лимиты есть?
Re: Использование Apple (find my device) в GPS-трэкере
Добавлено: Ср дек 10, 2014 9:11 pm
Vovix
zelevova писал(а):Наконец дошли руки и я написал функцию для сабжа.
Для ее использования нужно извлечь прикрепленный архив в ROOT/lib (то есть добавить саму подключаемую функцию), а дальше использовать в коде:
Где:
AppleID - понятно.
ApplePass - пароль к AppleID
id - номер устройства.
Функция заполняет все возможные поля для приложения GPS-трэкер (код заполнения взят из gps.php)
Осталось только придумать как хранить пароли не в коде.
Прошу тестировать.
Очень нужная вещь!
А то сейчас
Btraced, если включен, садит батарею за ЕДИНИЦЫ часов!!!
Пароли AppleID в коде это
ОПАСНО!!!
Re: Использование Apple (find my device) в GPS-трэкере
Добавлено: Чт дек 11, 2014 9:49 am
zelevova
sergejey писал(а):Очень интересно... А как часто можно опрашивать этот сервис? Может какие лимиты есть?
Оставил тестировать на ночь, опрос каждые 15 минут. Пока не забанили
)
Мы вроде как представляемся iPhone'ом, а сервис непосредственно Apple и делаем вид что просто пользователь все время обновляет. Я бывает сам с устройства Apple мониторю когда Жена ко мне едет и обновляю очень часто, так что думаю лимитов нет.
Vovix писал(а):А то сейчас Btraced, если включен, садит батарею за ЕДИНИЦЫ часов!!!
Пароли AppleID в коде это ОПАСНО!!!
Я думаю так батарея будет садиться чуть помедленнее, но не сильно. Ибо gps регулярно опрашивается. Тут важен период опроса, чем реже опрашиваем, тем меньше садиться батарея.
Пароли как вариант хранить в свойствах пользователя. Так они не будут видны в connect
Пока не могу придумать куда их еще запрятать. Может у кого то есть мысли по этому поводу?
Вопрос как фильтровать дублирующие записи. Например за ночь накапливается кучка записей о том что мы дома. Btraced отправляет данные только при перемещении или так же через заданные интервалы?
Re: Использование Apple (find my device) в GPS-трэкере
Добавлено: Чт дек 11, 2014 10:11 am
Vovix
zelevova писал(а):
...Btraced отправляет данные только при перемещении или так же через заданные интервалы?...
Пользую
Btraced регулярно.
Там настраивается и расстояние перемещения, после которого происходит фиксация и отправка
и время, через которое отправлять и фиксировать координаты!
но батарею просто "убивает" буквально за 2-3 часа!
( у меня установлено 200 метров и 2 минуты, больше не интересно, меньше иногда ставлю 100 метров)
А вот приложение "Мои друзья" (родное) у меня всегда работает (и работало) и хватало батареи на 1 день (иногда сутки) стабильно!
Может, конечно, за мной часто ни кто не следил...
Наверно надо пробовать...
И еще такие "прелести" как узнать заряд батареи iPhone, или "в зарядке" или нет, на iPhone средствами
Btraced не передаются, а вот интересно через "Найти iPhone" что-то идет кроме координат?
Re: Использование Apple (find my device) в GPS-трэкере
Добавлено: Чт дек 11, 2014 11:23 am
zelevova
Конечно идет. Обновил функцию. Теперь она в пользователя фиксирует не только координаты, но и заряд в процентах и статус заряжается сейчас или нет.
Еще можно узнать "класс устройства" (iPad, iPhone, iPod, MacBook), "статус устройства" и "модель устройства".
Пока бывает не все данные успевает подтянуть. Видимо нужно таймаут опроса увеличить и проверку на точное позиционирование сделать. Сейчас максимальное время опроса 120 сек.
UPD: за 2 часа мониторинга с интервалом в 2 минуты батарея на полностью заряженном iPade села на 0%. Т.е. не изменила свой заряд совсем. Устройство почти все это время находилось в режиме ожидания для чистоты эксперимента. При таком интервале опроса данные о заряде получаются корректные, при увеличении интервала до 15 минут данные о заряде не всегда успевают обновляться с первого раза.
Добавил поля в объекте пользователь и теперь вызываю в onNewMinute так:
Код: Выделить всё
// Каждые 2 минут
if (!($m%2)) {
findMyiPhone(gg('username.AppleID'), gg('username.ApplePass'));
// можно попробовать переделать что бы передавать просто "username"
}
Сергей насколько безопасно хранить в полях объектов пароли с точки зрения архитектуры системы?
Re: Использование Apple (find my device) в GPS-трэкере
Добавлено: Чт дек 11, 2014 9:31 pm
Vovix
у меня почему-то не работает!!!???
при чем на почту навалилось куча писем от Apple:
Ваш Apple ID использовался для входа в приложение «Найти iPhone»
тестовый запуск вываливается вот с этим:
Код: Выделить всё
Fatal error: Maximum execution time of 60 seconds exceeded in C:\_majordomo\htdocs\lib\findMyiPhone\FindMyiPhone.php on line 174