Недавно решил попробовать реализовать идею о том, как можно делиться местоположением через API ВКонтакте с друзьями в режиме, приближенном к реальному времени. На выходе получилось кроссплатформенное Qt-приложение для iOS/Android, веб-приложение для ВКонтакте и парочка pull request’ов для VK API. В этой статье я хотел бы поделиться некоторыми неочевидными моментами реализации, которые, может быть, будут кому-то интересны. Итак, заинтересовавшихся прошу под кат.
Зачем мне вообще это понадобилось
Рано или поздно дети взрослеют. Банальная истина. Вот и моя десятилетняя дочь в один прекрасный день заявила: “Папа, не вози меня больше на машине, я хочу ходить в школу самостоятельно!”. Ну что же, я счел требование справедливым, попросил двухнедельную отсрочку и начал подготовку.
Поскольку я имею некоторый опыт написания приложений, а дочь постоянно таскает в кармане iPhone SE, то в качестве подготовки было решено быстренько написать приложение, которое показывало бы, где дочь находится в данный конкретный момент. Да, я знаю, что сейчас таких приложений довольно много (даже в Google Maps недавно появился подобный функционал), и можно было использовать какое-то готовое решение, но мне было интересно написать что-то свое.
Как ВКонтакте отметить геолокацию в постах с телефона
Почему ВКонтакте?
Поскольку связываться с обработкой и хранением чужих (в потенциально возможной перспективе) персональных данных на своем оборудовании со всеми вытекающими из этого “прелестями” мне бы не хотелось, я задумался, как бы обойтись без собственной серверной части. И тут меня осенило – ведь есть же такой монстр, как ВКонтакте! Он модный, мощный и со своим развитым API, а главное – в нем давно и плотно сидят все наши дети (нельзя сказать, чтобы мне это нравилось, но это реальность). Но черт возьми, Холмс, как мне запихнуть в него данные о местоположении так, чтобы, во-первых, они не показывались там, где не надо, а во-вторых, чтобы можно было регулировать доступ к этим данным, дабы нехорошие педобиры до них не добрались?
На помощь пришли заметки. Да-да, те самые викифицированные заметки, которые некогда (по слухам) были очень популярны, а сейчас находятся в загоне, по большей части перестали отсвечивать в лентах и переехали в отдельный раздел сайта, в который на хромой козе не попадешь. В них можно размещать произвольные текстовые данные, но главное – им можно назначать списки доступа, в которых перечисляются люди и группы, которые могут эту заметку видеть и комментировать.
Общая схема работы приложения в моих глазах стала выглядеть следующим образом:
- Создаем список друзей, с которыми нужно поделиться данными о местоположении (я назвал его «Доверенные друзья»);
- Создаем заметку с определенным именем, даем права на ее просмотр вышеупомянутому списку, записываем туда данные о местоположении и периодически их обновляем;
- Регулярно пробегаемся по списку доверенных друзей, проверяя, не появилась ли и у них заметка с этим определенным именем, если появилась, то пытаемся извлечь из ее содержимого данные о местоположении друга, и, если это удалось, то показываем его на карте;
- .
- PROFIT!
iOS
Поскольку дочь пользуется iPhone, логично было начать реализацию с iOS-версии. С прицелом на кроссплатформенность в качестве фреймворка был выбран Qt, потому что я с ним довольно давно и хорошо знаком, а в качестве движка для карты был выбран старый добрый Open Street Map, для которого в Qt Location есть плагин. Так как приложение изначально создавалось как open source, лицензионные ограничения Qt меня не пугали.
GUI был написан на QML, для работы с ВК я подключил и использовал штатный VK iOS SDK, он написан на Objective C, поэтому его интеграция никаких проблем не вызвала. Работа в фоновом режиме на iOS реализована через Significant Change Location Service. Для снижения энергопотребления приложение следит за активностью перемещений, и если понимает, что человек долго сидит примерно на одном месте (скажем, пришел в школу или в офис), то понижает требуемую точность определения геопозиции, вынуждая ОС переключиться на менее энергоемкие способы ее определения (как правило, по вышкам сотовой связи). Если же приложение понимает, что человек начал активно перемещаться, точность вновь поднимается.
Полный набор исходных текстов iOS-версии доступен на GitHub. Вот пара неочевидных моментов, с которыми я столкнулся в процессе реализации:
Переопределение методов NSApplicationDelegate в Qt-приложении
iOS SDK от ВКонтакте требует добавления вызовов некоторых своих функций в методах application:didFinishLaunchingWithOptions: и application:openURL:options:. До какой-то версии Qt (по-моему, до 5.11) достаточно было создать категорию для QIOSApplicationDelegate примерно таким образом:
Но в последних версиях Qt QIOSApplicationDelegate уже имеет реализацию application:openURL:options:, поэтому вариант с категориями уже не прокатывает. Пришлось сделать наследника от QIOSApplicationDelegate и назначать делегата через setDelegate:
Обработка ошибок от VKRequest
Столкнулся с тем, что VKRequest при ошибке возвращал незаполненный (пустой) NSError. Сделал патч, который патчит чей-то предыдущий патч и pull request этого патча, но он пока что висит в нерассмотренных.
Android
Следующей была версия под Android. Код GUI был переиспользован из iOS практически полностью, для взаимодействия с ВК был использован опять же штатный VK Android SDK, взаимодействие с которым происходит через JNI, работа в фоновом режиме реализована в соответствии с заветами Google для подобных приложений — а именно, через Foreground Service. Само собой, реализована и логика по снижению энергопотребления, аналогичная используемой в iOS.
Полный набор исходных текстов Android-версии доступен опять-таки на GitHub, а вот и пара неочевидных моментов, с которыми я столкнулся в процессе реализации этой версии:
Как создать Android сервис на Qt
Для создания сервиса в Qt 5.10 появился класс QAndroidService, который нужно использовать вместо QGuiApplication. Можно собрать отдельные .so для activity и для service, а можно использовать один .so на все, а для того, чтобы код понимал, в каком режиме он работает, можно указать этот режим через ключ командной строки, примерно так:
int main(int argc, char *argv[]) < if (argc == 1) < QGuiApplication app(argc, argv); [. ] >else if (argc == 2 QString(argv[1]) == «-service») < QAndroidService app(argc, argv); [. ] >else < return 0; >>
Странные «повисания» activity в onDestroy()
В процессе реализации сервиса выяснилась забавная проблема — QtActivity «висла» где-то в недрах своего onDestroy() при условии наличия работающего foreground service. По-видимому, Qt не ожидает, что после завершения activity от приложения может еще что-то оставаться. Проблема была решена разнесением activity и service по различным процессам через использование android:process в манифесте:
и прибиванием процесса, в котором работает activity, в переопределенном onDestroy():
Да, lint на это постоянно ругается, но как с этим справиться по-другому, для меня пока неочевидно, а запилить QTBUG с PoC на эту тему что-то руки пока не доходят.
UPDATE: в Qt 5.12.3 (возможно, и чуть раньше — не проверял) баг с повисанием QtActivity.onDestroy() при запущенном сервисе починили, этот workaround больше не нужен.
Отсутствие вызова errorBlock при отмене VKBatchRequest
Я широко использую batch request’ы для облегчения нагрузки на серверы ВКонтакте, и именно под Android (под iOS все работает нормально) столкнулся с проблемой — в случае отмены VKBatchRequest errorBlock’и для отмененных запросов не вызывались. Исправил эту проблему в локальной версии библиотеки, сделал соответствующий патч и pull request этого патча, но он опять же пока что висит в нерассмотренных.
iOS-версию Apple без проблем разместил в App Store, и она доступна там и по сей день, Android-версия прожила в Google Play некоторое время до момента ужесточения Google Play Policy (в ней прописали, что приложения, занимающиеся отслеживанием геопозиции, должны быть явно предназначены либо для семейного, либо для корпоративного использования), после чего мое приложение там благополучно заблокировали. На мою попытку апелляции ответственный сотрудник Google (а может, это и бот был, сейчас там уже не столь очевидно, кто именно отвечает на твои вопросы) непреклонно заявил, что «ну это приложение же МОЖЕТ БЫТЬ использовано НЕ ТОЛЬКО для семейного или корпоративного отслеживания», на что я не нашелся, что возразить — действительно, молотком ведь можно не только забивать гвозди, а еще и пробивать головы… Разместил Android-версию в Яндекс.Store и Amazon Appstore и в виде APK на сайте проекта.
Буду рад, если это приложение кому-то пригодится в качестве наглядного пособия для прояснения каких-то неочевидных моментов при написании Qt-приложения под iOS/Android, особенно связанных с реализацией Android-сервиса на Qt (функциональность эта относительно новая, примеров реализации, насколько я знаю, не так много). Также буду рад ответить на вопросы в комментариях, if any.
- Разработка под iOS
- Qt
- Разработка под Android
- ВКонтакте API
Источник: habr.com
Как сделать геолокацию в контакте. Вычислить местоположение по ID ВКонтакте
Не всегда приятно замечать, что на фото, которое вы выставили в ВК, высвечивается место, где вы находитесь. Особенно, если цель – ваших фотографий рассказ о событии, а вовсе не о месте, где вы были. Или же вы просто не хотите, чтобы каждый заходящий к вам в профиль юзер мог посмотреть это приватную информацию. Чтобы этот небольшой, но не очень приятный момент перестал вас беспокоить, уберите местоположение в ВК на фото.
Как удалить местоположение с фото Вконтакте
Удалить местоположение с фото Вконтакте можно сразу под снимком, где указано место. Выберите фотографию, где есть обозначения места. Раскройте ее на весь экран. Далее:
- Справа, параллельно полю комментариев отыщите обозначение «Действия»
- Раскройте вкладку. Коснитесь критерия «Указать место»
- Перед вами появится карта с галочкой, которая показывает место, где был сделан снимок. Переместитесь вниз. Кликните на надпись удаления местоположения.
Теперь, когда вы будете открывать снимок, под ним уже не будут высвечиваться ваши координаты. Посмотреть все фото, на которых указаны координаты, возможно в поле под подробной информацией, которое обозначается как . Также в ВК есть некоторое особенности. Не всегда в снимках, которые вы заливаете, указано место.
Если вы выкладываете фото со своего ПК, то местоположение чаще всего не обозначается. Его невозможно определить, если, например, вам переслали снимок в сообщении, а вы потом залили его с телефона. Как правило, показ места на фото зависит от того включена ли у вас геолокация. Когда вы снимаете какое-либо место, ваш умный гаджет автоматически определяет его координаты. При заливке снимка в ВК, он также автоматически выводит эти координаты. Чтобы отключить геолокацию на айфоне:
- Коснитесь отдела настроек.
- Зайдите в подраздел приватности.
- Выберите пункт обслуживания геолокации.
- Здесь вы можете отключить сразу все приложения, которые определяют ваши координаты. А также переключится вниз и отключить только геолокацию камеры.
После этого ваш гаджет перестанет автоматически выдавать ваши координаты и при этом, вы экономнее будете использовать батарею.
Как отметить местоположение в контакте на фото
Хотите рассказать всем о том, где побывали? Или найти , которые ездили в те же места, что и вы? Сделать это возможно, отметив местоположение в контакте на фото. Переместите в раздел альбомов и выберите снимки, на которых желаете указать место.
Прямо под снимком вы увидите соответствующую надпись. Кликните по ней. В карте, которая будет перед вами, вбейте название города, где вы были. Также здесь можно указать проспект или улицу, дом или национальный парк. Если у вас с друзьями есть определенное место, где вы все время собираетесь и в своей компании вы его по-особенному называете, тогда можно вбить именно это название.
Также в описании вы можете поставить хештег, или сделать , чтобы вас было легче найти. Если каждый, кто был с вами рядом, на своем профиле выложит этот снимок и поставит хештег под снимком, то пройдя по нему вы можете увидеть все фотографии. Также отмечать координаты возможно с карты снимков.
Если вы обращали внимание, то на фотографиях ваших друзей и других пользователей, может быть отмечено их местоположение.
Также функция геолокации доступна для ваших личных данных. Вы можете указать адрес своего проживания. Сейчас я вам все покажу.
Итак, как указать местоположение в Контакте ?
Указываем место на фотографии
Выберите и откройте для просмотра нужную фотку (см. ). Теперь в нижней части, найдите и нажмите на ссылку «Еще» . Откроется дополнительное меню. Здесь нажмите на ссылку «Указать место» .
Разрешите браузеру получать данные о вашем местоположении, нажав кнопку «Сообщить местоположение» , в появившемся окне.
Теперь найдите на карте нужную точку. Используйте поиск, или вручную определите местоположение. Дальше поставьте отметку, щелкнув по нужному месту на карте. И нажмите кнопку «Сохранить местоположение» .
Теперь при просмотре данной фотографии, в описании будет указано место на карте, которое вы отметили. Если щелкнуть на него, то будет осуществлен поиск фотографий, которые другие пользователи сделали в этом месте.
С помощью этого инструмента, вы сможете узнать, где сделана фотография, и найти другие фотки по этому местоположению (см. ).
Указываем наш адрес
Перейдите на свою страницу, и нажмите на кнопку «Редактировать» .
Теперь переходим на вкладку «Контакты» , и нажимаем на ссылку «Укажите место» .
У вас откроется форма, в которой нужно указать домашний адрес. Выберите здесь страну, город и т.д. Также дайте наименование этой точке на карте. Когда все заполните, нажимайте кнопку «Сохранить» .
Видео урок: как указать местоположение в контакте
Заключение
Рассмотренная функция позволяет сделать ваш контент более информативным. Ваши друзья и гости (см. ), смогут узнать, где вы бываете, какие места посещаете и т.д. А также найти другие фото по указанному местоположению.
Для этого выполните следующее шаги:
- Откройте фотографию, выложенную лично им. Поскольку здесь видна информация только о том, в каком месте она была сделана, лучше выбирать домашние снимки;
- Посмотрите, отмечены ли на ней геометки. Они указываются под кнопкой «Мне нравится».
Если адрес указан на свежей фотографии, а место на ней расположено в городе, где вы живете — считайте, что повезло. По этим координатам человека просто найти. Таким же образом смотрите местоположение на фотографиях в альбомах и на аватарках.
Если не хотите, чтобы таким же способом нашли вас, отключите отображение местонахождения в настройках страницы. Также уберите все уже сделанные отметки на загруженных фотографиях.
Это не займет много времени, так как удалить геометку можно всего в три клика:
Новая настройка сохранится автоматически.
Альтернативные методы
Если на фото ВКонтакте нет отметок, на помощь придет социальная инженерия. Для нахождения пользователя стоит внимательно изучить его страницу, друзей и подписки — что-то из этого так или иначе укажет на местоположение пользователя.
В первую очередь посмотрите, откуда человек родом. Пункт нынешнего местопроживания иногда не указан, но город рождения, прописывающийся в подробной информации о странице, скорее всего, стоит. Проверьте, вдруг человек до сих пор там живет.
Также там указана информация о школе, работе или университете, в котором обучается пользователь. Зная эти данные, определить местоположение человека не составит труда.
Затем стоит внимательно посмотреть его друзей. По родственникам и школьным приятелям проще всего определить место жительства.
Если их нет, открывайте все страницы по очереди, — какой город будет встречаться чаще, в том, обычно, и живет изучаемый пользователь. Далее заходим в меню его подписок. Довольно часто можно обнаружить, что человек состоит в группе города, в котором живет — это может быть новостной паблик или сообщество формата «Подслушано».
Этот способ очень надежен и удобен, так как вычислить человека, сидящего в подобной группе можно, даже если у него скрыта информация о странице и список друзей.
Не рекомендуется пользоваться приложениями и программами, которые якобы вычисляют людей по IP-адресу — это со 100% вероятностью обман, так как это попросту невозможно. Сам адрес получают, используя сниффер — анализатор трафика, встраиваемый обычно в мошеннические сайты.
Многие пользователи ВК выкладывают свои фотографии с отдыха. Вы наверняка могли заметить, что под многими из них есть геотег — пометка о местоположении. Вы можете добавить такую заметку в любую минуту и к абсолютно к любой фотографии.
Как это происходит? Да очень просто. Откройте фотографию, где вы хотите добавить геотег. В правой нижней части окна с изображением есть небольшое меню. Нажмите на кнопку «Действия», а затем выберите «Указать место».
При этом браузер может запросить у вас текущее местоположение. Стоит ли сообщать его, решать только вам, но если вы хотите указать в качестве геотега какую-нибудь жаркую страну, а сами находитесь, например, в Мурманске, то необходимо отказаться от этого действия, что бы выбрать местоположение самостоятельно.
Далее перед вами появится карта. Вы можете выбрать местоположение самостоятельно, передвигая специальный значок по карте, либо же просто напишите точный адрес в строке поиска. После того, как точка будет поставлена, нажмите на кнопку «Сохранить местоположение».
Теперь вы можете указать местоположение и для других ваших изображений.
Место жительства
Если вы хотите указать свое текущее местоположение, то есть место жительства, вам необходимо воспользоваться другой инструкцией.
Зайдите на свою страницу. Нажмите на кнопку «Редактировать». Ее можно найти как под аватаром, так и рядом с пунктом «Моя страница» в меню.
Возвращаемся на свою страниц и видим контактную информацию, где отражается ваш адрес.
Как узнать ID Вконтакте?
Социальные сети открыли нам массу новых возможностей. Теперь можно , слушать музыку онлайн, публиковать любые записи, общаться с пользователями и многое другое.
Функций на крупных сайтах много, поэтому и появляются разные вопросы по их использованию.
Как узнать ID Вконтакте? Частый вопрос новичков. Что такое ID? Это уникальный номер странички, он автоматически выдается каждому профилю (группе, паблику).
Иногда ID нужен для быстрого поиска, иногда для добавления в черный список Вконтакте, а иногда для накрутки или представления примера.
Узнать ID человека Вконтакте не сложно
Уникальный номер страниц никак не скрывается, поэтому узнать его можно легко.
Вот несколько простых способов:
1. Посмотрите в адресную строку, там представлен ID пользователя Вконтакте:
2. Если в адресной строке не цифры, а буквы, тогда вы можете перейти на его стену, нажав на все записи:
В строке также откроется адрес, где будет представлен ID странички:
3. Если предыдущие способы вам не подходят, откройте диалог с пользователем и в адресной строке появится номер его аккаунта:
Одним из этих способов вы точно сможете узнать ID человека Вконтакте и независимо от целей, воспользоваться этим.
Как узнать IP по ID Вконтакте?
Многие интересуются, можно ли узнать IP адрес по страничке Вконтакте. Сделать это можно, но не так просто.
Когда человек заходит на сайт, его данные записываются в статистику, но ВК такие данные закрывает. Взломать их базу данных не реально, поэтому проще всего воспользоваться сайтом .
На нем предлагается бесплатно создать пустую страницу, чтобы собрать информацию о посетителе. Ваша задача, отправить специальную ссылку человеку и дождаться, пока он по ней перейдет. Когда зайдете на сайт, найдите кнопку для генерации новой странички:
Как вы это сделаете, решать только вам. Можете попробовать познакомиться, предложить работу, сказать, что вы по объявлению и так далее. В общем, придумайте что угодно, а чтобы вас не раскусили, купите профиль на или используйте фейковую страничку.
Как видите, определяется не только сетевой адрес, но и город. Если повезет, то вы даже можете узнать адрес, по которому используется IP. Для этого зайдите на и введите полученные данные.
Источник: www.tarifox.ru
Геолокация Вконтакте — как узнать и поставить метку с iPhone и Android
Интересное в вк
Автор Евгения А. На чтение 4 мин Просмотров 2.9к.
Не так давно создатели «ВКонтакте» порадовали тем, что теперь можно делиться своим местоположением, но мало кто из пользователей знает, как же скинуть геолокацию в ВК. Разработчикам приложений, сайтов приходится регулярно их обновлять и дополнять, чтобы удовлетворить запросы интернет-пользователей. Но не всегда такие нововведения удается сразу применить на практике. Я помогу вам быстро и легко освоить эту новую полезную функцию одной из самых популярных социальных сетей.
Есть ли возможность узнать местоположение пользователя через «ВКонтакте»
На просторах ВК можно смело узнавать о том, где находится интересующий вас человек. Прошу заметить, что такая возможность распространяется только на тех, кто изначально включил геолокацию или разрешил ее.
Мне известны 2 источника, которые позволяют владеть информацией о месте пребывания юзера или о том, где он уже побывал. Это можно сделать, например, через геоданные на фото, когда человек отмечает местоположение на загруженных им фотографиях.
Еще проще просмотреть указанное место жительства в пункте «Город» в личном профиле запрашиваемого или в группе, владельцем которой он является.
Способы отправить свою геолокацию во ВК
Поделиться местоположением в реальном времени со своими друзьями очень легко и удобно.
Но важно учесть, что, в зависимости от мобильного устройства, способы отправки будут несколько отличаться.
На «айфоне»
Так как скинуть геолокацию в ВК возможно, необходимо выполнить следующие действия:
- зайти в раздел «Мессенджер»;
- вверху, в строке поиска ввести название нужной вам беседы либо имя и фамилию того, с кем вы планируете поделиться своим местоположением;
- в открытом диалоге слева от поля «Напишите сообщение» сначала нажать на значок в виде канцелярской скрепки (в полной версии сайта) или плюса в круге (в мобильном приложении), затем на пункт «Место».
Если геолокация у вас уже включена, ваше местоположение будет отмечено на карте автоматически. В ином случае вам придется вручную указать на карте место, где вы находитесь, и точку для назначенной собеседнику встречи. Для этого достаточно увеличить ее и передвигаться по ней. Предложенная инструкция подойдет и для владельцев «андроида».
Также читайте: Экспорт плейлиста из VK в Спотифай — синхронизация аудио бесплатно, сервисы для переноса музыки
На «андроиде»
Как было отмечено ранее, на «андроиде» передать свою геолокацию можно тем же способом, что и на «айфоне». Следуйте инструкции, указанной выше.
Как поставить геометку в социальной сети
Указать место на фотографии в социальной сети можно в несколько простых действий:
- Открыть нужное вам изображение своего профиля либо загрузить новое, на котором хотите поставить геометку.
- В правом нижнем углу нажать на пункт «Еще», далее на «Указать место».
- В поисковой строке написать точный адрес либо просто указать название города.
Не стоит забывать о том, что, когда вы указываете свои геоданные впервые, сразу выходит запрос на разрешение их определения службой «ВКонтакте». Если вы находитесь в том же месте, где сделано фото, то можете дать согласие, нажав на надпись «Разрешить». Далее сохраните изменения и проверьте описание загруженной фотографии, после чего сеть определит адрес сама.
Если же место, где была сделана фотография, и ваше фактическое пребывание не совпадают, тогда откажитесь и нажмите надпись «Блокировать», поставив значок-прицел курсором мыши на карте самостоятельно.
Если по каким-то причинам «ВКонтакте» неправильно определяет ваш адрес или вы отказались от этого, то перед вами откроется карта мира, на которой вы можете выбрать место визуально или ввести название города и улицы в поисковую строку вверху.
Обзор
Источник: vsociale.com