如何使用 react-native-fbsdk 提供的 LoginManager 从 facebook 注销?

How to logout from facebook with LoginManager provided by react-native-fbsdk?

简单来说,react-native-fbsdk提供的LoginManager如何登出?

如果我们查看 react-native-fbsdk 提供的 LoginManager 中的代码,我们会发现这部分关于 logout:

  logOut() {
    LoginManager.logOut();
  },

所以没有回调,或者 promise? 那我怎么真正使用它呢?如果我调用 LoginManager.logout(),它实际上会执行注销。但是由于不允许我传递任何回调,并且它没有 return 承诺,那么我怎么知道注销何时完成,或者是否成功?我尝试提供回调,但它导致了错误。我也尝试 return 从它那里得到一个承诺,但它也 return 出错了。所以我不知道应该如何使用它?不会是同步登出吧?

我认为它不是同步函数,但我认为您不需要等待它完成。您可以将其用作同步。我在想这是因为如果您检查默认的 LoginButton on react-native-fbsdk onLogoutFinished prop doesn't pass any parameters about the logout action (successful, failed etc.). This means you can assume that its gonna happen without any problem since facebook itself assumed that. Default LoginButton listens for events 到 运行 onLogoutFinished 函数。如果你真的需要,你可以尝试实现类似的东西。

对我来说,这个有效:

import { LoginManager } from 'react-native-fbsdk'
LoginManager.logOut()

实际上,在成功登录后,acsessToken 在调用 loginmanager.logout() 后变为 null.So,您可以使用 AccessToken.getCurrentAccessToken() 检查 accesstoken,如果它为空,那么您可以放心地假设注销成功。

LoginManager.logOut();
const token = await AccessToken.getCurrentAccessToken();
if(_.isEmpty(token) {/* your code for doing logout related actions */}

如果你使用 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;
    }
  };