J'ai installé le SDK Swift de Facebook via Cocoapods:
pod 'FacebookCore', :git => "https://github.com/facebook/facebook-sdk-Swift"
pod 'FacebookLogin', :git => "https://github.com/facebook/facebook-sdk-Swift"
J'ai suivi les instructions de connexion du kit de développement logiciel Swift SDK de Facebook ( https://developers.facebook.com/docs/Swift/login ), mais je ne parviens pas à le faire fonctionner.
Dans mon contrôleur de vue, j'ai les éléments suivants:
@objc fileprivate func facebookSignIn() {
let loginManager = LoginManager()
print("LOGIN MANAGER: \(loginManager)")
loginManager.logIn([ .publicProfile, .email ], viewController: self) { loginResult in
print("LOGIN RESULT! \(loginResult)")
switch loginResult {
case .failed(let error):
print("FACEBOOK LOGIN FAILED: \(error)")
case .cancelled:
print("User cancelled login.")
case .success(let grantedPermissions, let declinedPermissions, let accessToken):
print("Logged in!")
print("GRANTED PERMISSIONS: \(grantedPermissions)")
print("DECLINED PERMISSIONS: \(declinedPermissions)")
print("ACCESS TOKEN \(accessToken)")
}
}
}
"Gestionnaire de connexion: etc." s'imprime lorsque je clique sur le bouton et que la vue Web s'ouvre. Je peux me connecter via Facebook. La vue Web devient alors vide et rien ne se passe. L'application apparaît dans mes applications Facebook. Une autorisation a donc été émise. Si je clique sur le bouton "Terminé" dans la vue Web, le résultat du rappel est .cancelled
et "Connexion annulée de l'utilisateur". est imprimé.
J'ai ajouté le partage de trousseau à mes droits et j'ai mis à jour mon info.plist:
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLSchemes</key>
<array>
<string> [ FB STRING ] </string>
</array>
</dict>
</array>
<key>FacebookAppID</key>
<string>[ APP ID ]</string>
<key>FacebookDisplayName</key>
<string>[ APP NAME ]</string>
<key>LSApplicationQueriesSchemes</key>
<array>
<string>fbapi</string>
<string>fb-messenger-api</string>
<string>fbauth2</string>
<string>fbshareextension</string>
</array>
J'ai même modifié mes paramètres NSAppTransportSecurity
.
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
Je sais que ceci est un duplicata de Simulateur de connexion Facebook pour iOS 9 -canOpenURL: échec de l'URL: "fbauth2: ///" - erreur: "(null)" et Comment utiliser le kit de développement logiciel (SDK) Facebook iOS sur iOS 10 mais aucune des solutions ne semble fonctionner pour moi, à moins d’avoir oublié quelque chose? Toutes les suggestions sont appréciées.
Plusieurs erreurs sont également imprimées:
[App] if we're in the real pre-commit handler we can't actually add any new fences due to CA restriction
[error] error: (6922) I/O error for database at /var/mobile/Containers/Data/Application/F3D8E126-B0CC-4C06-81A5-D7A7F849B3BD/Documents/OfflineModel2.sqlite. SQLite error code:6922, 'disk I/O error'
Et lorsque l'application FB n'est pas installée sur mon appareil, je reçois:
-canOpenURL: failed for URL: "fbauth2:/" - error: "The operation couldn’t be completed. (OSStatus error -10814.)"
Vous devez substituer les méthodes AppDelegate par didfinishlaunching et openurl par ci-dessous:
public func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool
{
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)
}
Swift 3 et Swift 4
ajoutez ceci à votre AppDelegate.Swift
import FBSDKCoreKit
import FBSDKLoginKit
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
return FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)
}
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
return FBSDKApplicationDelegate.sharedInstance().application(app, open: url, options: options)
}
Les bibliothèques FBSDK sont obsolètes. Les bibliothèques les plus récentes se trouvent dans le référentiel Github de Facebook .
Pour cette erreur particulière, implémentez les méthodes d'application suivantes.
func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
return SDKApplicationDelegate.shared.application(application, open: url, sourceApplication: sourceApplication, annotation: annotation)
}
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
return SDKApplicationDelegate.shared.application(app, open: url, options: options)
}
Swift 3.0
sur votre AppDelete.Swift:
import FBSDKCoreKit
import FBSDKLoginKit
dans votre:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool
{
ajouter:
FBSDKApplicationDelegate .sharedInstance() .application(application, didFinishLaunchingWithOptions: launchOptions)
puis créez une nouvelle fonction comme suit:
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
return FBSDKApplicationDelegate.sharedInstance().application(app, open: url, options: options)
}
Utilisation de Cocoapods in Swift 3.0
Installer des cocoapodes
pod 'FacebookCore'
pod 'FacebookLogin'
dans AppDelegate.Swift
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)
}
et callback méthode de callback
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)return FBSDKApplicationDelegate.sharedInstance().application(application, open: url as URL!, sourceApplication: sourceApplication, annotation: annotation)
}
dans votre vueController
import FacebookCore
import FacebookLogin
import FBSDKLoginKit
après cela dans votre bouton fblogin écrivez ce code
@IBAction func faceBookLoginBtnAction(_ sender: Any) {
let fbLoginManager : FBSDKLoginManager = FBSDKLoginManager()
fbLoginManager.logIn(withReadPermissions: ["email"], from: self) { (result, error) in
if (error == nil){
let fbloginresult : FBSDKLoginManagerLoginResult = result!
if fbloginresult.grantedPermissions != nil {
if(fbloginresult.grantedPermissions.contains("email")) {
if((FBSDKAccessToken.current()) != nil){
FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "id, name, first_name, last_name, picture.type(large), email"]).start(completionHandler: { (connection, result, error) -> Void in
if (error == nil){
self.dict = result as! [String : AnyObject]
print(result!)
print(self.dict)
}
})
}
}
}
}
}
}
et une autre chose importante: ajoutez votre facebookid à votre projet. Dans la section Projet> Cible> Info> Types d’URL, définissez le bon identifiant Facebook et les schémas d’URL.
La première chose que vous devez créer une application pour utiliser la connexion Facebook dans votre application. Vous pouvez créer une application sur facebook à partir de ici
Vous devez définir URL types
, FacebookAppID
, FacebookDisplayName
et LSApplicationQueriesSchemes
dans votre info.plist
.
Ajoutez manuellement le cadre de connexion Facebook ou utilisez les cabosses de cacao comme suit ...
pod 'FacebookCore' //latest one
pod 'FacebookLogin' // for fb login
pod 'FacebookShare' //for sharing on fb
puis la commande pod install
pour installer les modules pour votre application.
import FacebookCore
dans votre application déléguer à utiliser la connexion Facebook
Configurez les éléments suivants dans le fichier AppDelegate.Swift
:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
return SDKApplicationDelegate.shared.application(application, didFinishLaunchingWithOptions: launchOptions)
}
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
if url.absoluteString.contains(<Your FBAppID>) {
return SDKApplicationDelegate.shared.application(app, open: url, options: options)
} else {
debugPrint("Error in openURL from AppDelegate Facebook Sign in")
}
return true
}
Et maintenant, vous avez configuré avec succès la connexion Facebook à votre application.
Dans votre contrôleur de vue, vous devez effectuer les opérations suivantes:
import FacebookLoginKit
Dans votre méthode IBAction, procédez comme suit:
@IBAction func btnFacebookSignInTapped(_ sender: UIButton) {
let fbManager = FBSDKLoginManager()
fbManager.logIn(withReadPermissions: ["public_profile", "email"], from: self) { (result, error) in
if let loginResult = result, error == nil {
if let permissions = loginResult.grantedPermissions {
if permissions.contains("email") || permissions.contains("public_profile") {
if FBSDKAccessToken.current() != nil {
FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "id, name, first_name, last_name, email"]).start(completionHandler: { (connection, graphResult, error) in
if error == nil {
debugPrint("Result: \(graphResult!)")
if let data = graphResult as? [String: Any] {
print("User details from FB: \(data)")
}
}
})
} else {
print("Invalid FB access token");
}
}
} else {
print("Fail to login using facebook.")
}
} else {
print("Error in facebook login")
}
}
}
Ce faisant, vous pourrez vous connecter à Facebook.
Les réponses recommandées ici utilisent l’implémentation suivante de application(_,didFinishLaunchingWithOptions:)
:
public func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool {
return SDKApplicationDelegate.shared.application(application, didFinishLaunchingWithOptions: launchOptions)
}
Cependant, notez que la documentation officielle n’utilise pas la valeur de retour de
SDKApplicationDelegate.shared.application(application, didFinishLaunchingWithOptions: launchOptions)
comme valeur de retour de application(_,didFinishLaunchingWithOptions:)
.
Bien que cela puisse sembler sans importance, j’ai eu de gros problèmes lors de l’intégration du SDK de Facebook avec une liaison en profondeur, car cette ligne me cause des problèmes. Par conséquent, si vous souhaitez éviter ultérieurement certains problèmes inutiles, utilisez la solution suivante:
public func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool
{
SDKApplicationDelegate.shared.application(application, didFinishLaunchingWithOptions: launchOptions)
// always return true
return true
}
public func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool
{
return SDKApplicationDelegate.shared.application(app, open: url, options: options)
}
mis à jour pour Swift 3:
// Dans votre AppDelegate ():
// Étape 1:
import FacebookCore
// Étape 2: Dans didFinishLaunchingWithOptions ()
// FB Settings
SDKApplicationDelegate.shared.application(application, didFinishLaunchingWithOptions: launchOptions)
// Méthode d'instance ():
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
print("URL AbsoluteString = \(url.absoluteString)")
if url.absoluteString.contains("fb1279300242197274") {
return SDKApplicationDelegate.shared.application(app,
open: url,
options: options)
}
else {
//return PDKClient.sharedInstance().handleCallbackURL(url)
print("Error while open URL from app delegate facebook sign in")
}
return true
}
Autre moyen de le faire . J'espère que cette vidéo vous sera utile https://youtu.be/bOS4jqRc8Io
Contenu de cette vidéo: Didacticiel d'intégration du kit de développement logiciel (SDK) Facebook avec Swift en 2018 Configuration d'un nouveau projet Xcode pour Xcode Connexion de l'application Swift iOS avec le didacticiel Facebook Fonction de connexion Facebook dans l'application iOS Ajouter Facebook à l'application Swift iOS Connexion Facebook dans l'application iOS
Étapes: 1. Créez un nouveau projet Swift Xcode simple. 2- Connectez-vous à la page de développement de Facebook pour créer le même nom. APP 3- Ajoutez une connexion avec le bouton Facebook, les méthodes de connexion et de déconnexion. 4- Modifiez la configuration, créez un en-tête de pontage pour C, configurez AppDelegate. , 5- Lancer l'application et tester avec simulateur