我正在开发一个聊天应用程序,我有几个屏幕:
- 登录/注册 -> 我在其中创建了一个 nodejs 服务器进行身份验证。
- HomeScreen -> 存在与人的所有对话。
- ChatScreen -> 与特定用户聊天。在这里,我提供了视频通话/语音通话的选项,就像其他应用程序一样。
现在问题出在voximplant 登录功能上。由于我已经有一个使用 jsonwebtoken 的具有身份验证功能的后端,所以我也不想使用voximplant
sdk 登录,但经过几次尝试后我不得不这样做,因为只有它才能工作。因此,当我使用我的 nodejs API 登录/注册时,我也使用voximplant
SDK 登录。到目前为止,一切都很酷,它可以工作。但是现在如果我杀死应用程序并重新启动它,因为voximplant
登录功能在login/register
组件中,(现在它不存在,因为我已经过身份验证并且此时在 HomeScreen 中 - 使用 AsynStorage 存储 jsonwebtoken),所以voximplant
SDK 被注销。现在在 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