Уникальный идентификатор CNContact между устройствами

У меня возникла небольшая проблема с попыткой получить доступ к одному и тому же контакту между несколькими устройствами. Моя цель состоит в том, чтобы пользователь выбрал контакт и выбрал номер телефона и адрес электронной почты, которые затем будут сохранены в базе данных. Если пользователь открывает приложение на другом устройстве, я бы хотел, чтобы был выбран тот же контакт.

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

Это не похоже на то, что это должно быть сложно, но, видимо, я что-то упускаю. Мысли?


person user7616911    schedule 11.02.2018    source источник
comment
Вы не можете предположить, что у пользователя одинаковые контакты на разных устройствах.   -  person rmaddy    schedule 11.02.2018
comment
Вы правы, если это не так, нужно быть осторожным. Но в случаях, когда контакт существует в обоих местах, было бы неплохо добавить подробности.   -  person user7616911    schedule 11.02.2018
comment
Все еще ищу решение этой проблемы. Я знаю, что Apple не предлагает решения, поэтому вопрос в том, как лучше всего реализовать свое собственное решение, пока оно не появится. Несмотря на то, что пользователям не требуется иметь одинаковые CNContacts на каждом устройстве, у большинства из нас они есть. Любое приложение, которое обращается к CNContacts, не должно препятствовать тому, чтобы пользователь имел простой доступ к одному и тому же контакту на всех своих устройствах, на которых он его синхронизировал.   -  person tkhelm    schedule 08.10.2020


Ответы (1)


Решение, которое работает для меня, заключается в том, что я храню идентификаторы контактов, идентификаторы адресов, имя контакта и адрес в своей базе данных. Затем я делаю многошаговый подход.

Поиск контакта:
я пытаюсь найти контакт на основе сохраненных идентификаторов контактов, которые я уже сохранил.

Если я найду 1 контакт (идентификатор совпал) => Отлично! Затем я пытаюсь сопоставить найденный контакт с моим адресом.идентификаторы. Еще раз, если я найду только 1 совпадение, мы молодцы! Если нет, то я попытаюсь найти адрес (см. ниже)

Если я не нахожу контактов (идентификаторы не совпадают) => я пытаюсь найти контакт на основе имени контакта, которое я сохранил ранее. Если я нахожу совпадение, я пытаюсь найти соответствующий адрес (см. ниже).

Поиск адреса:
Поскольку на данный момент у меня есть запись CNContact, которая, как мне кажется, совпадает, я просматриваю каждый из их почтовых адресов и сравниваю их с улицей/городом/штатом/почтовым индексом/ страна, которую я сохранил в своей базе данных.

Если мы находим это идеальное совпадение, я обновляю свои идентификаторы, чтобы включить новые идентификаторы адресов/контактов.

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

person user7616911    schedule 08.10.2020