简单来说,如何使用 react-native-fbsdk 提供的 LoginManager 注销?
如果我们查看 react-native-fbsdk 提供的 LoginManager 内部的代码,我们会发现有关注销的这一部分:
logOut() {
LoginManager.logOut();
},
所以没有回电,或者承诺?那我该怎么用呢?如果我调用 LoginManager.logout(),它实际上会执行注销。但是由于不允许我传递任何回调,并且由于它不返回承诺,那么我怎么知道注销何时完成,或者它是否成功?我尝试提供回调,但导致错误。我也试图从中返回一个承诺,但它也返回了一个错误。所以我不知道这应该如何使用?它不可能是同步注销,对吧?
它不是一个同步函数,但我认为你不需要等待它完成。您可以将其用作同步。我之所以这么想,是因为如果您检查react-native-fbsdk
onLogoutFinished
prop 上的默认LoginButton
不会传递有关注销操作的任何参数(成功、失败等)。这意味着您可以假设它会毫无问题地发生,因为Facebook本身就假设了这一点。默认LoginButton
侦听要运行的事件onLogoutFinished
函数。如果你真的需要,你可以尝试实现这样的东西。
对我来说,这有效:
import { LoginManager } from 'react-native-fbsdk'
LoginManager.logOut()
如果你与Firebase一起使用,你可以运行这样的内容
import { LoginManager } from 'react-native-fbsdk-next';
import auth from '@react-native-firebase/auth';
const signOut = async () => {
console.log('executing logout');
try {
LoginManager.logOut();
const signOutResult = await auth().signOut();
console.log('signOutResult', signOutResult);
navigation.navigate('Root', { screen: 'Login' });
} catch (error) {
console.error;
}
};
实际上,在成功注销后,acsessToken 变为空。因此,在调用loginmanager.logout()之后,您可以使用AccessToken.getCurrentAccessToken()检查访问令牌,如果它为空,那么您可以安全地假设注销已成功发生。
LoginManager.logOut();
const token = await AccessToken.getCurrentAccessToken();
if(_.isEmpty(token) {/* your code for doing logout related actions */}