Szukaj…


Integracja z FacebookSDK

Krok 1: Zainstaluj zestaw SDK

Możesz zainstalować SDK ręcznie lub przez CocoaPods . Ta ostatnia opcja jest wysoce zalecana.

Umieść te linie w Podfile :

target 'MyApp' do
  use_frameworks!

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

Uruchom pod install w terminalu i otwórz .xcworkspace zamiast .xcodeproj .

FBSDKLoginKit i FBSDKShareKit są opcjonalne. Możesz ich potrzebować lub nie.

Krok 2: Utwórz aplikację na Facebooku

Przejdź do Szybki start - Facebook dla programistów, aby utworzyć aplikację.

Facebook poprosi o pobranie zestawu SDK po utworzeniu aplikacji. Możesz pominąć tę część, jeśli już zainstalowałeś SDK przez CocoaPods.

Krok 3: Edytuj .plist

za. Aby Twoja aplikacja mogła „komunikować się” z Facebookiem, musisz wprowadzić pewne ustawienia w pliku .plist . Facebook poda Ci niestandardowy fragment na stronie Szybkie wprowadzenie.

b. Edytuj plik .plist jako kod źródłowy.

wprowadź opis zdjęcia tutaj

do. Wklej dostosowany fragment kodu źródłowego. Bądź ostrożny! Fragment musi być dokładnie potomkiem znacznika <dict> . Twój kod źródłowy powinien wyglądać następująco:

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

Jeśli wkleisz fragment w niewłaściwym miejscu, napotkasz problemy.

Krok 4: Powiedz Facebookowi swój identyfikator pakietu na stronie Szybki start.

=> Jak uzyskać identyfikator pakietu

Krok 5: Edytuj aplikację AppDelegate.swift

za.

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

Tworzenie własnego niestandardowego przycisku „Zaloguj się przez Facebook”

Czasami chcemy zaprojektować własny interfejs użytkownika dla przycisku „Zaloguj się przez Facebook” zamiast oryginalnego przycisku dostarczanego z FacebookSDK.

  1. Przeciągnij UIButton w swojej serii ujęć i ustaw go tak, jak chcesz.
  2. Ctrl + przeciągnij przycisk do kontrolera widoku jako IBAction.
  3. Wewnątrz metody IBAction będziesz symulować stuknięcie w przycisk Facebooka w następujący sposób:

Szybki:

    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)

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

Jesteś skończony.

Pobieranie danych użytkownika Facebooka

Po zalogowaniu się użytkownika na Facebooku w Twojej aplikacji, teraz nadszedł czas, aby pobrać dane, o które prosiłeś w FBButton.readPermissions .

Szybki:

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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow