【发布时间】:2017-07-13 17:57:48
【问题描述】:
我一直试图让react-native-fbsdk 与CocoaPods 一起工作,因为我更喜欢将Facebook SDK 作为pod install 过程的一部分,但我运气不佳。我知道我可以react-native link npm 库并手动下载和添加必要的框架,但是当我有一个非常好的包管理器可供我使用时,这似乎相当愚蠢。
从the documentation 来看,这应该是相当简单的——只需将必要的吊舱添加到Podfile,对吗?但无论我尝试什么,似乎都没有包含原生 FBSDK 模块。我尝试了很多不同的Podfiles,有些是use_framework! 和pod 'Bolts',有些只有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)
但这会在FBLoginManager.js 中引发错误undefined is not an object (evaluating 'LoginManager.logInWithReadPermissions'。对 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 项目中的一些问题,此后已被删除。
【问题讨论】:
-
我对 pod 不太了解,但您需要提供路径吗?
pod 'FacebookPods', :path => 'path/to/lib/'根据我的记忆,Facebook 让我在~/Documents中安装 SDK,所以下载/查找 lib 可能是个问题 -
也许,我相信
FBSDK*Kitpod 也指定在react-native-fbsdk包中,这样就可以了。但整个想法是避免在项目之外下载和安装 SDK 并手动拖入框架。你用 CocoaPods 让它工作了吗? -
不,我们只是进行了手动安装。这个问题是关于安装带有 pod 的普通 FBSDK stackoverflow.com/a/30847447/3473220 不确定 RN 是如何使它复杂化的
-
react-native-fbsdk 包含原生资源,如果你用 cocoapods 导入这些资源,react-native 模块将没有正确的标头搜索路径,因此无法找到合适的模块,这就是为什么你有一个错误。
-
如果你的原生项目在 swift 中,这可能会很棘手,因为 facebook 不会在乎,也不用 swift 项目测试任何东西,所以你可以期望文档在 90% 不准确时说到迅速
标签: react-native react-native-ios fbsdk react-native-fbsdk fbsdkloginkit