Sök…


FacebookSDK-integration

Steg 1: Installera SDK

Du kan installera SDK manuellt eller via CocoaPods . Det senare alternativet rekommenderas starkt.

Sätt dessa linjer i Podfile :

target 'MyApp' do
  use_frameworks!

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

Kör pod install i terminalen och öppna .xcworkspace istället för .xcodeproj efteråt.

FBSDKLoginKit och FBSDKShareKit är valfria. Du kanske inte behöver dem.

Steg 2: Skapa en app på Facebook

Gå till Quick Starts - Facebook för utvecklare för att skapa en app.

Facebook kommer att be dig att ladda ner SDK efter att du har skapat appen. Du kan hoppa över den här delen om du redan har installerat SDK via CocoaPods.

Steg 3: Redigera .plist

a. För att din app ska kunna "kommunicera" med Facebook måste du lägga till några inställningar i din .plist fil. Facebook ger dig det anpassade utdraget på sidan Snabbstart.

b. Redigera din .plist fil som källkod.

ange bildbeskrivning här

c. Klistra in ditt anpassade utdrag i källkoden. Var försiktig! Utdraget måste vara exakt barnet till <dict> -taggen. Din källkod bör vara något som:

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

Om du klistrar in kodstycket på en fel plats kommer du att få problem.

Steg 4: Berätta för Facebook din buntidentifierare på Quick Starts-sidan.

=> Hur man får buntidentifierare

Steg 5: Redigera din AppDelegate.swift

a.

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

Skapa din egen "Logga in med Facebook" -knapp

Ibland vill vi designa vårt eget användargränssnitt för "Logga in med Facebook" -knappen istället för den ursprungliga knappen som kommer med FacebookSDK.

  1. Dra din UIB-knapp i din storyboard och ställ in den du vill att den ska vara.
  2. Ctrl + dra din knapp till din visningskontroller som IBAction.
  3. Inuti IBAction-metoden kommer du att simulera ett tryck på själva Facebook-knappen enligt följande:

Snabb:

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

Du är klar.

Hämtar facebook-användardata

Efter att användaren har loggat in på Facebook på din app är det nu dags att hämta FBButton.readPermissions du begärde på FBButton.readPermissions .

Snabb:

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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow