如何在反应原生应用程序中安装facebook sdk?

时间:2017-05-10 22:47:17

标签: ios objective-c swift facebook react-native

我按照here的说明进行了操作,但由于指令是在Objective C中,而我的AppDelegate文件是用Swift编写的,所以我无法通过连接app delegate来获得第5步。

我试过了:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)
    // Add any custom logic here.
    return true
}

func application(_ application: UIApplication, open url: URL, options: (UIApplicationOpenURLOptionsKey & id)) -> Bool {
    let handled: Bool = FBSDKApplicationDelegate.sharedInstance().application(application, openURL: url, sourceApplication: options[UIApplicationOpenURLOptionsSourceApplicationKey], annotation: options[UIApplicationOpenURLOptionsAnnotationKey])
    // Add any custom logic here.
    return handled
}

产生此构建错误:

The following build commands failed:
    CompileSwift normal x86_64 /Users/kevinchiang/jh-mobile/ios/JustHive/Appdelegate.swift
    CompileSwiftSources normal x86_64 com.apple.xcode.tools.swift.compiler
(2 failures)

我对Swift和Obj-C不熟悉,所以我认为我的Swift代码可能有问题。

1 个答案:

答案 0 :(得分:0)

在你的函数中你有参数选项的类型是(UIApplicationOpenURLOptionsKey & id)它不存在你应该在Swift中查找它的等价物application(_:open:options:),你可以看到{{3}是一个包含多个元素的字典,以正确使用FB sdk,您必须使用与选项注释和选项源应用程序对应的键,以便您可以正确使用它。

所以回答你的问题应该改变下面的第二个功能。让我知道它是怎么回事。

func application(_ app: UIApplication, 
              open url: URL, 
               options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool{ 
    let handled: Bool = FBSDKApplicationDelegate.sharedInstance().application(applic‌​ation, openURL: url, sourceApplication: options[.sourceApplication], annotation: options[.annotation])
    return handled 
}

您还可以简化上面删除变量句柄的代码,它将如下所示。

func application(_ app: UIApplication, 
              open url: URL, 
               options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool{ 

    return FBSDKApplicationDelegate.sharedInstance().application(applic‌​ation, openURL: url, sourceApplication: options[.sourceApplication], annotation: options[.annotation])

}