1

我正在使用 facebook sdk 3.0

在 facebook 我添加了用户的完整地址为

地址- 1,无限循环

城市/城镇 - 加利福尼亚州库比蒂诺

更新

根据答案,我尝试像这样使用 FBGraphLocation 协议

 NSDictionary<FBGraphUser> *user
 id<FBGraphPlace> objPlace = user.location;
 id<FBGraphLocation> objLocation = objPlace.location;

 NSLog(@"place.location : %@ location.street : %@",objPlace.location,objLocation.street);

(null)为两者付出。我也得到了objLocation object as (null)

在 facebook sdk 响应中,我得到的位置只有这个

location =     {
        id = 123456789123456;
        name = "Cupertino, California";
    }

这不是我可以从中获取使用邮政编码的足够信息。

如果 facebook 不允许提供邮政编码信息,那么有什么方法可以仅从"Cupertino, California"信息中获取邮政编码?

我用过这个网址

http://maps.googleapis.com/maps/api/geocode/json?address=Cupertino,%20California&sensor=true

这给了我结果

{
        "long_name" = Cupertino;
        "short_name" = Cupertino;
        types =         (
            locality,
            political
        );
    },
        {
        "long_name" = "Santa Clara";
        "short_name" = "Santa Clara";
        types =         (
            "administrative_area_level_2",
            political
        );
    },
        {
        "long_name" = California;
        "short_name" = CA;
        types =         (
            "administrative_area_level_1",
            political
        );
    },
        {
        "long_name" = "United States";
        "short_name" = US;
        types =         (
            country,
            political
        );
    }

如果我将该地址静态地放入 URL 中

http://maps.googleapis.com/maps/api/geocode/json?address=1%20Infinite%20Loop,%20Cupertino,%20CA&sensor=true

然后它也给了我邮政编码。

{
        "long_name" = 1;
        "short_name" = 1;
        types =         (
            "street_number"
        );
    },
        {
        "long_name" = "Apple Inc.";
        "short_name" = "Apple Inc.";
        types =         (
            establishment
        );
    },
        {
        "long_name" = "Infinite Loop";
        "short_name" = "Infinite Loop";
        types =         (
            route
        );
    },
        {
        "long_name" = Cupertino;
        "short_name" = Cupertino;
        types =         (
            locality,
            political
        );
    },
        {
        "long_name" = "Santa Clara";
        "short_name" = "Santa Clara";
        types =         (
            "administrative_area_level_2",
            political
        );
    },
        {
        "long_name" = California;
        "short_name" = CA;
        types =         (
            "administrative_area_level_1",
            political
        );
    },
        {
        "long_name" = "United States";
        "short_name" = US;
        types =         (
            country,
            political
        );
    },
        {
        "long_name" = 95014;
        "short_name" = 95014;
        types =         (
            "postal_code"
        );
    }

但是从 Facebook sdk,我只得到了城市/城镇(如上所述),在 Facebook.com 的联系信息中添加

我怎样才能做到这一点?

4

2 回答 2

1

在深入了解 SDK 后,我发现您可以使用 FBGraphLocation API 访问用户的邮政编码和街道,这是 FBGraph API 的一部分。

要获取 FBGraphLocation,您将访问 FBGraphUser 的 location 属性

/*!
 @property 
 @abstract Typed access to the user's current city.
 */
@property (retain, nonatomic) id<FBGraphLocation> location;

FBGraphLocation API 具有以下可用属性:

/*!
 @property
 @abstract Typed access to a location's street.
 */
@property (retain, nonatomic) NSString *street;

/*!
 @property
 @abstract Typed access to a location's zip code.
 */
@property (retain, nonatomic) NSString *zip;

这就是你需要的,对吧?

于 2013-08-16T13:35:23.850 回答
1

最后,我使用 google API 从我从 facebook 获得的地址获取纬度和经度,并使用这些坐标找到邮政编码。

- (CLLocation *) getGeoCoordinatesUsingAddress: (NSString *) aStrAddres
{

    NSString *esc_addr = [aStrAddres stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding];

    NSString *req = [NSString stringWithFormat:BaseURLForLocation, esc_addr];
    NSString *result = [NSString stringWithContentsOfURL:[NSURL URLWithString:req] encoding:NSUTF8StringEncoding error:NULL];

    NSDictionary *googleResponse =
    [NSJSONSerialization JSONObjectWithData: [result dataUsingEncoding:NSUTF8StringEncoding]
                                    options: NSJSONReadingMutableContainers
                                      error: nil];

    NSDictionary *resultsDict = [googleResponse valueForKey:@"results"];
    NSDictionary *geometryDict = [resultsDict valueForKey:@"geometry"];
    NSDictionary *locationDict = [geometryDict valueForKey:@"location"];
    NSArray *latArray = [locationDict valueForKey: @"lat"]; NSString *latString = [latArray lastObject];
    NSArray *lngArray = [locationDict valueForKey: @"lng"]; NSString *lngString = [lngArray lastObject];

    CLLocation *locationFound = [[CLLocation alloc] initWithLatitude:[latString doubleValue] longitude:[lngString doubleValue]];

    NSLog(@"%s lat: %f\tlon:%f ",__FUNCTION__, [latString doubleValue], [lngString doubleValue]);

    return locationFound;
}

然后我使用了 CLGeocoder 类

CLGeocoder *geocoder = [[CLGeocoder alloc] init];
    [geocoder reverseGeocodeLocation:location completionHandler:^(NSArray *placemarks, NSError *error) {

        for(CLPlacemark *aPlacemark in placemarks){
            NSString *strZipCode = [aPlacemark.addressDictionary objectForKey:(NSString *)kABPersonAddressZIPKey];

        }
    }];

希望这有帮助..

于 2013-08-28T05:07:51.700 回答