W mojej aplikacji użytkownicy kupują materiały eksploatacyjne, powiedzmy walizki, które są przechowywane w danych podstawowych. Kiedy użytkownik po raz pierwszy instaluje aplikację, daje im darmowy dostęp. Aplikacja nie może działać bez co najmniej jednej konfiguracji walizki.Usługa iCloud umożliwia użytkownikom "kradzież" materiałów eksploatacyjnych w aplikacji
Ale jeśli użytkownik zainstaluje aplikację na swoim iPhonie, a następnie na iPadzie i zsynchronizuje te dwa, teraz ma 2 walizki. A jeśli odinstalują aplikację na dowolnym urządzeniu, a następnie zainstalują ją ponownie i zsynchronizują, otrzymają jeszcze jeden i mogą to zrobić w nieskończoność.
Widzę dwa rozwiązania, ale żadne z nich nie wydaje się słuszne:
Dodaj wartość do NSUbiquityKeyValueStore gdy użytkownik najpierw synchronizuje się z iCloud. Sprawdź tę wartość przy pierwszym uruchomieniu. Jeśli jest zerowy, utwórz freebie, jeśli nie, zsynchronizuj dane. Ale to stwarza problem. Co jeśli użytkownik wyłącza iCloud lub nie ma połączenia internetowego przy pierwszym uruchomieniu. Aplikacja utworzy freebie, a następnie, gdy usługa iCloud będzie dostępna, zsynchronizuje duplikat i może to zrobić tyle razy, ile chce.
W pewien sposób pasuje do domyślnych elementów każdej aplikacji. Miałem pomysł dopasowania objectID lub znaczników czasu, ale te byłyby różne i nie jestem pewien, jak sobie z tym poradzić.
Czy ktoś wie coś, co mogę zrobić w tej sprawie?
EDIT:
Korzystanie paczkowana bazy plusa migratePersistentStore: toURL: Opcje: withType: błąd: wydaje się być droga. Opublikuje odpowiedź z kodem, jeśli zadziała dla mnie.
Może Twój przykład jest tylko kłopotliwe, ale dlaczego nie po prostu nigdy nie dać im wolną walizkę jeśli już macie? Mówisz, że aplikacja nie będzie działać bez walizki. Czy masz na myśli, że będzie funkcjonował, jeśli wcześniej mieli walizkę i ją skonsumowali? –
@chrispix Przykro nam, aby przykład był tak abstrakcyjny. Zasadniczo nie "zużywasz" walizki, kupujesz tyle, ile chcesz i je gromadzisz. Jest to model "eksploatacyjny", ponieważ jest nieograniczony, ale produkt nie jest "konsumowany" przy zakupie, co jest kluczową różnicą. – ntesler
Myślę, że widzę. Więc użytkownik ponownie instaluje, nie ma walizek, dajesz im jeden. Następnie wprowadzają jakieś dane uwierzytelniające, które pozwalają im wyciągnąć poprzednie walizki z serwera? –