(Xcode 10) iOS Facebook SDK: получение и отображение изображения профиля пользователя - PullRequest
0 голосов
/ 22 января 2020

Я использую SDK Facebook, чтобы позволить пользователю войти в мое приложение, я бы хотел, чтобы приложение отображало фотографию профиля пользователя. У меня есть следующие раскадровки и быстрые файлы:

  • Main.storyboard & ViewController.swift

  • HomeAfterLogIn.storyboard & HomeAfterLogInViewController.swift

«Основной» содержит контроллер представления, с помощью которого пользователь входит в систему, и код для входа в систему пользователя выглядит следующим образом:

import UIKit
import FacebookLogin

class ViewController: UIViewController
{
    override func viewDidLoad()
    {
        super.viewDidLoad()

        if AccessToken.current != nil
        {
            // Already logged-in
            // Redirect to Home View Controller
            goToHome()
        }

        // Add LoginButton
        let loginButton = FBLoginButton(permissions: [ .publicProfile, .email, .userFriends ])
        let screenSize:CGRect = UIScreen.main.bounds
        let screenHeight = screenSize.height // real screen height
        //let's suppose we want to have 10 points bottom margin
        let newCenterY = screenHeight - loginButton.frame.height - 20
        let newCenter = CGPoint(x: view.center.x, y: newCenterY)
        loginButton.center = newCenter
        view.addSubview(loginButton)

        // Triggered after every successfully login / logout
        NotificationCenter.default.addObserver(forName: .AccessTokenDidChange, object: nil, queue: OperationQueue.main) { [weak self] _ in
            if AccessToken.current != nil {
                // Successfully just Logged in
                // Redirect to Home View Controller
                self?.goToHome()
            } else {
                // Successfully just Logged out
            }
        }
    }

    func goToHome() {
        let storyboard = UIStoryboard(name: "HomeAfterLogIn", bundle: nil)
        let vc = storyboard.instantiateViewController(withIdentifier: "HomeAfterLogInViewController") // I called mine like that (check screenshot below)
        self.navigationController?.pushViewController(vc, animated: true)
    }
}

Этот код показывает журнал с кнопкой facebook, и если пользователь вводит успешный журнал в

func goToHome()

Отправляет пользователя на HomeAfterLogIn.storyboard, и именно здесь я хотел бы, чтобы изображение профиля пользователя отображалось.

Я нашел этот код на веб-сайте API Graphs Facebook:

FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc]
    initWithGraphPath:@"/100046232170264/picture"
           parameters:@{ @"redirect": @"false",}
           HTTPMethod:@"GET"];
[request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
    // Insert your code here
}];

Указанные выше значения относятся к моему приложению. Когда я вставляю этот код в мой файл HomeAfterLogInViewController.swift, просто выдает следующие ошибки:

enter image description here

enter image description here

enter image description here

Я неправильно ввел код? Это предыдущая версия swift, у меня swift 4 или 5? Я впервые использую SDK для Facebook, поэтому любая помощь хороша! Заранее спасибо!

- После комментариев к сообщению -

(Кешу Р.) Преобразование obj- c в swift:

let request = FBSDKGraphRequest(graphPath: "/100046232170264/picture", parameters: [
    "redirect": "false"
], httpMethod: "GET")
request.start(withCompletionHandler: { connection, result, error in
    // Insert your code here
})

(Кароль Змысловский) ) Ошибки из кода:

enter image description here

(Кешу Р.) Элементы пользовательского интерфейса в HomeAfterLogIn.storyboard:

enter image description here

Ответы [ 2 ]

0 голосов
/ 22 января 2020

Я бы предложил создать пользовательскую кнопку и добавить к ней действие

// import 
import FBSDKCoreKit
import FBSDKLoginKit


class LoginVC : UIViewController {
    // create an IBAction and call the function inside it
    @IBAction func facebookLoginBtnPressed(_ sender : Any) {
        fetchFacebookFields()
    }
    // this function will return all the details and you can store it in userdefaults
    func fetchFacebookFields() {
        LoginManager().logIn(permissions: ["email","public_profile"], from: nil) {
            (result, error) -> Void in
            if let error = error {
                print(error.localizedDescription)
                return
            }
            guard let result = result else { return }
            if result.isCancelled { return }
            else {
                GraphRequest(graphPath: "me", parameters: ["fields" : "first_name, last_name, email"]).start() {
                    (connection, result, error) in
                    if let error = error {
                        print(error.localizedDescription)
                        return
                    }
                    if
                        let fields = result as? [String:Any],
                        let userID = fields["id"] as? String,
                        let firstName = fields["first_name"] as? String,
                        let lastName = fields["last_name"] as? String,
                        let email = fields["email"] as? String

                    {
                        let facebookProfileUrl = "http://graph.facebook.com/\(userID)/picture?type=large"
                        print("firstName -> \(firstName)")
                        print("lastName -> \(lastName)")
                        print("email -> \(email)")
                        print("facebookProfileUrl -> \(facebookProfileUrl)")
                        APPDELEGATEOBJ.makeRootVC(vcName : "MainTabBarVC")

                    }
                }
            }
        }
    }
}
0 голосов
/ 22 января 2020
import FacebookCore
import FacebookLogin

Profile.loadCurrentProfile(completion: { profile, error in
    if let profile = profile {
        let imageURL = profile.imageURL(forMode: .square, size: CGSize(width: 200.0, height: 200.0))
    }
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...