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

时间:2015-12-29 07:46:46

标签: ios swift facebook

我正在尝试使用Facebook ID来在我的应用中共享数据。

  1. 简单计划:获取用户Facebook ID(我的ID)。这很成功,我得到的TestUser ID与仪表板中的测试用户ID相匹配。
  2. 然后,我得到了用户朋友和他们的ID,允许用户从自定义的桌面视图中选择朋友。然而,Facebook图形查询对于字段:id,它返回基于唯一应用程序的ID。这意味着它们与仪表板中的测试用户朋友ID不匹配。
  3. 问题是,我的应用程序使用一组用户选择的朋友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)");
            }
        })
    }
    

    然后,下面是获取我的ID,最终成为用户ID,并在开发仪表板上匹配我的测试用户大约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)
            }
        })
    }
    

    更新代码的结果

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

    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开发者信息中心中为此朋友提供的测试用户不匹配。

    编辑2为什么

    我希望用户能够选择Facebook好友发送照片。所以我在想,将照片发布到cloudkit,与我上面的代码获得的朋友ID。(朋友ID将是abdhAbfhd样式)然后我希望该朋友查询cloudkit来下载该照片。我能想到的唯一方法是使用朋友ID。但是为了让那位朋友有能力下拉他们需要我发布到云端的同一个。我假设的是app范围。有了以上。当我要求我的用户ID时,我得到的ID,在数据库中查询我的照片是100 ...一个。我需要一个我的朋友发布的一个类似于aabdcktishf ....

1 个答案:

答案 0 :(得分:0)

所有,经过Facebook开发者论坛的讨论后发现,虽然回复了我所有的朋友,但他们并没有返回他们的id,而是返回了一个标签。哪个可以改变,因此不如标识符。我需要查询的是我/朋友vs taggable-friends。朋友将返回已授权我的应用的朋友,因此返回这些用户的范围ID。

因此,当我询问我时,我所获得的ID是我可以用来查询的范围ID,当我得到朋友ID时,他们应该匹配Facebook信息中心中使用的ID。

因此,我误解了使用taggable-friends和朋友。