Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何使用Facebook ID在应用程序内共享数据?_Ios_Swift_Facebook - Fatal编程技术网

Ios 如何使用Facebook ID在应用程序内共享数据?

Ios 如何使用Facebook ID在应用程序内共享数据?,ios,swift,facebook,Ios,Swift,Facebook,我正在尝试使用Facebook id在我的应用程序中共享数据 简单计划:获取用户Facebook ID my ID。如果成功,我将获取与仪表板中的测试用户ID匹配的TestUser ID。 然后,我得到用户的朋友和他们的ID,允许用户从自定义的tableview中选择朋友。然而,对于字段:id,Facebook图形查询返回唯一的基于应用程序的id。这意味着它们与仪表板中的测试用户朋友id不匹配。 问题是,我的应用程序向云端发布了一张图像,其中包含一组用户选择的好友ID。这意味着将发布基于应用程序

我正在尝试使用Facebook id在我的应用程序中共享数据

简单计划:获取用户Facebook ID my ID。如果成功,我将获取与仪表板中的测试用户ID匹配的TestUser ID。 然后,我得到用户的朋友和他们的ID,允许用户从自定义的tableview中选择朋友。然而,对于字段:id,Facebook图形查询返回唯一的基于应用程序的id。这意味着它们与仪表板中的测试用户朋友id不匹配。 问题是,我的应用程序向云端发布了一张图像,其中包含一组用户选择的好友ID。这意味着将发布基于应用程序的唯一id。因此,当我转到朋友帐户并尝试从云中删除包含该用户id的所有帖子时,我使用的是上面1中的用户id。因为这与从好友列表中生成的唯一id不匹配,所以我无法查询数据

有没有想过如何克服我只获得Facebookid而只获得好友应用程序唯一的Facebook ID的问题?是否可以获取我的应用程序唯一的Facebook ID?如果是这样的话,我会把它发布到云上,这样当我的朋友得到我的id时,它就会匹配

更新1代码

这将获取作为应用程序范围ID的我的朋友ID。。返回ID大约有80个字符长,与开发人员仪表板上测试用户的用户ID不匹配

func returnFriends() {
    var request = FBSDKGraphRequest(graphPath:"/me/taggable_friends", parameters: ["fields":"user_id,first_name,last_name,name,picture.type(large)"]);
    request.startWithCompletionHandler ({ (connection : FBSDKGraphRequestConnection!, result : AnyObject!, error : NSError!) -> Void in
        if error == nil {
            print("Friends are : \(result)")
                    let jsonResult = result
                    self.friendsArray = jsonResult["data"] as! NSArray
                    var index = 0
                    for data in self.friendsArray {
                        let fn = data["first_name"]! as! String
                        let ln = data["last_name"]! as! String
                        let id = data["id"]! as! String
                        let picture = data["picture"] as! NSDictionary
                        let parsePic = picture["data"] as! NSDictionary
                        let url = parsePic["url"] as! String
                        self.friendProfile .updateValue((fn + " " + ln), forKey: id)
                        self.friendProfilePic .updateValue(url, forKey: id)
                        self.friendProfileID .updateValue(id, forKey: index)
                        index++
                        }
            self.tableView.reloadData()
        } else {
        print("Error Getting Friends \(error)");
        }
    })
}
fetched user: {
    "age_range" =     {
        min = 21;
    };
    "first_name" = Mike;
    gender = male;
    id = 109240712780413;
    "last_name" = Alisonsky;
    name = "Mike Alajhcdecfgba Alisonsky";
    picture =     {
        data =         {
            "is_silhouette" = 1;
            url = "https://scontent.xx.fbcdn.net/hprofile-xfa1/v/t1.0-1/s200x200/10354686_10150004552801856_220367501106153455_n.jpg?oh=2b8a15c932ebadfbd54c4576559bc9a6&oe=570FF350";
        };
    };
}
ID is: 109240712780413
然后,下面是我的ID,它最终是用户ID,与develop dashboard上的测试用户匹配,大约15个数字长

