#ios #swift #facebook
#iOS #swift #Facebook
Вопрос:
Я использую новый Facebook Swift SDK вместо Objective C SDK.
Ранее openURL
в AppDelegate.swift
должны были быть реализованы. Однако руководство Facebook по Swift не охватывает эту часть.
Регистрируется следующее:
Implementation of application:openURL:sourceApplication:annotation: not found. Please add the handler into your App Delegate. Class: Shoppie.AppDelegate
Но моя реализация не работает:
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
return GIDSignIn.sharedInstance().handle(url as URL!, sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as! String, annotation: nil)
if (url.scheme?.hasPrefix("fb"))! {
return FBSDKApplicationDelegate.sharedInstance().application(app, open: url, sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as! String!, annotation: nil)
} else {
return GIDSignIn.sharedInstance().handle(url as URL!, sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as! String, annotation: nil)
}
return false
}
Из-за:
Use of unresolved identifier 'FBSDKApplicationDelegate'
Я установил Swift SDK, добавив следующее в свой Podfile
:
pod 'FacebookCore'
pod 'FacebookLogin'
pod 'FacebookShare'
И выполняется pod install
.
Я не могу найти, каким должен быть обновленный код.
Ответ №1:
Их документации немного не хватает, но они предоставляют хороший образец приложения в своем репозитории github. смотрите https://github.com/facebook/facebook-sdk-swift/blob/master/Samples/Catalog/Sources/AppDelegate.swift
Вот код (Swift 3), который я использую для интеграции SDK в свои приложения:
import FacebookCore
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
SDKApplicationDelegate.shared.application(application, didFinishLaunchingWithOptions: launchOptions)
return true
}
func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
if let _ = Bundle.main.object(forInfoDictionaryKey: "FacebookAppID") as? String {
return SDKApplicationDelegate.shared.application(application,
open: url,
sourceApplication: sourceApplication,
annotation: annotation)
}
return false
}
@available(iOS 9.0, *)
func application(_ application: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any]) -> Bool {
if let _ = Bundle.main.object(forInfoDictionaryKey: "FacebookAppID") as? String {
return SDKApplicationDelegate.shared.application(application, open: url, options: options)
}
return false
}
}
К вашему сведению — библиотека facebook swift в основном является просто оболочкой для их стандартной библиотеки objective-c.
Комментарии:
1. Ах,
FBSDKApplicationDelegate
был переименован вSDKApplicationDelegate
. Спасибо за вашу помощь!
Ответ №2:
Я исправил Use of unresolved identifier 'FBSDKApplicationDelegate'
проблему, добавив следующее в свой Bridging-Header.h
файл:
#import <FBSDKCoreKit/FBSDKCoreKit.h>
#import <FBSDKLoginKit/FBSDKLoginKit.h>
Вход в систему работает после внесения этих изменений.
Похоже, Facebook Swift SDK все еще находится в стадии бета-тестирования, и учебные пособия еще предстоит обновить. (Проблема с Github)