在IOS和Android上反应原生fbsdk用户更改问题

时间:2017-10-23 13:00:44

标签: android ios facebook react-native react-native-fbsdk

我使用此(https://github.com/facebook/react-native-fbsdk)组件尝试使用Facebook为我的应用设置身份验证。我已成功配置它,因此登录按钮在两个平台上都为我提供了有效的令牌。

问题是应用程序records successfully logged user并且摆脱它是非常棘手的(只有重新安装可以帮助)。此外,当您尝试更改在Android上的Facebook应用程序中记录用户时 - 它会出错:

  

'用户以不同的Facebook用户身份登录'

我总是收到this屏幕,而不是登录表单,我可以在其中输入其他凭据或至少更改帐户。

我使用提供的LoginManager.logInWithReadPermissions进行登录,LoginManager.logOut似乎什么都不做。

那么,如果登录不正确或者主-fb-app帐户发生了变化,我是否可以制作申请to give a user a choice

4 个答案:

答案 0 :(得分:2)

这似乎是一个尚未解决的问题https://github.com/facebook/react-native-fbsdk/issues/536

尽您所能– 请对该问题进行投票,以便将来FB团队可以解决。

答案– 目前,该问题无法解决。

Dev解决方法– 如果您正在开发中并且需要测试多个用户,则可以使用其他登录者对另一个模拟器进行身份验证。

如果FB解决了此问题,请考虑编辑此答案

答案 1 :(得分:1)

在模拟器或设备上打开Safari,访问www.facebook.com。

您将看到您仍然使用原始帐户登录。只需退出那里,然后你就可以在你的本机应用程序中使用另一个。

答案 2 :(得分:1)

FBLogout = async () => {
try{
    let tokenObj = await AccessToken.getCurrentAccessToken();
    let current_access_token = tokenObj.accessToken.toString();
    let logout = new GraphRequest(
        "me/permissions/",
        {
            accessToken: current_access_token,
            httpMethod: 'DELETE'
        },
        (error, result) => {
            if (error) {
                console.log('Error fetching data: ' + error.toString());
            } else {
                LoginManager.logOut();
            }
        });
     new GraphRequestManager().addRequest(logout).start() 
}catch(error}{
 console.log(error);
}
  }

答案 3 :(得分:0)

我正在提供android解决方案。

Android解决方案

这是一种解决方法。您必须更改官方软件包的Java代码。

打开以下文件。

  

react-native-fbsdk / android / src / main / java / com / facebook / reactnative / androidsdk / FBLoginManagerModule.java

@ReactMethod
public void logInWithReadPermissions(ReadableArray permissions, final Promise promise) {
 final LoginManager loginManager = LoginManager.getInstance();
 if(loginManager != null) loginManager.logOut(); // this is where the magic happens
 loginManager.registerCallback(mCallbackManager, new 
 LoginManagerCallback(promise));
 Activity activity = getCurrentActivity();
 if (activity != null) {
     loginManager.logInWithReadPermissions(
       activity,reactArrayToJavaStringCollection(permissions));
    }
 }