func returnUserData() {
    let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me/user_id", parameters: ["fields":"id,age_range,first_name,last_name,gender,name,picture.type(large)"])
    graphRequest.startWithCompletionHandler({ (connection, result, error) -> Void in
        if ((error) != nil) {
            // Process error
            print("Error: \(error)")
        } else {
            print("fetched user: \(result)")
            let fn = result.valueForKey("first_name") as! String
            let ln = result.valueForKey("last_name") as! String
            let name = "\(fn) \(ln)"
            self.usernameLabel.text = name
            guard let id: String = result.valueForKey("id") as? String else { print("ID is null")
                return }
            print("ID is: \(id)")
            self.returnUserProfileImage(id)
            self.defaults.setObject(name, forKey: self.fbNameKey)
            self.defaults.setObject(id, forKey: self.fbIDKey)
        }
    })
}
更新代码的2个结果

这是我的测试用户登录返回的信息:ID与仪表板中的Facebook开发者测试用户ID匹配

func returnFriends() {
    var request = FBSDKGraphRequest(graphPath:"/me/taggable_friends", parameters: ["fields":"user_id,first_name,last_name,name,picture.type(large)"]);
    request.startWithCompletionHandler ({ (connection : FBSDKGraphRequestConnection!, result : AnyObject!, error : NSError!) -> Void in
        if error == nil {
            print("Friends are : \(result)")
                    let jsonResult = result
                    self.friendsArray = jsonResult["data"] as! NSArray
                    var index = 0
                    for data in self.friendsArray {
                        let fn = data["first_name"]! as! String
                        let ln = data["last_name"]! as! String
                        let id = data["id"]! as! String
                        let picture = data["picture"] as! NSDictionary
                        let parsePic = picture["data"] as! NSDictionary
                        let url = parsePic["url"] as! String
                        self.friendProfile .updateValue((fn + " " + ln), forKey: id)
                        self.friendProfilePic .updateValue(url, forKey: id)
                        self.friendProfileID .updateValue(id, forKey: index)
                        index++
                        }
            self.tableView.reloadData()
        } else {
        print("Error Getting Friends \(error)");
        }
    })
}
fetched user: {
    "age_range" =     {
        min = 21;
    };
    "first_name" = Mike;
    gender = male;
    id = 109240712780413;
    "last_name" = Alisonsky;
    name = "Mike Alajhcdecfgba Alisonsky";
    picture =     {
        data =         {
            "is_silhouette" = 1;
            url = "https://scontent.xx.fbcdn.net/hprofile-xfa1/v/t1.0-1/s200x200/10354686_10150004552801856_220367501106153455_n.jpg?oh=2b8a15c932ebadfbd54c4576559bc9a6&oe=570FF350";
        };
    };
}
ID is: 109240712780413
如果从我回来的时候开始

