12
votes

Bouton de connexion Facebook pour SWIFT

en xcode si je crée un uiview , puis ajoutez la classe personnalisée comme fbsdkloginbutton , lorsque je clique, cela me conduit à travers le login Facebook, puis me renvoie à la même chose. Page Comme le fbsdkloginbutton mais au lieu de dire un bouton de connexion, il est indiqué déconnecter maintenant. Comment puis-je continuer à faire que lorsque le bouton de connexion est cliqué, il conduit à une nouvelle vue?


J'ai téléchargé le SDK Facebook via Cocoapodes et sa première fois de travailler avec elle, donc je suis confus à ce sujet. Merci pour l'aide!


2 commentaires

Vous devriez vérifier le succès-Callback (c'est-à-dire connecté = succès) dans la vue. Si vous êtes connecté, vous pouvez «rediriger» à une autre vue.


Cela pourrait être une question stupide mais comment puis-je faire cela car il n'y a pas de code réel dans le contrôleur d'affichage?


5 Réponses :


28
votes

Une option serait de définir votre contrôleur d'affichage en tant que délégué du fbsdkloginbutton code> et implémentez le loginbutton: DIDCompletewithResulthResult: Erreur: code> méthode, qui est appelé lorsque le bouton est utilisé pour vous connecter.

Swift strong> P >

// ViewController.m
@implementation ViewController

- (void)loginButton:(FBSDKLoginButton *)loginButton 
  didCompleteWithResult:(FBSDKLoginManagerLoginResult *)result
                  error:(NSError *)error {
    if (error) {
        // Process error
    }
    else if (result.isCancelled) {
       // Handle cancellations
    }
    else {
        // Navigate to other view
    }
}


0 commentaires

0
votes

Vous pouvez le faire comme ce tutoriel de appcoda (voir Code ci-dessous) xxx

voici un App pour cela.


1 commentaires

Cela me suis venu dans une file d'attente de révision car elle a été marquée comme une réponse de liaison uniquement, qui ne sont généralement pas considérées comme bonnes ici. Je peux voir que vous avez répondu au commentaire uniquement sur le lien Seulement des réponses. J'ai édité pour ranger un peu de formatage / fautes de frappe.



6
votes

à Swift ce serait quelque chose comme: xxx pré>

puis dans votre fichier cibleviewController Ajouter une fonction de déroulement: P>

@IBAction func unwindToViewOtherController(segue:UIStoryboardSegue) {
    }


5 commentaires

Merci Bud .. Un extrait de ce qui s'est avéré pratique!


SacsfactSeDIdentifier ("UndindtoViewotherController", Sender: Self) Intérieur Si (fbsdkaccessToken.CurrentAccessToken ()! = nil) ne loge pas la page Viewstroller. Voudrais-tu m'aider avec ça ??


Dans le storyboard, sélectionnez la SEGUE de dérivation, puis l'inspecteur des attributs. Là, vous devriez avoir UnwindtoViewotherController comme Identificateur et UndindToViewotherController: comme action .


Je devais ajouter viewDidAppear fonction et écrire exécuterSegueilwithIdentifier dedans. Qui a résolu le problème. Nous ne pouvons pas avoir SacsfinierWithIdidIdentifier INTÉRIEUR VIEWDIDLOAD Fonction, c'est ce que j'ai appris de Google. Voulez-vous s'il vous plaît m'aidez-vous à savoir pourquoi?


Vous ne pouvez pas rejeter une vue qui n'a pas encore été chargée. ViewDiDload Ce n'est pas une fois que cette fonction est terminée que la vue est présentée et peut donc être rejetée.



2
votes

dans la version actuelle FacebookLogin (0.2.0) Pour SWIFT, la propriété de déléguée de Loginbutton est définie comme une propriété forte: xxx pré>

Si vous ajoutez le bouton de connexion suivi des instructions de Facebook et vous définissez votre UIViewController Code> Classe enfant en tant que bouton Déléguer ... P>

import UIKit
import FacebookCore
import FacebookLogin
import RxSwift

class LoginViewController: UIViewController, LoginButtonDelegate {

    private weak var facebookLoginButton: LoginButton? = nil

    override func viewDidLoad() {

        super.viewDidLoad()

        // Add the Facebook login button
        let loginButton = LoginButton(readPermissions: [ .publicProfile, .email, .userFriends ])
        loginButton.center = view.center
        // WARNING!: Facebook login button delegate property is defined currently as STRONG.
        // Therefore, it must be set to nil before leaving the view to avoid reference cycles
        loginButton.delegate = self
        view.addSubview(loginButton)
        // Store the login button as a weak reference, since it is holded by the main view with a
        // strong reference
        facebookLoginButton = loginButton
    }

    override func willMove(toParentViewController parent: UIViewController?) {
        super.willMove(toParentViewController:parent)
        if parent == nil {
            // The back button was pressed, interactive gesture used, or programatically pop view
            // was executed
            // Do not forget to set delegate in Facebook button to nil to break reference cycle.
            facebookLoginButton?.delegate = nil
        }
    }

    // MARK: - Facebook login

    /**
     Called when the button was used to login and the process finished.

     - parameter loginButton: Button that was used to login.
     - parameter result:      The result of the login.
     */
    func loginButtonDidCompleteLogin(_ loginButton: LoginButton, result: LoginResult) {

        switch result {
            case .failed(let error):
                // Action on failed
            case .cancelled:
                // Action on cancelled
            case .success(let grantedPermissions, let declinedPermissions, let accessToken):
                // Action on success
        }
    }

    /**
     Called when the button was used to logout.

     - parameter loginButton: Button that was used to logout.
     */
    func loginButtonDidLogOut(_ loginButton: LoginButton) {

        // Action on logout
    }
}


1 commentaires

Si vous laissez tomber les lignes disant «c'est un commentaire» ... cela ressemblerait à une réponse à moi ;-)



2
votes

iOS 13 Utilisez un délégué de scène. Il suffit de coller le code ci-dessous dans la scène déléguée et appelez simple le gestionnaire de connexion Facebook. Il retournera l'objet utilisateur de Facebook. Cette fonction appelle automatiquement.

 func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
        guard let url = URLContexts.first?.url else {
            return
        }
        let _ = ApplicationDelegate.shared.application(
            UIApplication.shared,
            open: url,
            sourceApplication: nil,
            annotation: [UIApplication.OpenURLOptionsKey.annotation])
    }


0 commentaires