我正在尝试使用FBGraphObject
获取用户的国家/地区,州和城市。返回的FBGraphObject
包含以下信息:
hometown = {
id = 112118618814985;
name = "La Paz, Bolivia";
};
(我的城市在玻利维亚国家被称为拉巴斯)。
这个可以非常好地工作,如果它实际上会返回“状态”。如果来自美国堪萨斯州威奇托市的人运行我的应用程序,结果将是:
hometown = {
name = "Wichita, Kansas";
};
(那个人的城市是Wichita,在威奇托州,在美国......问题是FBGraphObject
不告诉我,这是在美国)。
当我第一次看到图形对象的hometown属性时,如果我只是使用昏迷标记来展开字符串,我立即认为我可以使用它来获得这个:
La Paz
Bolivia
然后我立即知道第一个对象代表一个城市,第二个代表一个国家。
但是对于像美国这样的国家,虽然第一个元素仍然代表一个城市,但第二个元素代表一个州,因此,我无法存储从那里标记化的数据。
如何使用FacebookSDK for iOS正确获取国家/地区,州/城市?我正在摸不着头脑,因为每个设法做到这一点的人似乎都在使用PHP,但我需要这个才能在iPhone上运行。
编辑:为了记录,这就是我试图获取所有内容的方式:
[FBRequestConnection startForMeWithCompletionHandler:
^(FBRequestConnection *connection, id result, NSError *error) {
if(error == nil)
{
FBGraphObject<FBGraphUser, FBGraphLocation> *graph = result;
NSLog(@"%@", graph);
[[SPAccount sharedAccount] linkFacebookAccountWithGraphObject:graph
andCompletionBlock:^(BOOL linked) {}];
}
}];
以下所有内容都会返回nil
:
graph.location.country
graph.country
graph.location.location.country
答案 0 :(得分:0)
您可以通过FBGraphUser上的location属性获取位置。这将为您提供符合FBGraphPlace的对象。 FBGraphPlace conformer上的location属性是一个符合FBGraphLocation协议的对象,该协议具有以下属性:
city
country
latitude
longitude
state
street
zip
或
在您的代码中导入FacebookSDK / FacebookSDK.h
[FBSession openActiveSessionWithReadPermissions:@[@"email",@"user_location",@"user_birthday",@"user_hometown"]
allowLoginUI:YES
completionHandler:^(FBSession *session, FBSessionState state, NSError *error) {
switch (state) {
case FBSessionStateOpen:
[[FBRequest requestForMe] startWithCompletionHandler:^(FBRequestConnection *connection, NSDictionary<FBGraphUser> *user, NSError *error) {
if (error) {
NSLog(@"error:%@",error);
}
else
{
// retrive user's details at here as shown below
NSLog(@"FB user first name:%@",user.first_name);
NSLog(@"FB user last name:%@",user.last_name);
NSLog(@"FB user birthday:%@",user.birthday);
NSLog(@"FB user location:%@",user.location);
NSLog(@"FB user username:%@",user.username);
NSLog(@"FB user gender:%@",[user objectForKey:@"gender"]);
NSLog(@"email id:%@",[user objectForKey:@"email"]);
NSLog(@"location:%@", [NSString stringWithFormat:@"Location: %@\n\n",
user.location[@"name"]]);
}
}];
break;
case FBSessionStateClosed:
case FBSessionStateClosedLoginFailed:
[FBSession.activeSession closeAndClearTokenInformation];
break;
default:
break;
}
} ];