React Native 中的多个领域在安装后首次启动应用程序时无法正确查询领域对象服务器



我正在与React Native中的多个领域有关。我正在使用一个应用程序,该应用程序允许用户使用该应用而无需订阅(使用本地领域),然后在其应用程序之旅中的任何时刻使用,他们可以选择升级到与同步的订阅(使用Sync使用到一个领域对象服务器)。

启动应用程序时,我检查他们是否正在使用同步,如果我将同步领域初始化,一切都很好。我得到了我期望的所有数据。

但是,当应用程序在安装后首次启动时开始(关于安装之后的第一次启动是至关重要的),我看到他们不使用同步,我初始化了一个本地领域,我将数据保存到,直到他们决定记录日志在他们的同步帐户中(如果有一个帐户)。在这一点上,我尝试从同步领域中获取信息,但是当我仅初始化同步领域时,它没有看到的信息(在应用程序启动时,我检测到它们使用Sync)。

我可以作为同步用户登录,但是如果我先前初始初始化了一个本地领域,并且该逻辑在安装后的第一次启动时会运行。当我初始化局部和同步领域时,该数据仅在应用程序的次要启动时显示(在启动之前不重新安装)。

这是一个简单的测试脚本,其中包含虚拟数据,我能够复制观察到的行为:

const username = 'testuser2';
const password = 'supersecret';
const tld = 'REALM_OBJECT_SERVER_TLD';
class Test extends Realm.Object {}
Test.schema = {
  name: 'Test',
  properties: {
    id: {
      type: 'string',
    },
  }
};
function initLocalRealm() {
  return new Realm({
    path: 'local.realm',
    schema: [Test],
  });
}
function initSyncedRealmWithUser(user) {
  return new Realm({
    path: 'synced.realm',
    sync: {
      user,
      url: `realm://${tld}:9080/~/data`,
    },
    schema: [Test],
  });
}
function writeTestObjectWithId(realm, id) {
  realm.write(() => {
    realm.create('Test', {
      id,
    });
    alert(`Test object with id: ${id}`);
  });
}
initLocalRealm();
// setup
// uncomment this and comment out the login section to setup user on first run
// Realm.Sync.User.register(`http://${tld}:9080`, username, password, (error, user) => {
//   if (error) {
//     return;
//   }
//   const syncedRealm = initSyncedRealmWithUser(user);
//   writeTestObjectWithId(syncedRealm, '1');
// });
// login
Realm.Sync.User.login(`http://${tld}:9080`, username, password, (error, user) => {
  if (error) {
    return;
  }
  const syncedRealm = initSyncedRealmWithUser(user);
  alert(`Synced realm test objects: ${syncedRealm.objects('Test').length}`);
});

如果您创建了一个React Antive应用程序,然后将此代码添加到主组件componentDidMount函数中,您应该在应用程序的第一个运行中看到(在未注册一次寄存器代码之后),您将看到测试集合长度在0,但是当您刷新时,您会在1时看到测试收集长度。

对此的任何帮助都很棒。

谢谢!

运行您的代码段,一旦我输入登录部分,我就会立即获得1个长度。您能尝试与Realm浏览器观察您的同步领域,看看它是否有您在注册用户后所期望的数据?

相关内容

  • 没有找到相关文章

最新更新