首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Google归因不一致

Google归因不一致
EN

Stack Overflow用户
提问于 2017-09-19 15:56:34
回答 1查看 89关注 0票数 2

使用Google Places API HTTP服务调用URL获取某个位置的照片数据,

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

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

代码语言:javascript
运行
复制
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值的照片字典,我在整个应用程序中都在适当地处理它。

发行:

当我通过使用place_id获取同一位置的照片数据时,我得到的图片和属性如下:

代码语言:javascript
运行
复制
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}"
)

当然,我收到了同样的照片,,但是没有链接的属性。从我使用web服务的其他方法可以看出,这个地方的照片确实有一个属性链接。

我不知所措。如果他们的iOS SDK不返回相同的数据,我该如何从谷歌获得全部属性呢?

代码:

使用谷歌建议的另一种通过place_id获取位置照片数据的方法,您可以获得图像和图像属性(如果有)。

按照Google的要求,我使用这两种方法获取数据:

代码语言:javascript
运行
复制
- (void)lookUpPhotosForPlaceID:(NSString *)placeID
                      callback:(GMSPlacePhotoMetadataResultCallback)callback;

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

下面是我用来获取照片数据的代码。

代码语言:javascript
运行
复制
// 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的多个调用不会.

EN

回答 1

Stack Overflow用户

发布于 2017-09-29 13:06:29

你可以做几件事来验证正确的行为:

  1. 您可以切换回第一个API,并查看它是否再次返回。因为医生说:

这个方法的多次调用可能每次都会返回相同的照片。但是,这不能保证,因为底层数据可能已经更改。

  1. 第二,如果在调用回调时丢失了一些数据,则可以检查回调行为。 NSArray *photoData =@photoData,metaData.attributions;

此时,我正在放松属性字符串,但只保留纯文本(Leah)。检查此metaData的好方法是在loadPlacePhoto:回调之前:

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46304901

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档