Поиск…


Интеграция с FacebookSDK

Шаг 1: Установите SDK

Вы можете установить SDK вручную или через CocoaPods . Последний вариант настоятельно рекомендуется.

Поместите эти строки в Podfile :

target 'MyApp' do
  use_frameworks!

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

Запустите pod install в терминале и откройте .xcworkspace вместо .xcodeproj .

FBSDKLoginKit и FBSDKShareKit являются необязательными. Вы можете или не нуждаться в них.

Шаг 2. Создание приложения на Facebook.

Перейдите в Quick Starts - Facebook для разработчиков, чтобы создать приложение.

Facebook попросит вас загрузить SDK после создания приложения. Вы можете пропустить эту часть, если вы уже установили SDK через CocoaPods.

Шаг 3: Изменить .plist

а. Чтобы ваше приложение могло «общаться» с Facebook, вам нужно поместить некоторые настройки в ваш .plist файл. Facebook предоставит вам настроенный фрагмент на странице быстрого запуска.

б. Измените файл .plist как исходный код.

введите описание изображения здесь

с. Вставьте свой собственный фрагмент кода в исходный код. Быть осторожен! Фрагмент должен быть точно дочерним тегом <dict> . Ваш исходный код должен выглядеть примерно так:

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

Если вы вставляете фрагмент в неправильное место, вы столкнетесь с проблемами.

Шаг 4. Расскажите Facebook свой идентификатор пакета на странице быстрого запуска.

=> Как получить идентификатор пакета

Шаг 5: Отредактируйте свой AppDelegate.swift

а.

import FBSDKCoreKit

б.

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

Создание собственной пользовательской кнопки «Войти в Facebook»

Иногда мы хотим создать собственный пользовательский интерфейс для кнопки «Войти в Facebook» вместо оригинальной кнопки, которая поставляется с FacebookSDK.

  1. В своем раскадровке перетащите свой UIButton и установите его, как бы вы этого ни хотели.
  2. Ctrl + перетащите кнопку на контроллер вида в виде IBAction.
  3. Внутри метода IBAction вы будете симулировать нажатие на фактическую кнопку Facebook следующим образом:

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

Все готово.

Получение пользовательских данных facebook

После того, как пользователь зарегистрировался в Facebook в своем приложении, пришло время получить данные, запрошенные вами на 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
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow