GetCurrentUser()在重新启动Xamarin.forms应用程序后为null(解析)

pprl5pva  于 2023-03-06  发布在  其他
关注(0)|答案(1)|浏览(104)

我正在开发一个Xamarin.forms应用程序,使用最新的. NET解析SDK。
除了sdk没有在应用程序重启之间将userobject和ParseInstallationobject保存到磁盘之外,一切都运行正常。如果您登录并重启应用程序,GetCurrentUser()为null,并创建一个新的installationObject。
我初始化我的ParseClient如下:

var client = new ParseClient(new ServerConnectionData
                {
                    ApplicationID = "Application_ID",
                    Key = "NET_KEY",
                    ServerURI = "Server_URL"
                },
                    new LateInitializedMutableServiceHub(),
                    new MetadataMutator
                    {
                        EnvironmentData = new EnvironmentData { OSVersion = Environment.OSVersion.ToString(), Platform = Device.RuntimePlatform, TimeZone = TimeZoneInfo.Local.StandardName },
                        HostManifestData = new HostManifestData
                        {
                            Version = this.GetType().Assembly.GetCustomAttribute<AssemblyInformationalVersionAttribute>().InformationalVersion,
                            Name = this.GetType().Assembly.GetName().Name,
                            ShortVersion = this.GetType().Assembly.GetName().Version.ToString(),
                            Identifier = AppDomain.CurrentDomain.FriendlyName
                        }
                    });
                client.Publicize();

我尝试自己保存SessionToken,并按如下方式检索用户:
await ParseClient.Instance.BecomeAsync(sessionToken).ConfigureAwait(false);
它可以工作,但我找不到检索/保存ParseInstallationObject的解决方案。
gitHub上有一些例子也有同样的问题,https://github.com/parse-community/Parse-SDK-dotNET/issues/366,但是我看不出有人找到了解决方案。
我也尝试过使用旧的sdk,但是它似乎不能与Xamarin.forms一起工作,或者有什么方法可以使用它?
有没有人找到了解析SDK和Xamarin.forms的有效解决方案?
先谢谢你了!

j1dl9f46

j1dl9f461#

下载并调试SDK的完整源代码后,我终于找到了一个目前为止行之有效的解决方案。您必须指定Cashe文件的路径,否则SDK将在每次重启应用时创建一个新的路径。请参阅下面初始化ParseClient的完整方法。

client = new ParseClient(new ServerConnectionData
            {
                ApplicationID = Application_ID,
                Key = NET_KEY,
                ServerURI = Server_URL
            },
                new LateInitializedMutableServiceHub(),
                new MetadataMutator
                {
                    EnvironmentData = new EnvironmentData { OSVersion = Environment.OSVersion.ToString(), Platform = Device.RuntimePlatform, TimeZone = TimeZoneInfo.Local.StandardName },
                    HostManifestData = new HostManifestData
                    {
                        Version = this.GetType().Assembly.GetCustomAttribute<AssemblyInformationalVersionAttribute>().InformationalVersion,
                        Name = this.GetType().Assembly.GetName().Name,
                        ShortVersion = this.GetType().Assembly.GetName().Version.ToString(),
                        Identifier = AppDomain.CurrentDomain.FriendlyName
                    },
                },
                new AbsoluteCacheLocationMutator
                {
                    CustomAbsoluteCacheFilePath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal) + "/.local/share/Parse/_fallback/1866527620.cachefile"
                });
            client.Publicize();

相关问题