Ios 反应本机-fbsdk LoginManager与LoginButton

Ios 反应本机-fbsdk LoginManager与LoginButton,ios,facebook,react-native,fbsdk,react-native-fbsdk,Ios,Facebook,React Native,Fbsdk,React Native Fbsdk,我目前正在我的react原生应用程序中实现一个Facebook登录按钮。一旦用户成功登录,我会抓取一些信息,名字,姓氏和电子邮件地址 阅读SDK文档和在线示例后,我可以看到实现这一点的两种不同方法: 使用LoginButton和AccessToken,然后执行GraphRequest 然后使用LoginManager执行GraphRequest(我选择的方法): 类LoginView扩展组件{ _fbAuth=()=>{ LoginManager.logInWithReadPermissions

我目前正在我的react原生应用程序中实现一个Facebook登录按钮。一旦用户成功登录,我会抓取一些信息,名字,姓氏和电子邮件地址

阅读SDK文档和在线示例后,我可以看到实现这一点的两种不同方法:

  • 使用LoginButton和AccessToken,然后执行GraphRequest

  • 然后使用LoginManager执行GraphRequest(我选择的方法):

    类LoginView扩展组件{
    _fbAuth=()=>{
    LoginManager.logInWithReadPermissions(['public_profile','email'])。然后(函数(结果){
    如果(结果被取消){
    console.log('登录已取消')
    }
    否则{
    console.log('login success'+result.grantedPermissions)
    const infoRequest=new GraphRequest('/me'{
    参数:{
    “字段”:{
    '字符串':'电子邮件,名字,姓氏,图片'
    }
    }
    },(误差、分辨率)=>{
    console.log(err,res);
    });
    新建GraphRequestManager().addRequest(infoRequest).start();
    }
    },函数(错误){
    console.log('发生错误:'+错误)
    })
    }
    render(){
    返回(
    {this.\u fbAuth()}}>
    使用Facebook登录
    )
    }
    }
    
  • LoginManager和LoginButton之间的主要区别是什么

    LoginButton的联机示例还获取当前令牌:
    AccessToken.getCurrentAccessToken()。然后(…)

    使用LoginManager,我可以在不使用AccessToken的情况下获取用户信息-LoginManager是否在幕后调用AccessToken

    有更好的方法吗?

    据我所知

    使用登录按钮和访问令牌时,请执行GraphRequest

    因此,您需要检查您的AccessToken是否为零,或者您的currentToken是否有效,如果您有AccessToken,那么您可以直接获取数据,而无需单击Facebook按钮或登录按钮。所以这意味着,如果您不执行注销方法或卸载应用程序,您仍然可以通过图形请求的accessToken获取数据

    现在,当您使用LoginManager时,请执行GraphRequest

    所以,这种方法每次都会让你来到Safari,进行facebook应用程序的自动化过程。LoginManager通常每次在Safari中打开Facebook,然后返回应用程序并提供数据

    希望您能理解。

    谢谢你

    查看我的答案谢谢你的回复。在这两者之间,有没有更好的方法可以使用?最好使用登录按钮和accesstoken,因为如果你的accesstoken不是零或者accesstoken没有问题的话,这将在不打开facebook页面的情况下为你提供数据。谢谢您的输入。@JeckyModi有办法删除注销按钮吗?因为,当我们登录并导航到下一个屏幕时。但在这个过程中,它会变为注销按钮。从用户体验的角度看,它看起来很糟糕。有没有办法从登录按钮中删除注销选项?@LakshmanDiwaakar您可以使用自定义按钮登录facebook
    class LoginView extends Component {
        _fbAuth = () => {
            LoginManager.logInWithReadPermissions(['public_profile','email']).then(function(result){
                if(result.isCancelled){
                    console.log('loging cancelled')
                }
                else {
                    console.log('login success' + result.grantedPermissions)
    
                    const infoRequest = new GraphRequest('/me', {
                        parameters: {
                            'fields': {
                                'string' : 'email,first_name,last_name,picture'
                            }
                        }
                    }, (err, res) => {
                        console.log(err, res);
                    });
                    new GraphRequestManager().addRequest(infoRequest).start();
    
                }
            }, function(error){
                console.log('An error occured: ' + error)
            })
        }
    
        render(){
            return (
                <TouchableHighlight style={{flex:1}} onPress={() => {this._fbAuth()}}>
                    <View style={styles.container}>
                        <View style={styles.buttonContainer}>
                            <Text style={{flex:1}}>Login with Facebook</Text>
                        </View>
                    </View>
                </TouchableHighlight>
            )
        }
    }