如何在 React Native 中使用 SFAuthenticationSession 或 SFSafariViewController 实现 Facebook 登录?

Posted

技术标签:

【中文标题】如何在 React Native 中使用 SFAuthenticationSession 或 SFSafariViewController 实现 Facebook 登录?【英文标题】:How do I implement Facebook login with SFAuthenticationSession or SFSafariViewController in React Native? 【发布时间】:2018-01-05 19:44:57 【问题描述】:

使用 React Native 实现 Facebook 登录的实际方法是什么?我正在寻找一种 Apple 接受的方式(不会被拒绝)。

显然 react-native-fbsdk 不使用 SFSafariViewController(它只是打开一个 safari webview),这是 Apple 不能接受的……他们因此拒绝了我的应用程序。

我当前的代码。打开 Safari 网络视图。

    LoginManager.setLoginBehavior('browser')

    class FBLogin extends Component 
      handleFacebookLogin = async () => 
        try 
          const result = await LoginManager.logInWithReadPermissions([
            'public_profile',
            'email',
            'user_friends',
          ])
          if (result.isCancelled) 
            alert('Login cancelled')
           else 
            const token = await AccessToken.getCurrentAccessToken()
            this.props.login(token)
          
         catch (error) 
          alert(`login error: $error`)
        
      

      render() 
        return (
          <LoginButton
            type='primary'
            block
            onPress=() => this.handleFacebookLogin()
          >
            Login with Facebook
          </LoginButton>
        )
      
    

被苹果拒绝,原因是

我们注意到用户被带到 Safari 登录或注册帐户,这提供了糟糕的用户体验。

【问题讨论】:

【参考方案1】:

您可以尝试使用“react-native-app-auth”库。它使用 SFSafariViewController 实现了 SFAuthenticationSession(Apple 为 ios 11 及更高版本验证用户的方式)。 他们有一个非常简洁的文档:http://npm.taobao.org/package/react-native-app-auth

【讨论】:

以上是关于如何在 React Native 中使用 SFAuthenticationSession 或 SFSafariViewController 实现 Facebook 登录?的主要内容,如果未能解决你的问题,请参考以下文章

如何在React Native中使用CreateBottomTabNavigator?

如何在 React Native 中的循环中查找

如何在 react-native 中使用 FormData?

如何使用 React-Native 在 iOS 中禁用屏幕截图

React Native:如何使用 expo 在 webview 中制作全屏 youtube 嵌入视频(没有 react-native 链接)

如何在组件 React / React-native 的单独页面中使用动态 graphql(字符串)