如何在swift 2.0中从Facebook获取cover_photo [英] How to take cover_photo from Facebook in swift 2.0

查看:57
本文介绍了如何在swift 2.0中从Facebook获取cover_photo的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图从Facebook获取用户的封面照片,但我有一些问题...这里是我的代码

  import UIKit 
import FBSDKCoreKit
import FBSDKLoginKit

class ViewController:UIViewController,FBSDKLoginButtonDelegate {
@IBOutlet weak var name:UILabel!
@IBOutlet weak var sesso:UILabel!
@IBOutlet weak var immagineProfilo:UIImageView!
@IBOutlet weak var immagineCopertina:UIImageView!

覆盖func viewDidLoad(){
super.viewDidLoad()
if(FBSDKAccessToken.currentAccessToken()== nil)
{
print(没有登录..)
}
else
{
print(Logged in ..)
}

let loginButton = FBSDKLoginButton()
loginButton.readPermissions = [public_profile,email]
loginButton.center = CGPointMake(80,100)
loginButton.delegate = self
self。 view.addSubview(loginButton)



func loginButton(loginButton:FBSDKLoginButton !, didCompleteWithResult result:FBSDKLoginManagerLoginResult !, error:NSError!)
{
如果错误== nil
{
print(登录完成)
/ *让protectedPage = self.storyboard?.instantiateViewControllerWithIdentifier(ProfileViewController)as! ProfileViewController
let protectedPageNav = UINavigationController(rootViewController:protectedPage)

let appDelegate = UIApplication.sharedApplication()。delegate as! AppDelegate

appDelegate.window?.rootViewController = protectedPageNav * /

如果let _ = result.token {
//获取用户访问令
let _:FBSDKAccessToken = result.token

print(Token = \(FBSDKAccessToken.currentAccessToken()。tokenString))

print(User ID = \ FBSDKAccessToken.currentAccessToken()。userID))


}

//显示用户信息
let graphRequest:FBSDKGraphRequest = FBSDKGraphRequest(graphPath:我的参数:[fields:name,picture,email,gender,pic_cover])

graphRequest.startWithCompletionHandler({(connection,result,error))> Void in

如果((错误)!= nil)
{
//进程错误
打印(错误:\(错误))
}
els e
{
let imgURLCoverPhoto =https://graph.facebook.com/\(FBSDKAccessToken.currentAccessToken().userID)/pic_cover?
let imgURLCover = NSURL(string:imgURLCoverPhoto)
let imageDataCoverPhoto = NSData(contentsOfURL:imgURLCover!)
let imageCoverPhoto = UIImage(data:imageDataCoverPhoto!)
self.immagineCopertina.image = imageCoverPhoto
let imgURLString =https://graph.facebook.com/\(FBSDKAccessToken.currentAccessToken().userID)/picture?width=10000
let imgURL = NSURL(string:imgURLString )
let imageData = NSData(contentsOfURL:imgURL!)
let image = UIImage(data:imageData!)
self.immagineProfilo.image = image

print( 获取用户:\(result))
self.name.text = result.valueForKey(name)as! NSString as String
self.name.text = result.valueForKey(gender)as! NSString as String


}
})


}
else
{
打印(error.localizedDescription)
}
}

func loginButtonDidLogOut(loginButton:FBSDKLoginButton!)
{
print(用户注销... )
}

覆盖func didReceiveMemoryWarning(){
super.didReceiveMemoryWarning()
//处理可以重新创建的任何资源。
}
}

谢谢

解决方案

这是一个在swift中使用fb sdk的工作示例。该文档确实有帮助,但他们不是一个复制粘贴的例子..
我需要得到一个页面的封面照片,所以在graphPath我使用页面ID。此参数可以轻松更改以适应用户/事件/ etc ...

  let request = FBSDKGraphRequest(graphPath:\ \(page.id)?fields = cover,参数:[
access_token:your_access_token
],HTTPMethod:GET)
request.startWithCompletionHandler({(connection ,结果,错误)
if((error)!= nil){
print(为\\(page.id)提取封面照片时出错:\(错误),终止者:)
}
else {
如果let data = result [cover] as?NSDictionary {
self.fetchImageFromUrl(data [source] as! String,cb:{(image:UIImage) - > Void in
//执行某些图像
})
}
})

func fetchImageFromUrl(url:String,cb:(UIImage) - > Void){
let urlObj = NSURL(string:url)!
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0)){
let data = NSData(contentsOfURL:urlObj)
dispatch_async(dispatch_get_main_queue(),{
let image = UIImage(data:data !)!
cb(image)
});
}
}

