iOS и PHP: проверьте, есть ли на сервере обновления / в базе данных есть изменения

1

Задний план

У меня есть приложение iOS, которое извлекает данные с сервера и записывает их в файл с помощью NSFileManager, так что пользователю не нужно извлекать данные с сервера каждый раз, когда они захотят посетить страницу. Данные, которые они получают, могут время от времени меняться, поэтому я хотел бы обновить данные в файлах приложений, когда это произойдет.

Я использую php-страницы для своих внутренних веб-сервисов.

Вопрос

Какова методика проверки, изменились ли данные в моей базе данных, чтобы я знал, что должен обновлять данные в приложении? Единственный способ, которым я могу это сделать, - создать php-страницу, которая проверяет, отличаются ли данные от того, что я сохранил, но этот вид побеждает цель сохранения информации в файлах в приложении. Я хочу свести к минимуму, когда пользователь общается с сервером, потому что в ситуациях, когда у пользователя нет службы, я все равно хочу, чтобы там были достоверные данные, которые они могут видеть в приложении.

Пожалуйста, задавайте вопросы, если вы не полностью понимаете, чего я пытаюсь достичь. Спасибо!

  • 0
    Правильный ответ во многом зависит от типа данных, о которых вы говорите. Можете ли вы рассказать нам больше о них? Это вычисленные данные или просто статические данные, хранящиеся в базе данных?
  • 0
    Данные просто статичны в базе данных (список ресторанов, событий, описания строк и т. Д.)
Теги:
nsfilemanager

2 ответа

2
Лучший ответ

Если вы хотите, чтобы список недавно добавленных ресторанов, например, вы могли бы:

  • Сохраните идентификатор самого последнего ресторана в IOS и отправьте его на сервер, если вы хотите проверить наличие обновлений.
    • Если идентификатор не совпадает с идентификатором в БД, вам необходимо обновить свой клиент.
    • Если это то же самое, вы можете просто отправить ответ с 304 статусом (не изменен), чтобы минимизировать объем обмена данными.

Если вы хотите кэшировать вычисленные данные, например, 10 самых популярных ресторанов, вы можете:

  • Храните хэш из 10 идентификаторов ресторана и отправляйте его на сервер, если вы хотите проверить наличие обновлений.
  • Сервер повторяет запрос и вычисляет текущий хеш для 10 лучших.
    • Если хэш отличается, обновите свой клиент
    • Если хэш один и тот же, отправьте ответ с состоянием 304

NB: Если вычисление дорогостоящее на стороне сервера, вы можете подумать о более умном способе обнаружения изменений данных.

  • 0
    В итоге я создал таблицу в базе данных с номерами версий для каждой таблицы. Я обновляю номера версий в этой таблице, когда я обновляю данные в соответствующей таблице. Я храню эти значения в NSUserDefaults и проверяю, изменилась ли версия при запуске приложения. Звучит как хороший план?
  • 0
    Проблема с вашим решением заключается в том, что кэш очищается в приложении, даже если данные на самом деле не изменились. Пример: вы обновляете очень старый ресторан, поэтому номер версии таблицы меняется, но 10 самых последних добавленных ресторанов не изменились ... Тем не менее, все ваши приложения будут запрашивать новый список последних ресторанов.
Показать ещё 3 комментария
1

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

На стороне IOS вам необходимо проверить этот идентификатор выпуска. Если идентификатор релиза ios меньше идентификатора сервера, обновите свою базу данных в локальном хранилище ios.

  • 0
    Это имеет смысл. Я понимаю, как я буду делать это на стороне iOS, но как / где я буду хранить идентификатор выпуска на стороне сервера. В базе данных или на страницах php, или где-то еще?
  • 0
    Вы можете создать постоянную переменную в PHP . И сделать для этого отдельный веб-сервис для проверки ID релиза. И вы можете обновлять эту постоянную переменную в любое время из PHP. ИЛИ Если вы не хотите каждый раз менять код, вы также можете добавить его в базу данных и обновить его из своего приложения php .

Ещё вопросы

Сообщество Overcoder
Наверх
Меню