Beispiel #1
0
        public static async Task InitializeCloudSync(string realmServer, string realmDatabase)
        {
            Console.WriteLine("Initialize cloud sync");

            var realmDatabaseUrl = new Uri($"realms://{realmServer}/{realmDatabase}");

            var shouldCleanOnlineRealm = VersionTracking.IsFirstLaunchForCurrentBuild;

#if DEBUG
            shouldCleanOnlineRealm = true;
#endif
            if (shouldCleanOnlineRealm)
            {
                DeleteOnlineRealm(realmDatabaseUrl);
                try
                {
                    await RealmHelpers.RemoveCachedUsers();
                }
                catch (Exception e)
                {
                    Crashes.TrackError(e, new Dictionary <string, string>
                    {
                        { "Realm fatal error", "false" },
                        { "Error description", $"Failed to remove cached users. See {e.Message}" }
                    });
                }
            }

            Realms.Sync.Session.Error      += HandlerRealmSyncErrors(realmDatabaseUrl);
            SyncConfigurationBase.UserAgent = $"{AppInfo.Name} ({AppInfo.PackageName} {AppInfo.VersionString})";

            var realmServerUri = new Uri($"https://{realmServer}");
            OnlineRealm = await GetCloudRealm(realmServerUri, realmDatabaseUrl);
        }
Beispiel #2
0
        private static EventHandler <Realms.ErrorEventArgs> HandlerRealmSyncErrors(Uri realmDatabaseUri)
        {
            return(async(s, errorArgs) =>
            {
                var sessionException = (SessionException)errorArgs.Exception;

                if (sessionException.ErrorCode.IsClientResetError())
                {
                    Analytics.TrackEvent("Realm client reset");

                    DeleteOnlineRealm(realmDatabaseUri);
                    await RealmHelpers.RemoveCachedUsers();

                    return;
                }

                switch (sessionException.ErrorCode)
                {
                case ErrorCode.AccessTokenExpired:
                case ErrorCode.BadUserAuthentication:
                case ErrorCode.PermissionDenied:
                    await RealmHelpers.RemoveCachedUsers();

                    break;
                }

                Crashes.TrackError(sessionException, new Dictionary <string, string> {
                    { "ErrorType", sessionException.ErrorCode.ToString() },
                    { "Realm fatal error", "unknown" },
                    { "Error description", $"Realm sync error reported by realm. See {sessionException.Message}" }
                });
            });
        }