Facebook SDK v4 & Parse (Swift)

Posted

技术标签:

【中文标题】Facebook SDK v4 & Parse (Swift)【英文标题】: 【发布时间】:2015-04-11 04:15:43 【问题描述】:

我正在尝试使用 ParseFacebookUtilsv4 和 FacebookSDK v4。经过多次试验,我设法将错误减少到 1 个。

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool 

    Parse.setApplicationId("###",
        clientKey: "###")

    PFFacebookUtils.initializeFacebookWithLaunchOptions(launchOptions)


在这部分,完全复制自 Parse's ios Docs - Facebook Setup(昨天为 FBSDKv4 更新),我收到一个错误:

'PFFacebookUtils.Type' does not have a member named 'initializeFacebookWithLaunchOptions'

当我查看 ParseFacebookUtilsv4 的完整文档时,上面写着 ~ 警告:这个类支持官方 Facebook iOS SDK v4.0+,并且只在 iOS 上可用。 ~,我看到有'没有任何类名为 'initializeFacebookWithLaunchOptions';取而代之的是 'initializeFacebookWithApplicationLaunchOptions:'

但是,当我将 AppDelegate.swift / didFinishLaunchingWithOptions 部分更改为:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool 

    Parse.setApplicationId("###",
        clientKey: "###")

    PFFacebookUtils.initializeFacebookWithApplicationLaunchOptions(launchOptions)


...我收到一条错误消息,提示“预期返回“Bool”的函数中缺少返回。然后我尝试添加两者

 return true /* AND */ return false // at the end of the function; 

...我遇到 9 次崩溃,例如: i.stack.imgur.com/o989R.png

我完全被卡住了,不知道如何解决这个问题。

【问题讨论】:

您是否在 bundle plist 中提供了 Facebook 应用程序 ID? @Uttam 是的,我做到了。绝对是这条线造成了问题...PFFacebookUtils.initializeFacebookWithApplicationLaunchOptions(launchOptions) ...因为当我将其注释掉并return true;应用程序启动时没有任何错误。 我们可以查看完整的错误日志吗? Here is the full error log 当我 PFFacebookUtils.initializeFacebookWithApplicationLaunchOptions(launchOptions)return true 参考这个链接 - ***.com/questions/15457136/… 希望这里提供的解决方案对你有用:) 【参考方案1】:
[PFFacebookUtils initializeFacebookWithApplicationLaunchOptions:launchOptions]; //works

[PFFacebookUtils initializeFacebookWithLaunchOptions:launchOptions]; //does not compile or work

上面的第一行对我有用。好像他们忘记更新他们的文档了。

【讨论】:

【参考方案2】:

您应该转到 PFFacebookUtils.h 头文件中的 PFFacebookUtils.h 并进行更改:

(void)initializeFacebookWithApplicationLaunchOptions:(NSDictionary *)launchOptions;

收件人:

(void)initializeFacebookWithApplicationLaunchOptions:(PF_NULLABLE NSDictionary *)launchOptions;

它会工作的! 参考https://developers.facebook.com/bugs/1462780714012820/

【讨论】:

我的应用仍然崩溃【参考方案3】:

根据您的错误日志,我认为您缺少依赖项,或者您在此处添加了依赖项,但您尚未将它们包含在您的项目中。

我认为您的 Facebook SDK 未包含在构建目标中,因为缺少的符号具有 FB 前缀。

【讨论】:

imgur.com/4Mo53vC 如您所见,我在我的项目中添加了 FacebookSDK(v4) 和 Parse 1.7.1(即 PFFacebookUtilsv4)。我得到的错误不是来自 Facebook SDK;而是与 Parse 相关的 PFFacebookUtils,而不是 Facebook。【参考方案4】:

找到我的答案: 我必须在我的桥接头中导入 FBSDKLoginKit(最近更新的 Parse Doc 中没有提到)。

所以我的桥接头看起来像:

    #import <FBSDKCoreKit/FBSDKCoreKit.h>
    #import <FBSDKLoginKit/FBSDKLoginKit.h>
    #import <ParseFacebookUtilsV4/PFFacebookUtils.h>
    #import <Parse/Parse.h>
    #import <Bolts/Bolts.h>

【讨论】:

【参考方案5】:

我遇到了同样的问题,必须实施上述两个建议才能让我的应用正常运行。

首先我从 FB SDK 添加了 FBSDKLoginKit 并将其导入。(感谢 senty)

#import <FBSDKLoginKit/FBSDKLoginKit.h>

然后我换了:

[PFFacebookUtils initializeFacebookWithLaunchOptions:launchOptions];

与:

[PFFacebookUtils initializeFacebookWithApplicationLaunchOptions:launchOptions];

希望我的回答对你有帮助。

【讨论】:

【参考方案6】:

我在使用 FB SDK v4 + Parse v1.7.5 SDK 时遇到了同样的问题。

最后,我在我的项目中解决了这个问题。 Parse 空白项目有一个错误。不要使用 Parse 空白项目。

https://www.parse.com/docs/downloads/官方下载页面,有两种下载方式(v 1.7.5),SDK或Blank Project,启动工程。

它仅适用于 Parse SDK 文件 + 您的新项目!请仅导入 SDK。

【讨论】:

【参考方案7】:

尝试删除ParseFacebookUtils(只保留ParseFacebookUtilsV4)会产生一些冲突。

【讨论】:

【参考方案8】:

如果您使用的是 FB SDK v4 + Parse v1.7.5 SDK,

我只有:

#import <ParseFacebookUtilsV4/PFFacebookUtils.h>

在我的桥接头中。我的 AppDelegate.swift 文件现在包含:

import Parse
import Bolts
import FBSDKCoreKit
import FBSDKShareKit
import FBSDKLoginKit

我能够成功运行我的应用程序。

【讨论】:

以上是关于Facebook SDK v4 & Parse (Swift)的主要内容,如果未能解决你的问题,请参考以下文章

Facebook 应用程序邀请 iOS v4 SDK 错误

Facebook 应用程序邀请 iOS v4 SDK 错误

使用 Facebook PHP SDK v4 发布图像时出错

如何使用 Facebook PHP SDK v4 访问 GraphObject 中的用户语言

如何在 Android (Facebook SDK v4) 上发出 Facebook 游戏请求后获取收件人 ID?

Facebook Graph API GET 请求 - 应包含“字段”参数(Swift,Facebook SDK v4.5.1)