1

我正在开发一个聊天应用程序,我有几个屏幕:

  1. 登录/注册 -> 我在其中创建了一个 nodejs 服务器进行身份验证。
  2. HomeScreen -> 存在与人的所有对话。
  3. ChatScreen -> 与特定用户聊天。在这里,我提供了视频通话/语音通话的选项,就像其他应用程序一样。

现在问题出在voximplant 登录功能上。由于我已经有一个使用 jsonwebtoken 的具有身份验证功能的后端,所以我也不想使用voximplantsdk 登录,但经过几次尝试后我不得不这样做,因为只有它才能工作。因此,当我使用我的 nodejs API 登录/注册时,我也使用voximplantSDK 登录。到目前为止,一切都很酷,它可以工作。但是现在如果我杀死应用程序并重新启动它,因为voximplant登录功能在login/register组件中,(现在它不存在,因为我已经过身份验证并且此时在 HomeScreen 中 - 使用 AsynStorage 存储 jsonwebtoken),所以voximplantSDK 被注销。现在在 voximplant sdk 中没有办法(据我研究他们的文档)我可以检查if it is is logged out, log me in again.

当我点击视频通话图标时我可以登录(虽然我无法检查我是否已注销),但该操作太昂贵了。

那么我能做些什么来让它发挥作用吗?就像,当我已经通过身份验证时,保持 voximplant 的状态。以下是我项目中的一些相关代码片段。

登录/注册屏幕:

import {Voximplant} from 'react-native-voximplant';

const LoginScreen = () => {
  const voximplant = Voximplant.getInstance();

  useEffect(() => {
    const connect = async () => {
      const status = await voximplant.getClientState();
      if (status === Voximplant.ClientState.DISCONNECTED) {
        await voximplant.connect();
      }
    };
    connect();
  }, []);

  const login = async (name) => {
    // voximplant login
    const fqUsername = `${name.toString()}@${APP_NAME}.${ACC_NAME}.voximplant.com`;
    const password = '....';
    await voximplant.login(fqUsername, password);

    // api login
    const result = await fetch(`${API_URL}/auth/login/`, {...})
  }

  return (
    <TouchableOpacity
       onPress={() => {
         login(name);
       }}>
       <Text>Login</Text>
     </TouchableOpacity>
  )
}

然后登录后,一切都按预期工作,但是现在当我关闭应用程序并杀死它并再次启动它时,该功能不起作用并抛出"NOT_LOGGED_IN"控制台。

我尝试voximplant.connect在 HomeScreen 中,但它已经连接,所以问题是,它不会保持状态。

HomeScreen.js:

const HomeScreen = () => {
  const voximplant = Voximplant.getInstance();

  useEffect(() => {
    const connect = async () => {
      const status = await voximplant.getClientState();
      if (status === Voximplant.ClientState.DISCONNECTED) {
        await voximplant.connect();
      }
    };
    connect();
  }, []);

  return (
    ...
  )
}

我拨打电话时的 CONSOLE 输出:

LOG Promise unhandled rejection id:0
"NOT_LOGGED_IN" // I couldn't find any event to check "NOT_LOGGED_IN" state.

所以问题是:如何保持联系和最重要的是 - 登录。任何帮助将非常感激!

文档:https ://voximplant.com/docs/howtos/sdks/installing/react_native_sdk

4

0 回答 0