2015-07-27 10 views
5

W mojej aplikacji chcę udostępniać dane za pośrednictwem iCloud innym użytkownikom iCloud, ale nie z całym światem, ale z wybranymi innymi użytkownikami iCloud.CloudKit share Dane między różnymi kontami iCloud, ale nie ze wszystkimi

Pomyślałem o sposobie, w jaki może to działać, ale nie jestem pewien, czy to zadziała, i czy zapomniałem lub źle zrozumiałem pewne rzeczy.

Załóżmy, że użytkownik A chce móc udostępnić ciąg innym użytkownikom usługi iCloud, ale nie wszystkim. Użytkownik A chce udostępnić "Witaj świecie" użytkownikowi B, ale nie użytkownikowi C, a nie Użytkownikowi D.

Moja aplikacja ma Publiczną bazę danych i typ rekordu, który jest taki sam dla wszystkich. W tym typie rekordu znajduje się pole Typ łańcucha, które jest również takie samo dla wszystkich.

Teraz użytkownik A zapisuje rekord "Hello World" w usłudze iCloud. I tu pojawia się sztuczka: Dodałem do łańcucha unikalny identyfikator, taki jak UUID, aby coś takiego jak "Hello World1230ABD6-3C61-1234-802E-D866F09AC012" zostało przesłane do iCloud.

Teraz Użytkownik A musi powiedzieć Użytkownikowi, że chce udostępnić dane za pomocą swojego UUID, więc Użytkownik A przekazuje je Użytkownikowi B. Teraz identyfikator UUID Użytkownika A zostanie dodany jako Predykat do CKSubscription użytkownika B.

Pozwoli to Użytkownikowi B pobrać ciąg od Użytkownika A, ale Użytkownik C lub Użytkownik D nie otrzyma CKNotification, ponieważ nie mają identyfikatora UUID Użytkownika A w swojej CKSubscription.

Czy to zadziała? A może istnieje inny wzorzec projektowy, który umożliwia współdzielenie/synchronizację za pośrednictwem iCloud z innymi kontami iCloud, ale nie ze wszystkimi (publicznymi)?

P.S. Dane, które chcę udostępnić, nie są poufne, więc nie muszą być naprawdę bezpieczne. Dane po prostu nie są interesujące dla wszystkich (publicznych), więc muszą być udostępniane tylko wybranym innym kontom iCloud ...

Jestem wdzięczny za wszelkie przemyślenia i wskazówki, jak to osiągnąć!

Dzięki

Odpowiedz

9

Istnieje kilka sposobów na osiągnięcie czegoś takiego. We wszystkich przypadkach sprowadza się do:

  • Dodaj pole CKReference, które będzie wypełnione identyfikatorem użytkownika, któremu chcesz udostępnić.
  • Upewnij się, że orzeczenie będzie filtrować na tym polu CKReference gdzie identyfikator jest twoje (wspólnie z wami)

gdzie i jak przechowywać że CKReference zależy od tego jak chcesz udostępnić.

  • Jeśli chcesz udostępnić tylko jednej osobie, to po prostu dołącz to pole CKReference do głównego rekordu. Nie dodawaj go do wiadomości, jak podano w pytaniu. Dodaj dodatkowe pole.
  • Jeśli chcesz udostępnić ograniczoną liczbę osób, możesz dodać pole do typu recordType, które jest listą CKReference.
  • Jeśli chcesz udostępnić dużą grupę osób, możesz dodać grupę recordType, która będzie miała identyfikator groupID plus typ rekordu groupMembers, w którym będzie przechowywany cały identyfikator CKReference użytkownika, który jest członkiem tej grupy.

We wszystkich przypadkach rozwiązanie byłoby bezpieczne. Wszystko sprowadza się do predykatów zdefiniowanych w aplikacji. Jeśli jeden z filtrów predykatów jest niepoprawny, może się zdarzyć, że ktoś zobaczy coś, co nie jest dla niego.

W aplikacji demonstracyjnej pod numerem EVCloudKitDao znajduje się aplikacja czatu oparta na CloudKit. Korzysta z biblioteki wygody EVCloudKitDao, ale struktura udostępniania czegoś będzie podobna.

+0

Dzięki za pomoc! Spojrzę na CKReference. Jeszcze jedno pytanie: w moim przypadku mam tylko jeden ciąg, który musi być zsynchronizowany przez użytkownika A i użytkownika B. Nie jest tak, że użytkownik A i użytkownik B muszą dodawać nowe rekordy cały czas, tak jak nowe wpisy czatu w aplikacji czatu przykład ... to brzmi tak, jakbym miał podstawowy atrybut danych, który zarówno użytkownik A, jak i użytkownik B może edytować i będzie zsynchronizowany przy starcie aplikacji ... Czy naprawdę potrzebuję wtedy referencji? Dzięki ! – Kreuzberg

+0

Zarówno użytkownik A jak i użytkownik B muszą wiedzieć, jaki rekord powinni monitorować. Jeśli masz mechanizm, aby uzyskać identyfikator rekordu danego rekordu dla innego użytkownika, byłoby to wystarczająco dobre. Możesz utworzyć własny RecordID. Musisz tylko być pewien, że będzie wyjątkowy. –

+0

Jedno dodatkowe. Przez ostatnie 2 miesiące wystąpił błąd w CloudKit, który uniemożliwi wysyłanie powiadomień o zmianach rekordów. –

3

Usługa CloudKit Sharing została wprowadzona na konferencji WWDC 2016. Umożliwia to dzielenie się prywatnymi rekordami bazy danych między znaną grupą użytkowników, co jest dokładnie tym, czego szukasz. ...... W sesji "Co nowego w CloudKit" jest doskonały przegląd: https://developer.apple.com/videos/play/wwdc2016/226/

+0

20:30 czas tego wideo rozpoczyna część "Udostępnianie rekordów" w rozmowie –

Powiązane problemy