Facebook SDK 和自定义按钮登录 react-native 0.60+ 不工作

Facebook SDK & custom button Login in react-native 0.60+ not working

我正在尝试在我的 React-Native 应用程序中实现 Facebook 登录,但由于某种原因,它抛出了 Cannot read property 'logInWithPermissions' of undefined。 我正在使用 React-Native 0.60.4。 我已经下载 FacebookSDK 5.3.0 (_Stable framework)

尝试使用 Cocoapod 但经过一些研究,许多人不建议使用它,因为它会破坏项目。

这些是我遵循的步骤:

  1. 已下载 FacebookSDK 5.3.0(当前最新至 08/15/19)
  2. FBSDKCoreKit.frameworkFBSDKLoginKit.frameworkFBSDKShareKit.framework 放入文件夹中作为 ~/Documents/FacebookSDK
  3. 还将这 3 个框架文件放入我的 XCode 项目中的 /Frameworks 文件夹中。
  4. 为了以防万一,我还在构建设置下的框架搜索路径中添加了路径~/Documents/FacebookSDK
  5. 在XCode上构建,成功。
  6. 我从我的 react-native 项目下载了 react-native-fbsdk。它下载版本 1.0.1.
  7. 我没有在 Link binary with Libraries 中添加 libRTCFBSDK.a 文件,因为它会抛出一个错误,提示 FBSDKShareKit.h isn't found.

这就是我在 AuthView.js 上所做的,我将其添加到 TouchableOpacity 中的简单绑定 onPress 事件。

const FBSDK = require('react-native-fbsdk');
const {
  LoginManager,
} = FBSDK;

handleFacebookLogin() {
        LoginManager.logInWithPermissions(['public_profile', 'publish_actions']).then(
            (result) => {
                if (result.isCancelled) {
                    console.log('Login cancelled')
                } else {
                    console.log('Login success with permissions: ' + result.grantedPermissions.toString())
                }
            },
            (error) => {
                console.log('Login fail with error: ' + error)
            }
        )
    }

现在,我注意到在 Facebook 的 FBLoginManager.js 中,这是被调用的函数

logInWithPermissions(permissions: Array<string>): Promise<LoginResult> {
    return LoginManager.logInWithPermissions(permissions);
  },

每当我将鼠标悬停在 LoginManager 上时,它都会显示 未定义。为什么这是未定义的?当它实际上是文件顶部的常量时

const LoginManager = require('react-native').NativeModules.FBLoginManager;

谁能帮帮我?我已经挣扎了4天了。我已经尝试用 cocoapods 安装它,但没有成功。然后做 react-native link react-native-fbsdk 没有成功......很多人建议不要使用 link 而是手动做。

我还能尝试什么?谢谢。

您必须使用库在 Link 二进制文件中添加 libRTCFBSDK.a 文件。要修复“FBSDKShareKit.h 未找到”问题,请将 ~/Documents/FacebookSDK 更改为 $(HOME)/Documents/FacebookSDK