ios यदि आपका उपयोगकर्ता फेसबुक के माध्यम से प्रवेश हुआ है तो प्रोग्राम को दूसरे दृश्य में लॉन्च करने के लिए कैसे करें




xcode facebook (3)

आपका कोड ठीक लगता है आपको स्टोरीबोर्ड डिज़ाइन स्क्रीन में पहचान अनुभाग के अंतर्गत अपने व्यू नियंत्रक की स्टोरीबोर्ड आईडी को जांचना चाहिए। आपको स्टोरीबोर्ड आईडी को "व्यू नियंत्रक" के रूप में देना चाहिए आपके कोड के अनुसार लॉगिन स्क्रीन की स्टोरीबोर्ड आईडी "फ़ेसबुकलॉगिन" होनी चाहिए।

मूल रूप से मेरे पास एक प्रोग्राम है, जिसे फॉलोऑन लॉगिन.swift, लॉगिन पृष्ठ और व्यू नियंत्रक कहते हैं। मुखपृष्ठ को खोलें। मैंने सही ढंग से सभी फेसबुक लॉगिन सामान को कोडित किया है और यह सब काम करता है, मैं लॉग इन कर सकता हूं और दोनों बटन के साथ लॉग आउट कर सकता हूँ, जिस पर एफबीएसडीके प्रदान करता है और साथ ही कस्टम बटन को मैंने परिभाषित किया है। हालांकि, अगर उपयोगकर्ता लॉगिन हुआ है तो मैं समझ सकता हूं कि कैसे ViewController.swift पृष्ठ पर जाना है।

यहां फ़ेसबुक लॉगिन.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 फ़ाइल से प्रासंगिक कोड है:

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;
    }

AppDelegate.swift वर्ग में पहले एप्लिकेशन फ़ंक्शन में, मुझे स्टैकहोवरफ्लो पर एक और ट्यूटोरियल मिला है जो इस कोड का उपयोग करने का सुझाव दिया है। मैंने कोड को इनपुट किया और सिंटैक्स को स्विफ्ट 3 में बदल दिया, लेकिन जब मैं इसे लॉन्च करता हूं तो ऐप टूट जाता है इसका मतलब यह है कि यह जानता है कि मैं लॉग इन हूं, लेकिन किसी कारण से segue लोड नहीं होता है और यह ऐप को तोड़ता है। मेरे पास त्रुटि 1 थ्रेड: sigabrt है।

यहां बताया गया है कि कहानी बोर्ड में प्रासंगिक आइटम कैसे दिखते हैं, पहले तो प्रारंभिक दृश्य नियंत्रक बाईं तरफ है और यदि उपयोगकर्ता लॉग इन है तो मैं चाहता हूं कि ऐप को दृश्य से शुरू करना चाहिए। नियंत्रक 1 पर दाईं ओर


स्विफ्ट 3 कोड

// जाँचें पिछले AccesToken

    if let accessToken = AccessToken.current {
        print("Last AccesToken -\(accessToken)")

        // Redirect to next screen
        self.performSegue(withIdentifier:"NextScreen", sender: self)
    }
    else {

        let loginManager = LoginManager()
        loginManager.loginBehavior = LoginBehavior.web
        loginManager.logIn([ .publicProfile , .email, .userFriends], viewController: self) { loginResult in
            switch loginResult {

            case .failed(let error):
                print(error)
                break
            case .cancelled:
                print("User cancelled login.")
                break
            case .success(let grantedPermissions, let declinedPermissions, let accessToken):
                print("Logged in! \(grantedPermissions) \(accessToken) \(declinedPermissions)")

                // Save Current UserInfo
                let params = ["fields":"id,name,email,picture"]
                let graphRequest = GraphRequest(graphPath: "me", parameters: params)
                graphRequest.start { (urlResponse, requestResult) in
                    switch requestResult {
                    case .failed(let error):
                        print(error)
                    case .success(let graphResponse):
                        if let responseDictionary = graphResponse.dictionaryValue {

                            print("\(String(describing: graphResponse.dictionaryValue))")

                            UserDefaults.standard.set(responseDictionary, forKey: "userInfo")
                        }
                    }
                }

                self.performSegue(withIdentifier: "NextScreen", sender: self)
                break
            }
        }
    }

आपकी वर्तमान पहुंच टोकन शून्य है असली डिवाइस में जांचने का प्रयास करें क्योंकि नवीनतम एफबीएसडीके सिम्युलेटर में प्रवेश टोकन स्टोर नहीं करता है। यह कंसोल में "सिम्युलेटर बग के कारण NSUserDefaults से पहुंच टोकन लोड करने के लिए वापस गिरने" को प्रिंट करेगा

---- संपादित करें ----

यहां यदि आपकी वर्तमान पहुंच टोकन शून्य है, तो इससे लॉगिन स्क्रीन पर जाना होगा। अपनी आवश्यकता के अनुसार परिवर्तन के बाद स्थिति

if(FBSDKAccessToken.current() != nil) {
      let vc = mainStoryBoard.instantiateViewController(withIdentifier: "ViewController") as! ViewController
      initialViewController = vc
} 
else { 
    initialViewController = mainStoryBoard.instantiateViewController(withIdentifier: "facebookLogin")
}

अपनी आवश्यकता के रूप में initialViewController बदलें

---- अद्यतन करें ----

आप इस चेतावनी को अनदेखा कर सकते हैं, IOS सिम्युलेटर का उपयोग करते समय यह FacebookSDK में कठिन कोड है। एसडीके में एक बग होता है, हालांकि यह सिम्युलेटर एक्सेस टोकन को कैश करने से रोकता है।

आप इसे FBSDKKeychainStore.m: 94 और FBSDKKeychainStore.m में निम्न पंक्ति जोड़कर ठीक कर सकते हैं: 135 बस से पहले:

let key = String(format: "%@_fix", key)
UserDefaults().set(key, forKey: value)






swift3