感谢我的XF + Azure移动应用+离线同步中有关问题的任何帮助。我有一个使用Xamarin表单开发的移动应用程序,具有以下流程:
常用启动流程A:
- 创建azure服务对象(MobileServiceClient)
- 创建数据库存储对象(MobileServiceSQLiteStore)
- 通过DefineTable()
将实体注册到sqlite表
- MobileServiceClient.SyncContext.InitializeAsync()
- 检查缓存的身份验证令牌
醇>
分支流程B:找到无效/无代码(首次启动)
- 显示登录页面(XF)
- 通过MobileServiceClient.InvokeApiAsync()
执行自定义身份验证
- 从响应中提取GWT身份验证令牌(此处省略了失败的方案)
- 缓存身份验证令牌以供将来使用(带有令牌到期信息)
醇>
分支流C:找到有效令牌(后续启动)
- 从令牌(MobileServiceUser)
创建azure服务用户
- 将用户与azure服务对象相关联
MobileServiceClient.CurrentUser =
MobileServiceClient.CurrentUser.MobileServiceAuthenticationToken =
- 执行同步
MobileServiceClient.SyncContext.PushAsync()
MobileServiceClient.GetSyncTable()。PullAsync()
醇>
我的问题是,当我确实流A-> B-> C时,我的同步不会从PushAsync()返回。
一旦我强制关闭我的应用程序并重新启动到流程A-> C,一切都将正常工作(PushAsync()完成,PullSync()从远程检索数据)。
我还尝试删除"冗余"步骤#12中的PushAsync(),但仍然面临同步从PullAsync()返回的同一问题。
我怀疑这与线程有关(虽然我非常使用async / await,这些与线程无关)因为偶尔会有相同的过程(首次启动+第一次同步)将能够工作(正确返回)。
一些参考材料:
Synchronizing Offline Data with Azure Mobile Apps
Enable offline sync for your Xamarin.Forms mobile app
Offline Data Sync in Azure Mobile Apps