首页 文章

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

提问于
浏览
2

我在处理React Native中的多个领域时遇到了问题 . 我正在开发一个应用程序,允许用户在没有订阅的情况下使用该应用程序(使用本地领域),然后在他们的应用程序旅程中的任何时候,他们都可以选择升级到具有同步功能的订阅(使用同步到领域对象服务器) .

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

但是,当应用程序在安装后首次启动时启动(关于安装后首次启动的那部分至关重要)并且我发现他们不使用同步我初始化一个本地域我将数据保存到他们决定登录到他们的同步帐户(如果有的话) . 此时我尝试从已同步的域中提取信息,但它没有我在初始化同步域时看到的信息(在应用程序启动时我检测到它们使用同步的情况) .

我能够以同步用户身份登录,但如果我之前初始化了本地域,则数据不存在,并且此逻辑在安装后首次启动应用程序时运行 . 当我在应用程序的辅助启动时初始化本地和同步域时,数据仅显示在领域对象服务器上(在启动之前不重新安装) .

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

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本机应用程序,然后将此代码添加到主要组件 componentDidMount 函数,您应该在应用程序的第一次运行时看到(在您取消注释注册码一次之后),您将看到测试集合长度为0,但是当你刷新时,你会看到Test集合长度为1 .

对此的任何帮助都会很棒 .

谢谢!

1 回答

  • 0

    运行你的代码片段,一旦我取消注册登录部分,我会立即获得1的长度 . 您是否可以尝试使用Realm Browser观察同步域并在注册用户后查看它是否具有您期望的数据?

相关问题