PS - 我是swift / ios的新手所以这个代码可能不是最好的。评论将不胜感激。


I'm trying to get the user's cover photo from Facebook but I have some problems...here is my code

import UIKit
import FBSDKCoreKit
import FBSDKLoginKit

class ViewController: UIViewController, FBSDKLoginButtonDelegate {
    @IBOutlet weak var  name : UILabel!
    @IBOutlet weak var sesso: UILabel!
    @IBOutlet weak var immagineProfilo : UIImageView!
    @IBOutlet weak var immagineCopertina: UIImageView!

    override func viewDidLoad() {
        super.viewDidLoad()
        if (FBSDKAccessToken.currentAccessToken() == nil)
        {
            print("Not logged in..")
        }
        else
        {
            print("Logged in..")
        }

        let loginButton = FBSDKLoginButton()
        loginButton.readPermissions = ["public_profile", "email"]
        loginButton.center = CGPointMake(80, 100)
        loginButton.delegate = self
        self.view.addSubview(loginButton)

    }

    func loginButton(loginButton: FBSDKLoginButton!, didCompleteWithResult result: FBSDKLoginManagerLoginResult!, error: NSError!)
    {
        if error == nil
        {
            print("Login complete.")
             /*  let protectedPage = self.storyboard?.instantiateViewControllerWithIdentifier("ProfileViewController") as! ProfileViewController
            let protectedPageNav = UINavigationController(rootViewController: protectedPage)

            let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate

            appDelegate.window?.rootViewController = protectedPageNav*/

            if let _ = result.token{
                //Get user acces token
                let _:FBSDKAccessToken=result.token

                print("Token = \(FBSDKAccessToken.currentAccessToken().tokenString)")

                print("User ID = \(FBSDKAccessToken.currentAccessToken().userID)")


            }

            //Show user information
            let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: ["fields":"name,picture, email, gender, pic_cover"])

            graphRequest.startWithCompletionHandler({ (connection, result, error) -> Void in

                if ((error) != nil)
                {
                    // Process error
                    print("Error: \(error)")
                }
                else
                {
                    let imgURLCoverPhoto = "https://graph.facebook.com/\(FBSDKAccessToken.currentAccessToken().userID)/pic_cover?
                    let imgURLCover = NSURL(string: imgURLCoverPhoto)
                    let imageDataCoverPhoto = NSData(contentsOfURL: imgURLCover!)
                    let imageCoverPhoto = UIImage(data: imageDataCoverPhoto!)
                    self.immagineCopertina.image = imageCoverPhoto
                    let imgURLString = "https://graph.facebook.com/\(FBSDKAccessToken.currentAccessToken().userID)/picture?width=10000"
                    let imgURL = NSURL(string: imgURLString)
                    let imageData = NSData(contentsOfURL: imgURL!)
                    let image = UIImage(data: imageData!)
                    self.immagineProfilo.image = image

                    print("fetched user: \(result)")
                     self.name.text = result.valueForKey("name") as! NSString as String
                    self.name.text = result.valueForKey("gender") as! NSString as String


                }
            })


        }
        else
        {
            print(error.localizedDescription)
        }
    }

    func loginButtonDidLogOut(loginButton: FBSDKLoginButton!)
    {
        print("User logged out...")
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

thanks

解决方案

Here's a working example using fb sdk in swift. The docs did help but they're not a copy paste kind of example.. I needed to get the cover photo of a page so in the graphPath I used page id. This parameter can be easily changed to fit users / events / etc...

let request = FBSDKGraphRequest(graphPath: "\\(page.id)?fields=cover", parameters: [
  "access_token": "your_access_token"
], HTTPMethod: "GET")
request.startWithCompletionHandler({(connection , result , error) in
  if ((error) != nil) {
    print("Error in fetching cover photo for \\(page.id): \(error)", terminator: "")
  }
  else {
    if let data = result["cover"] as? NSDictionary {
      self.fetchImageFromUrl(data["source"] as! String, cb: {(image: UIImage) -> Void in
        //do something with image
      })
    }
  })

func fetchImageFromUrl(url: String, cb: (UIImage) -> Void) {
  let urlObj = NSURL(string: url)!
  dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {
    let data = NSData(contentsOfURL: urlObj)
    dispatch_async(dispatch_get_main_queue(), {
      let image = UIImage(data: data!)!
      cb(image)
    });
  }
}

P.S - I'm a newbie in swift / ios so this code might not be the best. Comments will be appreciated.

这篇关于如何在swift 2.0中从Facebook获取cover_photo的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