我如何获得给定PFUser的Facebook用户名?
问题描述:
PFUser * aUser = [PFUser currentUser]; //可能不是当前用户NSLog(“username%@”,[aUser username]); //如果它不是一个FB用户,这可以。另外它给了我一个象征。我知道有一个[PFUser isLinkedWithUser:aUser]返回的是CURRENT LOGGED USER所链接的,但用户可能不是此设备中的电流。我如何获得给定PFUser的Facebook用户名?
该工程确定为currentUser:
+ (void)getUsernameWithCompletionBlock:(void(^)(NSString *username))handler {
if([PFFacebookUtils isLinkedWithUser:[PFUser currentUser]]){ //<-
FBRequest *request = [FBRequest requestForMe];
[request startWithCompletionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
if (!error) {
NSDictionary *userData = (NSDictionary *)result;
NSString *name = userData[@"name"];
handler(name);
}}];
} else {
handler([[PFUser currentUser] username]);
}
}
但我想是这样的
+(void)getUsernameWithUser:(PFUser *)user andCompletionBlock:(void(^)(NSString *username))handler {
if([PFFacebookUtils isLinkedWithUser:user]){ //<- THIS ALWAYS RETURN FALSE
//return the real facebook username
} else {
handler([user username]);
}
}
在医生说:isLinkedWithUser:
无论用户有他们的帐户链接到Facebook。
(BOOL)isLinkedWithUser :(PFUser *)user参数user用户检查facebook链接。用户必须在此设备上登录。 有什么建议吗?
答
当您拥有不是当前用户的用户时,不会发送authData。您有两种选择:
- 每个用户都可以在用户表中存储他们的Facebook用户名(以及任何其他想要公开访问的数据)。
- 创建一个使用主密钥检索authData并查询Facebook用户名的云代码函数。
对于方案二,你的云代码应该做类似如下的内容:
Parse.Cloud.define("facebookAlias", function(request, response) {
Parse.Cloud.useMasterKey();
new Parse.Query(Parse.User).get(request.params.user_id).then(function(user) {
var authData = user.get("authData");
// Quit early for users who aren't linked with Facebook
if (authData === undefined || authData.facebook === undefined) {
response.success(null);
return;
}
return Parse.Cloud.httpRequest({
method: "GET",
url: "https://graph.facebook.com/me",
params: {
access_token: authData.facebook.access_token,
fields: "username",
}
});
}).then(function(json) {
response.success(JSON.parse(json)["username"]);
// Promises will let you bubble up any error, similar to a catch statement
}, function(error) {
response.error(error);
});
});
免责声明:上面的代码大致是从一个个人项目,但足够作了调整,我不保证反对语法错误。