Friends are : {
    data =     (
                {
            "first_name" = Joe;
            id = "AaKcjMZP1bX72NUURIgWYoZxoV_5yy9NX3WWpfWlUBEXRtoSOSNBOER_43DfxLKQhIDUPhilv67FGCAgjOQlh13NdpqA1o6hSH2_u-7pEM71gg";
            "last_name" = Warmanson;
            name = "Joe Alajgejijfdab Warmanson";
            picture =             {
                data =                 {
                    "is_silhouette" = 1;
                    url = "https://scontent.xx.fbcdn.net/hprofile-xfa1/v/t1.0-1/s200x200/10354686_10150004552801856_220367501106153455_n.jpg?oh=2b8a15c932ebadfbd54c4576559bc9a6&oe=570FF350";
                };
            };
        },
此处的ID与我在Facebook开发者仪表板中为这位朋友提供的测试用户不匹配

func returnFriends() {
    var request = FBSDKGraphRequest(graphPath:"/me/taggable_friends", parameters: ["fields":"user_id,first_name,last_name,name,picture.type(large)"]);
    request.startWithCompletionHandler ({ (connection : FBSDKGraphRequestConnection!, result : AnyObject!, error : NSError!) -> Void in
        if error == nil {
            print("Friends are : \(result)")
                    let jsonResult = result
                    self.friendsArray = jsonResult["data"] as! NSArray
                    var index = 0
                    for data in self.friendsArray {
                        let fn = data["first_name"]! as! String
                        let ln = data["last_name"]! as! String
                        let id = data["id"]! as! String
                        let picture = data["picture"] as! NSDictionary
                        let parsePic = picture["data"] as! NSDictionary
                        let url = parsePic["url"] as! String
                        self.friendProfile .updateValue((fn + " " + ln), forKey: id)
                        self.friendProfilePic .updateValue(url, forKey: id)
                        self.friendProfileID .updateValue(id, forKey: index)
                        index++
                        }
            self.tableView.reloadData()
        } else {
        print("Error Getting Friends \(error)");
        }
    })
}
fetched user: {
    "age_range" =     {
        min = 21;
    };
    "first_name" = Mike;
    gender = male;
    id = 109240712780413;
    "last_name" = Alisonsky;
    name = "Mike Alajhcdecfgba Alisonsky";
    picture =     {
        data =         {
            "is_silhouette" = 1;
            url = "https://scontent.xx.fbcdn.net/hprofile-xfa1/v/t1.0-1/s200x200/10354686_10150004552801856_220367501106153455_n.jpg?oh=2b8a15c932ebadfbd54c4576559bc9a6&oe=570FF350";
        };
    };
}
ID is: 109240712780413
编辑2为什么


我希望用户能够选择一个Facebook朋友发送照片了。所以我在想,把照片贴到cloudkit上,用上面代码得到的朋友Id。朋友Id应该是abdhAbfhd样式的,然后我想让那个朋友查询cloudkit来下拉照片。我能想到的唯一方法是使用好友id。但是为了让那个朋友有这个id,他们需要和我在云上发布的相同的id。我假设它是应用程序范围的。有了以上。当我询问我的用户Id,以查询数据库中我的照片时,我得到的Id是100。。。一我需要一个,我的朋友张贴将类似于aabdcktishf

总之,在Facebook开发者论坛上讨论后发现,虽然返回了我所有的朋友,但并没有返回他们的id,而是返回了一个标签。它可能会发生变化,因此不能作为标识符。我需要查询的是我/朋友与可标记的朋友。好友将返回已授权我的应用程序的好友,并因此返回这些用户的作用域id

因此,当我查询我时,我从中获得的id是我可以用来查询的范围id,当我获得朋友id时,他们应该与Facebook仪表板中使用的id相匹配

func returnFriends() {
    var request = FBSDKGraphRequest(graphPath:"/me/taggable_friends", parameters: ["fields":"user_id,first_name,last_name,name,picture.type(large)"]);
    request.startWithCompletionHandler ({ (connection : FBSDKGraphRequestConnection!, result : AnyObject!, error : NSError!) -> Void in
        if error == nil {
            print("Friends are : \(result)")
                    let jsonResult = result
                    self.friendsArray = jsonResult["data"] as! NSArray
                    var index = 0
                    for data in self.friendsArray {
                        let fn = data["first_name"]! as! String
                        let ln = data["last_name"]! as! String
                        let id = data["id"]! as! String
                        let picture = data["picture"] as! NSDictionary
                        let parsePic = picture["data"] as! NSDictionary
                        let url = parsePic["url"] as! String
                        self.friendProfile .updateValue((fn + " " + ln), forKey: id)
                        self.friendProfilePic .updateValue(url, forKey: id)
                        self.friendProfileID .updateValue(id, forKey: index)
                        index++
                        }
            self.tableView.reloadData()
        } else {
        print("Error Getting Friends \(error)");
        }
    })
}
fetched user: {
    "age_range" =     {
        min = 21;
    };
    "first_name" = Mike;
    gender = male;
    id = 109240712780413;
    "last_name" = Alisonsky;
    name = "Mike Alajhcdecfgba Alisonsky";
    picture =     {
        data =         {
            "is_silhouette" = 1;
            url = "https://scontent.xx.fbcdn.net/hprofile-xfa1/v/t1.0-1/s200x200/10354686_10150004552801856_220367501106153455_n.jpg?oh=2b8a15c932ebadfbd54c4576559bc9a6&oe=570FF350";
        };
    };
}
ID is: 109240712780413

因此,我对使用可标记的好友与仅使用好友存在误解。

您能提供一些代码来展示您的尝试吗?您到底想实现什么?为什么要发布用户的ID?为何你真的想标记用户吗?@luschn更新了上述原因的答案