首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将登录状态持久化到反应性本地体植入SDK中

如何将登录状态持久化到反应性本地体植入SDK中
EN

Stack Overflow用户
提问于 2022-01-19 18:22:59
回答 2查看 253关注 0票数 0

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

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

现在的问题是体植入登录功能。由于我已经有了一个后端,它具有使用jsonwebtoken的身份验证功能,所以我也不想使用voximplant sdk登录,但是经过几次尝试之后,我不得不这样做,因为只有这样才能工作。因此,当我使用nodejs登录/注册时,我也使用voximplant SDK登录。到现在为止一切都很酷,一切正常。但是现在如果我杀死这个应用程序并重新启动它,就像voximplant登录功能在login/register组件中一样,(现在它不在那里了,因为我现在已经通过身份验证并在HomeScreen中使用AsynStorage来存储jsonwebtoken),所以voximplant SDK就被注销了。现在,在体植入sdk中没有任何方法(据我研究它们的文档),我可以检查那个if it is is logged out, log me in again

当我点击视频呼叫图标(,虽然我不能检查我是否注销了)时,我可以登录,但是这个操作太昂贵了。

我能做些什么让它起作用吗?比如,当我已经鉴定的时候,保持体素植入物的状态。下面是一些来自我的项目的相关代码片段。

登录/注册屏幕:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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 (
    ...
  )
}

当我调用时,控制台输出:

代码语言:javascript
复制
LOG Promise unhandled rejection id:0
"NOT_LOGGED_IN" // I couldn't find any event to check "NOT_LOGGED_IN" state.

所以问题是:如何保持联系&最重要的是登录。任何帮助都是非常感谢的!

博士:sdk

EN

回答 2

Stack Overflow用户

发布于 2022-06-08 18:09:16

Voximplant需要建立与Voximplant的连接,并需要用户授权进行调用。它不保持应用程序启动之间的登录状态,也不保留到Voximplant的连接状态。

此外,当应用程序处于活动状态时(例如,移动设备上的网络交换机或糟糕的internet连接),可能会出现到Voximplant的连接丢失的情况。在这些情况下,应用程序应该重新连接并重新登录用户以进行调用。

为了处理这些情况,Voximplant Native提供了API:

  1. 检查当前的客户状态
  2. 订阅连接状态更改事件
  3. 登录选项(使用密码登录、使用访问令牌登录用一次键登录登录)

对于应用程序被杀死并再次启动的情况,我推荐以下解决方案之一:

  1. 在整个应用程序生命周期内保持与Voximplant的连接,即如果客户端以前使用Voximplant进行日志记录,则连接到Voximplant并使用access令牌方法登录应用程序启动时登录用户。如果由于某种原因而丢失到Voximplant的连接,请重新连接并重新登录客户端。
  2. 在调用之前,检查客户端状态,如果不是在“,则使用访问令牌登录客户端。连接和登录操作不太昂贵,而且预置很快。

此外,可以将所有连接/逻辑实现移动到一个单独的功能组件上,以避免其在不同的UI组件(如登录和主屏幕(示例) )上的重复。

票数 1
EN

Stack Overflow用户

发布于 2022-06-05 03:02:40

这也花了我时间,但就像你给自己打电话,或者那个用户不会因为在线而丢失。试着重新设置这个应用程序,它曾经失败,不协调,连接,丢失。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70775872

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档