使用Swift 3的FBlogin不会返回任何值,并且在成功login后不会返回用户到应用程序
我正在使用iOS 10
Swift 3
来集成FB Login
。 我遵循了Facebook
文档中的所有步骤。 现在的问题是,成功login后,它不会返回任何值,也不会让用户回到应用程序。
注意:在Swift 2
完全一样。
嗨,我提出这个问题的Facebook开发人员的支持,问题是,我没有实现iOS10的正确的委托方法。 你可以在这里find正确的委托实现
import UIKit import CoreData @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? public func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool { // Override point for customization after application launch. return FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions) } public func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool { return FBSDKApplicationDelegate.sharedInstance().application( app, open: url as URL!, sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as! String, annotation: options[UIApplicationOpenURLOptionsKey.annotation] ) } public func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool { return FBSDKApplicationDelegate.sharedInstance().application( application, open: url as URL!, sourceApplication: sourceApplication, annotation: annotation) } }
对于我来说,“FBSDKApplicationDelegate”不适用于最新的Facebook Swift SDK版本v0.2.0
你可以在这里find我的v0.2.2的实现: https ://gist.github.com/mbecker/bdbd28cd11394085c01cf442aaa42c72
// // AppDelegate.swift // // Created by Mats Becker on 9/25/16. // Copyright © 2016 safari.digital. All rights reserved. // import UIKit import FacebookCore @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { // Override point for customization after application launch. return SDKApplicationDelegate.shared.application(application, didFinishLaunchingWithOptions: launchOptions) } func applicationWillResignActive(_ application: UIApplication) { // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. } func applicationDidEnterBackground(_ application: UIApplication) { // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. } func applicationWillEnterForeground(_ application: UIApplication) { // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. } func applicationDidBecomeActive(_ application: UIApplication) { // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. // Call the 'activate' method to log an app event for use // in analytics and advertising reporting. AppEventsLogger.activate(application) } func applicationWillTerminate(_ application: UIApplication) { // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. } public func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool { return SDKApplicationDelegate.shared.application( app, open: url as URL!, sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as! String, annotation: options[UIApplicationOpenURLOptionsKey.annotation] ) } public func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool { return SDKApplicationDelegate.shared.application( application, open: url as URL!, sourceApplication: sourceApplication, annotation: annotation ) } }
不要忘记设置钥匙串共享项目目标 – >function – >钥匙串共享 – >切换开关
你可以按照这个http://ashishkakkad.com/2015/05/facebook-login-swift-language-ios/
Evn:iOS 10,XCode 8.3.2,Swift 3,facebook-sdk-swift-0.2.0testing和工作。
由于上面的答案被指定为不推荐的代码,所以我改变了语法。
https://gist.github.com/jgchoi/097b59d85d6b378a81925be93a62fef9
import UIKit import FacebookCore @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? public func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool { // Override point for customization after application launch. return SDKApplicationDelegate.shared.application(application, didFinishLaunchingWithOptions: launchOptions) } public func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool { return SDKApplicationDelegate.shared.application(app, open: url, options: options) } public func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool { return SDKApplicationDelegate.shared.application(application, open: url) } } }
我经历了与Facebook和Twitter整合相同的问题。我已经解决了如下。
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool { let appname:String = options.first?.value as! String print(appname) if appname == "com.facebook.Facebook" { return FBSDKApplicationDelegate.sharedInstance().application( app, open: url as URL!, sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as! String, annotation: options[UIApplicationOpenURLOptionsKey.annotation] ) } return Twitter.sharedInstance().application(app, open: url, options: options) }
- 在应用程序相册中使用Facebook SDK 3.1 for iOS发布带有标题的图片
- 使用共享对话框显式分享自定义故事
- openActiveSessionWithReadPermissions不会自动login
- FBFriendPickerDelegate与Facebook v4消失
- 如何将FBProfilePictureView转换为UIImage?
- 使用iOS SDK将多张照片作为时间轴上的单个照片上传,而不是像Facebook中的相册
- 无法更改FBSDKLoginKit中的loginbutton的高度?
- iOS Facebook框架login过程
- 通过普通的非pipe理员用户通过iOS应用发布照片到Facebook粉丝页面