Google API错误 - 归因不一致

时间:2017-09-19 15:56:34

标签: ios objective-c xcode google-maps google-places-api

使用Google Places API HTTP网络服务调用网址

获取某个地点的照片数据

https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=<LOCATION>&radius=<RADIUS>&sensor=false&key=<API_KEY>

产生预期的回调。以下是我用于测试的请求的响应。

2017-09-19 11:20:32.968347-0400 <MY_APP_NAME>[7502:2809094] Places Found: (
        {
        ... 
        ...
        photos =         (
                        {
                height = 5312;
                "html_attributions" =                 (
                    "<a href=\"https://maps.google.com/maps/contrib/110407035205544174409/photos\">leah steen</a>"
                );
                "photo_reference" = "CmRaAAAAcppPDrYGBnLqlyYQ_EMmsvgKXXpVjp0drGkJPWLBwlSzrWzuhtFFGCzQPl1pSez92QVktthtaMSsV1IlAWMIMPboycElhruKgUg-KFHWWrhLKOR6h8GGiR349rhokAFJEhApc7ghYIH0guUQBGJi1bKBGhQMcElN7-lSBzvCgAG3vVzANLkf6A";
                width = 2988;
            }
        );
        ...
        ...
    }
)

正如您所看到的,这个地方有一个照片字典,其中包含相关图像的html_attributions值,我在整个应用程序中都正确处理。

ISSUE:

当我通过使用place_id获取相同位置的照片数据时,我会看到照片和归因信息:

2017-09-19 11:22:08.548253-0400 <MY_APP_NAME>[7502:2809094] photo data: (
    "<UIImage: 0x17048b720> size {169, 300} orientation 0 scale 2.000000",
    "leah steen{\n}"
)

我当然收到了相同的照片,但没有链接的归属。从我使用网络服务的其他方法中可以看出,此地点的照片确实的归属 一个链接。

我不知所措。如果他们的iOS SDK没有返回相同的数据,我应该如何获得Google的完整归属?

CODE:

使用Google的其他建议的方法通过place_id获取地点的照片数据,您可以获取图片和图片归属地(如果有)。

我使用这两种方法获取数据,如Google所示:

- (void)lookUpPhotosForPlaceID:(NSString *)placeID
                      callback:(GMSPlacePhotoMetadataResultCallback)callback;

- (void)loadPlacePhoto:(GMSPlacePhotoMetadata *)photo
              callback:(GMSPlacePhotoImageResultCallback)callback;

以下是我用于获取照片数据的代码。

// Look up photos for the place
[[GMSPlacesClient sharedClient] lookUpPhotosForPlaceID:placeID callback:^(GMSPlacePhotoMetadataList * _Nullable photos, NSError * _Nullable error) {

    if (error != nil) {
        response(error, NULL);
        return;
    }

    if (photos.results.count > 0) {

        GMSPlacePhotoMetadata *metaData = photos.results.firstObject;   // Using the first photo

        // Load the photo
        [[GMSPlacesClient sharedClient] loadPlacePhoto:metaData constrainedToSize:<SOME_SIZE> scale:[UIApplication sharedApplication].keyWindow.screen.scale callback:^(UIImage * _Nullable photo, NSError * _Nullable error) {

            if (error) {
                response(error, NULL);
                return;
            }

            NSArray *photoData = @[photo, metaData.attributions];

            response(nil, photoData);

        }];

    }
    else response(error, NULL);

}];

修改

供参考,因为Google 确实通知用户此数据可能会发生变化,并且多个回调应该返回相同的数据。然而,使用不同API的多个电话不会......

1 个答案:

答案 0 :(得分:2)

您可以采取以下措施来验证正确的行为:

  1. 您可以切换回第一个API并查看它是否实际再次返回。因为doc说:
  2.   

    多次调用此方法可能会返回相同的照片   每一次。但是,由于基础数据,这不能得到保证   可能已经改变了。

    1. 其次,如果在行中调用回调时丢失一些数据,则可以检查回调行为

      NSArray * photoData = @ [photo,metaData.attributions];

    2. 此时我失去了属性字符串,但只保留了纯文本(leah steen)。 检查此元数据的好方法是在 loadPlacePhoto:callback:

      之前