5

我一直在尝试react-native-fbsdk使用 CocoaPods,因为我更喜欢获取 Facebook SDK 作为该pod install过程的一部分,但我运气不佳。我知道我可以react-native link使用 npm 库并手动下载和添加必要的框架,但是当我有一个非常好的包管理器可供我使用时,这似乎相当愚蠢。

文档来看,它应该是相当简单的——只需将必要的 pod 添加到Podfile,对吗?但无论我尝试什么,似乎都没有包含原生 FBSDK 模块。我已经尝试了很多不同Podfile的 s,有些带有use_framework!and pod 'Bolts',有些带有 just pod 'FBSDKCoreKit'。这是我目前正在使用的:

target 'FacebookPods' do
  pod 'FBSDKCoreKit'
  pod 'FBSDKShareKit'
  pod 'FBSDKLoginKit'

  target 'FacebookPodsTests' do
    inherit! :search_paths
  end
end

但是当我运行我的测试应用程序并尝试对react-native-fbsdk模块做任何事情时,我收到错误,抱怨各种本机模块未定义。这是我的index.ios.js文件,试图访问LoginManager

import React, {Component} from "react"
import {AppRegistry, Text} from "react-native"
import {LoginManager} from "react-native-fbsdk"

export default class FacebookPods extends Component {
  componentWillMount() {
    LoginManager.logInWithReadPermissions(["email"])
      .then(() => console.log("Success!"))
      .catch((err) => console.log("Failure!", err))
  }

  render() {
    return <Text>Hello World</Text>
  }
}

AppRegistry.registerComponent("FacebookPods", () => FacebookPods)

但这会引发错误undefined is not an object (evaluating 'LoginManager.logInWithReadPermissions'FBLoginManager.js对 NativeModules 的进一步检查表明,根本没有包含本机 FBSDK 模块。我还在启动时收到以下警告:

2017-07-13 19:50:19.006 [warn][tid:com.facebook.react.JavaScript] Warning: Native component for "RCTFBLikeView" does not exist
2017-07-13 19:50:19.007 [warn][tid:com.facebook.react.JavaScript] Warning: Native component for "RCTFBLoginButton" does not exist
2017-07-13 19:50:19.008 [warn][tid:com.facebook.react.JavaScript] Warning: Native component for "RCTFBSendButton" does not exist
2017-07-13 19:50:19.009 [warn][tid:com.facebook.react.JavaScript] Warning: Native component for "RCTFBShareButton" does not exist

所以,是的,我完全不知所措。在我看来,只需添加 pod 就足以包含框架。我已经在互联网上搜索了我可能错过的任何其他步骤,但没有太多,除了react-native-fbsdk项目中的一些问题,此后这些问题已被删除。

4

3 回答 3

8

我遇到了这个问题,并设法react-native-fbsdk通过将以下内容添加到我的 pod 文件中来使用安装的 Facebook SDK:

pod 'FBSDKCoreKit'
pod 'FBSDKLoginKit'
pod 'FBSDKShareKit'

并在 AppDelegate.m 中导入以下内容:

#import <FBSDKCoreKit/FBSDKCoreKit.h>
#import <FBSDKShareKit/FBSDKShareKit.h>
#import <FBSDKLoginKit/FBSDKLoginKit.h>

请注意,这些导入与react-native-fbsdk自述文件中的建议不同。那是因为FBSDKCorekit.framework,FBSDKShareKit.frameworkFBSDKLoginKit.framework不可用。

您还需要链接libFBSDKShareKit.a,libFBSDKCoreKit.a和XcodelibFBSDKLoginKit.a中的General选项卡。这些是仅有的三个可链接的核心/登录/共享事物。它们指的是 pod,在 pods 目录中您会看到没有.framework文件,只有.h文件,所以这些是我们导入 AppDelegate.m 的文件。这(我认为)提供react-native-fbsdk了它需要的 SDK 组件中的所有文件。

于 2018-08-13T21:22:05.270 回答
6

以这种方式设置我的 Podfile 对我有用(不确定是否需要 Bolts 框架 pod):

pod 'Bolts' pod 'FBSDKCoreKit' pod 'FBSDKLoginKit' pod 'FBSDKShareKit'

而且我必须react-native link确保它libRCTFBSDK.a在 xcode 的 Build TARGET => build phrases => "Link Binary with libraries" 列表中。如果没有,您可能需要libRCTFBSDK.a手动添加。我发现,一旦我运行了该列表中的react-native link和,xCode 就会正确编译。libRCTFBSDK.a

于 2017-08-06T02:35:05.267 回答
0

如果你使用 cocoapods,react native 会使用 cocoapods 链接链接库。我创建了一个新项目,然后在运行“pod init”和“pod install”之前安装并链接所有包。链接包时可能来自 cocoapods 的此错误。所有软件包都需要在运行“pod install”后安装的“react-native link”,但它不起作用。我认为我们可以在运行 react native 链接之前取消 cocoapod。

于 2019-02-22T15:35:02.563 回答