How can i get the list of my friends friends list using new facebook api. i got the friend list using the below code,
$friends = $facebook->api('/uid/friends');
but i am not able to get friend list if i pass their userid in the same function..
Facebook friend list only fetches a taggable friend list.
Facebook does not access full profiles friend list, it shows only total friend list count in your profile.
pod and plist setting all other should you apply Facebook Developer steps.
So is here my code in Swift 3.0 taggable friend list.
appdelegate.swift
import CoreData
import FBSDKCoreKit
import FBSDKLoginKit
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
return FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)
// Override point for customization after application launch.
return true
}
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
return FBSDKApplicationDelegate.sharedInstance().application(app, open: url, options: options)
}
viewcontroller.swift
import UIKit
import FBSDKLoginKit
import FacebookCore
import FacebookLogin
import SDWebImage
class ViewController: UIViewController, FBSDKLoginButtonDelegate,UITableViewDelegate,UITableViewDataSource
{
@IBOutlet var TblView: UITableView!
@IBOutlet weak var btnFacebook: FBSDKLoginButton!
@IBOutlet weak var ivUserProfileImage: UIImageView!
@IBOutlet weak var lblName: UILabel!
let reusableIdentifire = "cell"
@IBOutlet var FriendListBtn: UIButton!
var dict = [AnyObject]()
var FBNameArray = [String]()
var FBImageArray = [String]()
var Array = [String:AnyObject]()
override func viewDidLoad()
{
super.viewDidLoad()
self.TblView.delegate = self
self.TblView.dataSource = self
configureFacebook()
//acess authorization
let fbLoginManager : FBSDKLoginManager = FBSDKLoginManager()
fbLoginManager.logIn(withReadPermissions: ["email"], from: self) { (result, error) in
if (error == nil){
let fbloginresult : FBSDKLoginManagerLoginResult = result!
if fbloginresult.grantedPermissions != nil {
if(fbloginresult.grantedPermissions.contains("email"))
{
self.getFBUserData()
fbLoginManager.logOut()
}
}
}
}
self.TblView.reloadData()
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
return FBNameArray.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
let cell: TableViewCell = self.TblView.dequeueReusableCell(withIdentifier: self.reusableIdentifire,for:indexPath) as! TableViewCell
cell.FriendName.text = self.FBNameArray[indexPath.row]
cell.FriendImg?.sd_setImage(with:URL(string: FBImageArray[indexPath.row] ), placeholderImage: UIImage(named: ""))
//cell.FriendImg.image = UIImage(named: self.FBImageArray[indexPath.row])
return cell
}
func configureFacebook()
{
btnFacebook.readPermissions = ["public_profile", "email", "user_friends"];
btnFacebook.delegate = self
}
func loginButton(loginButton: FBSDKLoginButton!, didCompleteWithResult result: FBSDKLoginManagerLoginResult!, error: NSError!)
{}
func loginButtonDidLogOut(_ loginButton: FBSDKLoginButton!)
{}
func loginButton(_ loginButton: FBSDKLoginButton!, didCompleteWith result: FBSDKLoginManagerLoginResult!, error: Error!)
{
FBSDKGraphRequest.init(graphPath: "me", parameters: ["fields":"first_name, last_name, picture.type(large)"]).start { (connection, result, error) -> Void in
let strFirstName: String = ((result as AnyObject)["first_name"]) as! String
let strLastName: String = ((result as AnyObject)["last_name"]) as! String
let faceBookID:String = (result as AnyObject).value(forKey: "id") as! String
let strPictureURL = String(format:"https://graph.facebook.com/%@/picture?type=large", faceBookID)
self.lblName.text = "Welcome, \(strFirstName) \(strLastName)"
self.ivUserProfileImage.image = UIImage(data: try! Data(contentsOf: URL(string: strPictureURL)!))
}
}
private func loginButtonDidLogOut(loginButton: FBSDKLoginButton!)
{
let loginManager: FBSDKLoginManager = FBSDKLoginManager()
ivUserProfileImage.image = nil
lblName.text = "SignOut"
loginManager.logOut()
}
func getFBUserData(){
if((FBSDKAccessToken.current()) != nil){
FBSDKGraphRequest(graphPath:"/me/taggable_friends", parameters:["fields":"user_id,first_name,last_name,name,picture.type(large)"],httpMethod: "GET")
//["fields": "id, name, first_name, last_name, picture.type(large), email"])
.start(completionHandler: { (connection,result, error) -> Void in
if (error == nil)
{
print("Friends are: \(result)")
let jsonResult = result as! Dictionary<String,AnyObject>
self.dict = jsonResult["data"] as! [AnyObject]
for item in self.dict
{
// let id = item["id"] as! String
let name = item["name"] as! String
self.FBNameArray.append(name)
print("FBname: \(self.FBNameArray)")
let picture = item["picture"] as! NSDictionary
let parsePic = picture["data"] as! NSDictionary
let url = parsePic["url"] as! String
self.FBImageArray.append(url)
print("FBimage: \(self.FBImageArray)")
self.TblView.reloadData()
}
}
})
}
}
}
tableview.swift
import UIKit
import FBSDKLoginKit
import FacebookCore
import FacebookLogin
class TableViewController: UIViewController,UITableViewDelegate,UITableViewDataSource
{
@IBOutlet var TblView: UITableView!
let reusableIdentifire = "cell"
var ImageArray = [String]()
var NameArray = [String]()
override func viewDidLoad()
{
super.viewDidLoad()
self.TblView.delegate = self
self.TblView.dataSource = self
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
return 1
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
let cell: TableViewCell = self.TblView.dequeueReusableCell(withIdentifier: self.reusableIdentifire,for:indexPath) as! TableViewCell
cell.FriendName.text = self.NameArray[indexPath.row]
cell.FriendImg.image = UIImage(named: self.ImageArray[indexPath.row])
return cell
}
@IBAction func BackBtn(_ sender: AnyObject)
{
self.navigationController?.popViewController(animated:true)
}
}
tableviewcell.swift
import UIKit
class TableViewCell: UITableViewCell
{
@IBOutlet var FriendImg: UIImageView!
@IBOutlet var FriendName: UILabel!
}
You can't, that's their private data so it's under their control. If they then want the application to have access to it, they would grant permission and it can do so on their behalf.