2015-04-27 4 views
0

Я работаю над приложением, которое отправляет push-уведомления всем пользователям в радиусе 1 мили от того места, откуда начинался push. Существует много хорошей документации относительно использования Parse для оповещений на основе местоположения. Я планирую использовать код ниже (или что-то подобное) для отправки моих нажатий.Уведомления о местоположении на основе местоположения с использованием Parse

// Find users near a given location 
PFQuery *userQuery = [PFUser query]; 
[userQuery whereKey:@"location" 
nearGeoPoint:stadiumLocation  
withinMiles:[NSNumber numberWithInt:1]] 

// Find devices associated with these users 
PFQuery *pushQuery = [PFInstallation query]; 
[pushQuery whereKey:@"user" matchesQuery:userQuery]; 

// Send push notification to query 
PFPush *push = [[PFPush alloc] init]; 
[push setQuery:pushQuery]; // Set our installation query 
[push setMessage:@"Free hotdogs at the Parse concession stand!"]; 
[push sendPushInBackground]; 

Для того, чтобы сделать этот толчок запрос, мне нужно иметь текущее местоположение каждого пользователя хранится точно в базе данных Разбор. Я планирую сделать это с помощью CoreLocation, и каждый раз, когда приложение будет уведомлено о смене местоположения, оно обновит местоположение пользователя в базе данных анализа. Это лучший способ сделать это? Я воображаю, что пользователь путешествует по стране, и их телефон обновляет базу данных разбора каждую милю. Это поведение? Это потребует очень частое обновление базы данных Parse каждым пользователем.

Я что-то упустил? Это действительно лучший способ сделать это? Спасибо за любую помощь или лучшие идеи.

+0

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

+0

Спасибо за ответ. Нажатие на лимит разбора - именно то, о чем я беспокоюсь. Я особенно не хотел бить предел, если я неправильно выполнял поведение. Но мне кажется, что я настолько, что мне может потребоваться переосмыслить настроение. Благодаря! – Kathleen

+0

Вы сразу же не достигли предела бесплатного плана (30req/sec), все зависит от количества активных пользователей, которых вы ожидаете иметь – hhanesand

ответ

1

Вы также можете использовать API-интерфейс значительного локатора для Apple, который только вызывает изменение местоположения при изменении башни ячеек. Это может уменьшить количество обновлений местоположения, которые вы должны выполнить, сохраняя при этом, по-видимому, хорошую оценку того, где находится пользователь.

В коде, это будет выглядеть примерно так:

[locationManager startMonitoringSignificantLocationChanges]; 

Документация по адресу: https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/LocationAwarenessPG/CoreLocation/CoreLocation.html

Кроме того, вам нужно запроса разрешений для отслеживания местоположения в фоновом режиме, то, что вы необходимо объявить в вашем файле Info.plist.

Вы также можете сделать несколько расчетов на стороне клиента, чтобы узнать, как далеко от новой точки находится текущая сохраненная точка, и обновлять базу данных анализа только, если расстояние больше определенного порогового значения. Это уменьшит ваши запросы/сек. Parse и сохранит вас в свободном диапазоне 30req/s.

+0

Я думаю, что использование startMonitoringSignificantLocationChanges - это то, как я пойду. Мне также нравится ваша идея расчета порога расстояния перед обновлением синтаксического анализа. Мое заключение заключается в том, что оповещения на основе местоположения на основе местоположения довольно ресурсоемкие, поэтому лучше использовать приложение для его использования. – Kathleen

+0

Это определенно верно. Отслеживание местоположения дорогое, но может быть очень полезным для пользователя – BHendricks