2012-02-24 2 views
2

Я хочу реализовать уведомление о географическом местоположении в iOS, но только в определенную дату и время.Уведомление о географическом местоположении в iOS

Уведомление будет запущено только в том случае, если пользователь находится в определенном месте и в определенную дату и время.

Факс: Пользователь находится в Рио-де-Жанейро и составляет 12 часов.

Кто-нибудь знает, как объединить эти два условия для запуска уведомления?

+0

Вы хотите, чтобы это срабатывало, когда ваше приложение запущено, или даже когда оно закрыто? – Lefteris

ответ

0

В этом нет ничего, что я знаю - вам придется самому закодировать логику. Таким образом, вы просто получите гео-обновления из CoreLocation, и вы можете создать таймер, чтобы дать вам время на обновления, а затем написать некоторую логику, которая выполняется периодически, и, если время/место соответствует вашим бизнес-правилам, запустите уведомление. Обратите внимание, что приложение должно будет работать, чтобы выполнить это. Вы можете отправить push-уведомление с внешнего сервера, но этот сервер должен знать, где находится телефон, и ваше приложение должно это сообщить.

Помогает ли это?

+0

Я думаю, что это может быть проще, я буду искать больше об этом. Спасибо, в любом случае. –

0

Похоже, что это можно сделать элегантно, если для обновления местоположения задан прецедент.

Используйте этот CoreLocation startMonitoringSignificantLocationChanges

Чтобы получить новую информацию о местоположении, и эти обновления будут иметь возможность начать свое приложение в фоновом режиме (как описано в документации). Затем в методе «application: didFinishLaunchingWithOptions» вашего AppDelegate укажите свою логику для проверки правильности времени отправки уведомления (путем проверки с помощью материала в CoreData или иным образом).

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

0

Это просто. Я предполагаю, что вы знакомы с классами CLLocationManager и MKReverseGeocoder. Для вашей цели мониторинг только для значительных изменений местоположения, вероятно, будет хорошим (даже если это иногда происходит только для движущихся километров). Это поможет вам сэкономить заряд батареи на устройстве.

Итак, для делегата CLLocationManager's существует метод, называемый locationManager:didUpdateToLocation:fromLocation, что вы можете использовать. Все, что вам нужно сделать, это использовать обратное геокодирование здесь, чтобы определить фактическое название города в зависимости от фактического местоположения, используя класс MKReverseGeocoder. Кроме того, вы должны проверить местное время на устройстве, соответствовать двум и действовать соответственно (настроить локальное уведомление, чтобы разбудить приложение из фона, например).

+0

Я не думаю, что это сработает, когда пользователь уже находится в правильном месте, когда время изменилось на допустимое время.? –

+0

На самом деле Рори, я должен сказать, что ты прав! Хорошая мысль. :) Мы должны подробно остановиться на том, что я сказал выше, и всякий раз, когда происходит значительное изменение местоположения, мы должны сохранить город нового местоположения, вероятно, до ** NSUserDefaults **. Также нам нужно настроить локальное уведомление на 12 часов. Когда местное уведомление срабатывает, мы можем проверить сохраненное местоположение, и если оно соответствует Рио-де-Жанейро, тогда отобразите его, иначе отмените (и настройте новый на следующий день). Спасибо за ваш комментарий, Рори! –

Смежные вопросы