基本的に私はfacebookLogin.swiftという名前のクラスと、ログインページと、ViewController.Swiftというホームページを持っています。私はFacebookのログイン情報をすべて正しくコーディングしており、FBSDKが提供するボタンと定義したカスタムボタンの両方でログインしてログアウトすることができます。しかし、私は、ユーザーがログインしている場合ViewController.swiftページに移動する方法を見つけ出すことはできませんユーザーがFacebook経由でログインしている場合、別のviewControllerをプログラムで起動する方法
をここでfacebookLogin.swiftコードは次のとおりです。ここで
import UIKit
import FBSDKCoreKit
import FBSDKLoginKit
class facebookLogin: UIViewController, FBSDKLoginButtonDelegate {
var loginStatus = false;
@IBOutlet weak var facebookOutlet: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
super.viewDidLoad()
let loginButton = FBSDKLoginButton()
view.addSubview(loginButton)
loginButton.center = view.center
loginButton.delegate = self;
loginButton.readPermissions = ["email","public_profile"]
}
@IBAction func facebookAction(_ sender: Any) {
customFBLogin()
if (FBSDKAccessToken.current() != nil) {
NSLog("it works")
}
}
func customFBLogin() {
FBSDKLoginManager().logIn(withReadPermissions: ["email","public_profile"], from: self) { (result, err) in
if err != nil {
print("Facebook Login Error Failed \(err)")
return;
}
self.showEmailAddress();
self.loginStatus = true;
}
}
func loginButtonDidLogOut(_ loginButton: FBSDKLoginButton!) {
print("Did log out of Facebook")
}
func loginButton(_ loginButton: FBSDKLoginButton!, didCompleteWith result: FBSDKLoginManagerLoginResult!, error: Error!) {
if error != nil {
print(error)
return;
} else {
print("Successfuly logged into Facebook");
showEmailAddress()
}
}
func showEmailAddress() {
FBSDKGraphRequest(graphPath: "/me", parameters: ["fields": "id, name, email"]).start(completionHandler: { (connection, result, err) in
if err != nil {
print("Failed to start graph request \(err)")
return;
}
print(result)
})
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
/*
// MARK: - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
// Get the new view controller using segue.destinationViewController.
// Pass the selected object to the new view controller.
}
*/
}
はAppDelegateから関連するコードです.swiftファイル:AppDelegate.swiftクラスの最初のアプリケーション機能で
import UIKit
import CoreData
import Firebase
import FBSDKCoreKit
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
FIRApp.configure()
FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)
let mainStoryBoard = UIStoryboard.init(name: "Main", bundle: nil)
self.window = UIWindow(frame: UIScreen.main.bounds)
var initialViewController: UIViewController
if(FBSDKAccessToken.current() != nil) {
let vc = mainStoryBoard.instantiateViewController(withIdentifier: "ViewController") as! ViewController
initialViewController = vc
} else{
initialViewController = mainStoryBoard.instantiateViewController(withIdentifier: "facebookLogin")
}
self.window?.rootViewController = initialViewController
self.window?.makeKeyAndVisible()
return true
}
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
let handled = FBSDKApplicationDelegate.sharedInstance().application(app, open: url, sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as! String!, annotation: options[UIApplicationOpenURLOptionsKey.annotation])
return handled;
}
、私はこのコードを使うことを提案stackoverflowの上の別のチュートリアルを発見しました。私はコードを入力し、構文をswift3に変換しましたが、起動時にアプリケーションが壊れます。これは、私がログインしていることを知っていることを意味しますが、何らかの理由でセグがロードされず、アプリケーションが壊れてしまいます。私が得るエラーは、スレッド1:sigabrtです。ここで
は、最初の初期ビューコントローラでのストーリーボードの外観で、関連する項目は、左側にあり、ユーザーがログインしている場合、私は右 1
あなたはストーリーボードIDを定義しましたか? –
実際のデバイスを使用していますか? –