Synchronisatie van data in UWP authenticator

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Alphyraz
  • Registratie: Juli 2011
  • Laatst online: 15-09 23:43
Hoi allemaal,

Om te beginnen zal ik even een korte introductie geven van mijn situatie/probleem. Ik wil met geïnteresseerden discussiëren over ontwerpkeuzes en eventueel adviezen van mensen die dit soort situaties al vaker hebben meegemaakt. Wat kennis van C# is misschien handig, maar niet vereist denk ik.

Ik heb momenteel een authenticator-app in de Windows Store staan en een veelgevraagde feature is synchronisatie met je Microsoft-account. Zelf ben ik helemaal niet zo weg van cloudservices, maar ik moet zeggen dat ik het zelf ook wel een gave feature zou vinden.

Hoe het nu werkt, is een tekstbestand (JSON) met accounts en sleutels van de two-step authentication. Dit tekstbestand is dus als het ware de opslag van de app. Die staat nu in ApplicationData.Current.LocalFolder. Dit is dus gewoon een lokale map en wordt niet gesynchroniseerd met een Microsoft-account. Mocht ik hiervan RoamingFolder maken, dan wordt de inhoud hiervan gesynchroniseerd naar de cloud. Wat ik overigens niet weet (misschien weet iemand dit) is wanneer deze map gesynchroniseerd wordt, en dan bedoel ik met welke instellingen (moet je een Microsoft-account ingesteld hebben op Windows 10 (Mobile) en moet je dan nog aanvullende instellingen aanzetten etc.).

Wat in mijn app ALTIJD voorop komt is de privacy van de gebruiker en de beveiliging. Ik maak gebruik van DataProtectionProvider, die standaard in het .NET Framework zelf zit, om het databestand te versleutelen. Het moet dus ook een optie worden of je je accounts wil synchroniseren via de cloud en eigenlijk zou ik dat het liefst standaard uitzetten.

Dan komen we bij het grootste probleem: data is niet up-to-date tussen verschillende apparaten. Heeft iemand ervaring met de RoamingFolder en het event DataChanged? Dan hoor ik graag je bevindingen. :)

Wat zou er bijvoorbeeld moeten gebeuren wanneer iemand ervoor kiest om cloudsynchronisatie aan te zetten? Je kunt niet simpelweg de laatste versie uit de cloud ophalen en de lokale versie overschrijven. Er zal dus een soort van merge moeten komen, maar wordt het DataChanged event wel uitgevoerd wanneer je je apparaat zo hebt ingesteld dat je niets wil synchroniseren? In dat geval blijft de gebruiker oneindig lang wachten op een merge die nooit gaat komen.

Ik wil nogmaals benadrukken dat ik de privacy van de gebruikers bovenaan de prioriteitenlijst heb staan en dat er zorgvuldig gebruik gemaakt zal moeten worden van een merge, want als iemand een account kwijtraakt uit m'n app, dan kan 'ie voorgoed uit zijn of haar accounts gelocked worden. Met recovery keys heb je dat probleem natuurlijk niet, maar we weten allemaal dat lang niet iedereen die gebruikt. ;)

Ik hoop op een leuke en interessante discussie met andere ontwikkelaars en misschien dat ik het in mijn hoofd allemaal wat beter op een rijtje krijg met de kennis van jullie. Ik zit hier al best een tijdje mee en wil gewoon een goede app maken (nóg beter dan nu), geen mensen teleurstellen en al zeker geen data in gevaar brengen van mijn trouwe gebruikers. :)

Groetjes,
Roel