【问题标题】:Getting Country, State, City From FacebookSDK for iOS从 iOS 版 FacebookSDK 获取国家、州和城市
【发布时间】:2013-11-13 19:42:47
【问题描述】:

我正在尝试使用FBGraphObject 获取用户的国家、州和城市。返回的FBGraphObject 包含以下信息:

hometown = {
    id = 112118618814985;
    name = "La Paz, Bolivia";
};

(我的城市叫拉巴斯,在玻利维亚国家)。

如果它实际上会返回“状态”,可以很好地工作。如果来自美国堪萨斯州威奇托的人运行我的应用程序,结果将是:

hometown = {
    name = "Wichita, Kansas";
};

(那个人的城市是威奇托,在威奇托州,在美国...问题是FBGraphObject 没有告诉我,这是在美国)。

当我第一次看到图形对象的 hometown 属性时,我立即认为我可以使用它,如果我只是使用 coma 标记 splat 字符串,得到这个:

La Paz
Bolivia

然后我马上就知道第一个对象代表一个城市,第二个代表一个国家。

但是对于像美国这样的国家,虽然第一个元素仍然代表一个城市,第二个元素代表一个州,因此,我无法存储从那里标记化的数据。

如何使用 iOS 版 FacebookSDK 正确获取国家、州和城市?我正在摸不着头脑,因为每个设法做到这一点的人似乎都让它与 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

【问题讨论】:

    标签: ios ios7 facebook-ios-sdk


    【解决方案1】:

    您可以通过 FBGraphUser 上的 location 属性获取位置。这将为您提供一个符合 FBGraphPlace 的对象。 FBGraphPlace 一致性器上的 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;
                                      }
    
                                  } ];
    

    【讨论】:

      猜你喜欢
      • 2013-02-08
      • 2019-05-27
      • 2017-09-02
      • 2017-10-20
      • 2011-01-14
      • 1970-01-01
      • 2014-09-08
      • 2016-07-16
      • 1970-01-01
      相关资源
      最近更新 更多