Ricerca…


Integrazione con FacebookSDK

Passaggio 1: installare l'SDK

È possibile installare l'SDK manualmente o tramite CocoaPods . Quest'ultima opzione è altamente raccomandata.

Metti queste righe in Podfile :

target 'MyApp' do
  use_frameworks!

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

Esegui l' pod install nel terminale e apri .xcworkspace invece di .xcodeproj .

FBSDKLoginKit e FBSDKShareKit sono opzionali. Potresti o non potresti averne bisogno.

Passaggio 2: crea un'app su Facebook

Vai a Avvio rapido - Facebook per sviluppatori per creare un'app.

Facebook ti chiederà di scaricare l'SDK dopo aver creato l'app. Puoi saltare questa parte se hai già installato l'SDK tramite CocoaPods.

Passaggio 3: modifica .plist

un. Per rendere la tua app in grado di "comunicare" con Facebook, devi inserire alcune impostazioni nel tuo file .plist . Facebook ti darà lo snippet personalizzato nella pagina Avvio rapido.

b. Modifica il tuo file .plist come codice sorgente.

inserisci la descrizione dell'immagine qui

c. Incolla lo snippet personalizzato nel codice sorgente. Stai attento! Lo snippet deve essere esattamente il figlio del tag <dict> . Il tuo codice sorgente dovrebbe essere qualcosa del tipo:

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

Se incolli lo snippet in un posto sbagliato, ti imbatterai in problemi.

Passaggio 4: comunica a Facebook l'identificatore del gruppo nella pagina Avvio rapido.

=> Come ottenere l'identificatore del gruppo

Passaggio 5: modifica il tuo AppDelegate.swift

un.

import FBSDKCoreKit

b.

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

Crea il tuo pulsante personalizzato "Accedi con Facebook"

A volte vogliamo progettare la nostra interfaccia utente per il pulsante "Accedi con Facebook" invece del pulsante originale fornito con FacebookSDK.

  1. Nello storyboard, trascina il tuo UIButton e impostalo come vuoi tu.
  2. Ctrl + trascina il pulsante sul controller di visualizzazione come IBAction.
  3. All'interno del metodo IBAction avrai simulato un tap sul pulsante Facebook reale come segue:

Swift:

    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)

Objective-C:

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

Hai finito.

Recupero dei dati dell'utente di Facebook

Dopo che l'utente ha effettuato l'accesso a Facebook nella tua app, ora è il momento di recuperare i dati richiesti su FBButton.readPermissions .

Swift:

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
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow