Buscar..


Integración de FacebookSDK

Paso 1: Instala el SDK

Puede instalar el SDK manualmente o a través de CocoaPods . La última opción es muy recomendable.

Ponga estas líneas en Podfile :

target 'MyApp' do
  use_frameworks!

  pod 'FBSDKCoreKit'
  pod 'FBSDKLoginKit'
  pod 'FBSDKShareKit'
end

Ejecute pod install en el terminal y abra .xcworkspace lugar de .xcodeproj después.

FBSDKLoginKit y FBSDKShareKit son opcionales. Puede o no puede necesitarlos.

Paso 2: Crea una aplicación en Facebook

Vaya a Inicio rápido: Facebook para desarrolladores para crear una aplicación.

Facebook te pedirá que descargues el SDK después de crear la aplicación. Puede omitir esta parte si ya instaló el SDK a través de CocoaPods.

Paso 3: Editar .plist

a. Para que su aplicación pueda "comunicarse" con Facebook, debe poner algunas configuraciones en su archivo .plist . Facebook te dará el fragmento personalizado en la página de inicio rápido.

segundo. Edite su archivo .plist como código fuente.

introduzca la descripción de la imagen aquí

do. Pega tu fragmento personalizado en el código fuente. ¡Ten cuidado! El fragmento debe ser exactamente el hijo de la etiqueta <dict> . Su código fuente debe ser algo como:

<plist version="1.0">
<dict>
    // ...
    //some default settings
    // ...
    <key>CFBundleURLTypes</key>
    <array>
        <dict>
            <key>CFBundleURLSchemes</key>
            <array>
                <string>fb{FBAppId}</string>
            </array>
        </dict>
    </array>
    <key>FacebookAppID</key>
    <string>{FBAppId}</string>
    <key>FacebookDisplayName</key>
    <string>{FBAppName}</string>
    <key>LSApplicationQueriesSchemes</key>
    <array>
        <string>fbapi</string>
        <string>fb-messenger-api</string>
        <string>fbauth2</string>
        <string>fbshareextension</string>
    </array>
<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>facebook.com</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSExceptionRequiresForwardSecrecy</key>
            <false/>
        </dict>
        <key>fbcdn.net</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSExceptionRequiresForwardSecrecy</key>
            <false/>
        </dict>
        <key>akamaihd.net</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSExceptionRequiresForwardSecrecy</key>
            <false/>
        </dict>
    </dict>
</dict>
</plist>

Si pega el fragmento en un lugar incorrecto, se encontrará con problemas.

Paso 4: informe a Facebook su identificador de paquete en la página de inicio rápido.

=> Cómo obtener el identificador de paquete

Paso 5: Edita tu AppDelegate.swift

a.

import FBSDKCoreKit

segundo.

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)
    return true
}

func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool {
    return FBSDKApplicationDelegate.sharedInstance().application(application, openURL: url, sourceApplication: sourceApplication, annotation: annotation)
}

Creando su propio botón "Iniciar sesión con Facebook" personalizado

A veces, queremos diseñar nuestra propia interfaz de usuario para el botón "Iniciar sesión con Facebook" en lugar del botón original que viene con FacebookSDK.

  1. En tu guión gráfico, arrastra tu UIButton y configúralo como quieras que sea.
  2. Ctrl + arrastre su botón a su controlador de vista como IBAction.
  3. Dentro del método IBAction, tendrá que simular un toque en el botón real de Facebook de la siguiente manera:

Rápido:

    let loginButton = FBSDKLoginButton()
    loginButton.delegate = self
    // Your Custom Permissions Array
    loginButton.readPermissions =
    [
                             "public_profile",
                             "email",
                             "user_about_me",
                             "user_photos"
    ]
    // Hiding the button
    loginButton.hidden = true
    self.view.addSubview(loginButton)
    // Simulating a tap for the actual Facebook SDK button
    loginButton.sendActionsForControlEvents(UIControlEvents.TouchUpInside)

C objetivo:

FBSDKLoginButton *FBButton = [FBSDKLoginButton new];

// Your Custom Permissions Array
FBButton.readPermissions = @[@"public_profile",
                             @"email",
                             @"user_about_me",
                             @"user_photos"
                             ];
FBButton.loginBehavior = FBSDKLoginBehaviorNative;
[FBButton setDelegate:self];
[FBButton setHidden:true];
[loginButton addSubview:FBButton];

[FBButton sendActionsForControlEvents:UIControlEventTouchUpInside];

Estas hecho

Obteniendo los datos de usuario de facebook

Después de que el usuario haya FBButton.readPermissions en Facebook desde su aplicación, ahora es el momento de buscar los datos que solicitó en FBButton.readPermissions .

Rápido:

enum FacebookParametesField : String
{
    case FIELDS_KEY = "fields"
    case FIELDS_VALUE = "id, email, picture, first_name, last_name"
}


if FBSDKAccessToken.currentAccessToken() != nil
{
//  Getting user facebook data
FBSDKGraphRequest(graphPath: "me", 
                 parameters: [FacebookParametesField.FIELDS_KEY.rawValue : FacebookParametesField.FIELDS_VALUE.rawValue])
.startWithCompletionHandler({ (graphConnection : FBSDKGraphRequestConnection!, result : AnyObject!, error : NSError!) -> Void in
    
        if error == nil
        {
            print("Facebook Graph phaze")

            let email = result["email"]
            let facebookToken = FBSDKAccessToken.currentAccessToken().tokenString
            let userFacebookId = result["id"]
            let firstName = result["first_name"]
            let lastName = result["last_name"]
            
            if let result = result as? Dictionary<String, AnyObject>
            {
                if let picture = result["picture"] as? Dictionary<String,AnyObject>
                {
                    if let data = picture["data"] as? Dictionary <String,AnyObject>
                    {
                        if let url = data["url"] as? String
                        {
                            //  Profile picture URL
                            let profilePictureURL = url
                        }
                    }
                }
            }
        }
    })
}


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow