2015-07-27 9 views
5

Nella mia app voglio condividere dati via iCloud con altri utenti iCloud ma non con il mondo intero ma con altri utenti iCloud selezionati.CloudKit condividi i dati tra diversi account iCloud ma non con tutti

Ho pensato a come potrebbe funzionare, ma non sono sicuro che funzionerà e se ho dimenticato o frainteso alcune cose.

Diciamo che l'utente A vuole essere in grado di condividere una stringa con altri utenti iCloud ma non con tutti. Quindi l'utente A vuole condividere "Hello World" con l'utente B ma non con l'utente C e non con l'utente D.

Quindi la mia app ha una base dati pubblica e un tipo di registrazione uguale per tutti. In quel tipo di record c'è un campo di tipo String che è uguale per tutti.

Ora l'utente A salva il record "Hello World" su iCloud. E qui arriva il trucco: aggiungerei un identificatore univoco come UUID alla stringa in modo che qualcosa come "Hello World1230ABD6-3C61-1234-802E-D866F09AC012" sia caricato su iCloud.

Ora l'utente A ha bisogno di comunicare all'Utente che desidera condividere i dati con il suo UUID, quindi l'Utente A lo comunica all'utente B. Ora l'UUID dell'utente A verrà aggiunto come Predicato alla CKSubscription dell'utente B.

Ciò consentirà all'utente B di recuperare la stringa dall'utente A, ma l'utente C o l'utente D non riceveranno una CKNotification perché non hanno l'UUID dell'utente A nella loro CKSubscription.

Funzionerà? Oppure esiste un altro modello di progettazione che consente la condivisione/sincronizzazione tramite iCloud con altri account iCloud ma non con tutti (pubblico)?

P.S. I dati che voglio condividere non sono sensibili, quindi non è necessario essere veramente sicuri. I dati non sono interessanti per tutti (pubblico) quindi devono essere condivisi solo con altri account iCloud selezionati ...

Sono grato per qualsiasi pensiero o consiglio su come ottenere questo risultato!

Grazie

risposta

9
Ci

sono un paio di modi per raggiungere qualcosa di simile. In tutti i casi si tratta di:

  • Aggiungere un campo CKRiferimento che verrà popolato con l'ID dell'utente con cui si desidera condividere.
  • Assicurarsi che il predicato filtrerà per quel campo CKReference in cui l'ID è tuo (in comune con voi)

Dove e come si memorizzano che CKReference dipende da come si desidera condividere.

  • Se si desidera condividere solo con una persona, è sufficiente includere il campo CKReference nel recordType principale. Non aggiungerlo al messaggio come hai detto nella tua domanda. Aggiungi un campo extra.
  • Se si desidera condividere un numero limitato di persone, è possibile aggiungere un campo al recordType che è un elenco di CKReference.
  • Se si desidera condividere con un grande gruppo di persone, è possibile aggiungere un recordType di gruppo che includa un groupID e un groupMembers recordType in cui archiviare tutti gli id ​​di CKReference dell'utente che sono membri di quel gruppo.

In tutti i casi la soluzione sarebbe sicura. Tutto si riduce ai predicati che definisci nella tua app. Se uno dei tuoi filtri dei predicati non è corretto, potrebbe succedere che qualcuno veda qualcosa che non è per lui.

Nell'app demo di EVCloudKitDao è un'applicazione di chat basata su CloudKit. Sta usando la libreria di convenienza EVCloudKitDao ma la struttura della condivisione di qualcosa sarebbe simile.

+0

Grazie per l'aiuto! Darei un'occhiata a CKReference. Un'altra domanda: nel mio caso ho una sola stringa che deve essere sincronizzata dall'utente A e dall'utente B. Non è che l'utente A e l'utente B debbano aggiungere nuovi record tutto il tempo come nuove voci di chat nell'app di chat esempio ... è un po 'come se avessi un attributo dei dati di base che sia l'utente A che l'utente B possono modificare e verrà sincronizzato all'avvio dell'app ... Quindi ho davvero bisogno di riferimenti per questo? Grazie ! – Kreuzberg

+0

Sia l'utente A che l'utente B devono sapere quale record devono essere monitorati. Se si dispone di un meccanismo per ottenere l'ID record del record relativo all'altro utente, ciò sarebbe sufficiente. Puoi creare il tuo RecordID. Devi solo essere sicuro che sarà unico. –

+0

Un'aggiunta. Negli ultimi 2 mesi c'è un bug in CloudKit che impedirà l'invio di notifiche di aggiornamento per le modifiche ai record. –

3

CloudKit Sharing è stato introdotto al WWDC 2016. Ciò consente la condivisione di record di database privati ​​tra un gruppo noto di utenti, che è quello che sembra che tu stia cercando. ...... C'è una grande panoramica nella sessione "Novità in CloudKit": https://developer.apple.com/videos/play/wwdc2016/226/

+0

20:30 tempo di quel video inizia la parte "Condivisione dei record" del talk –