我正试图计算使用谷歌地图SDK在iOS应用程序中加载和显示PanoramaView
的成本。
根据官方文件,StreetView每1000次实例化最多10万次收费14美元,高于此收费11.2美元(批量折扣超过50万(。这是消息来源。
特别指出:
在iOS上使用GMSPanoramaView对象。
对我来说,既因为英语不是我的母语,也因为我所知道的实例化概念,我并不清楚这意味着什么。重点是,官方文档提供了两种方法(请参见此处(,用于在创建GMSPanoramaView
对象后移动位置并更改其显示的全景。文件中唯一明确指出的是,通过双击或点击导航箭头来移动到附近的全景图是不收费的。
关于计费,我试图了解这两种情况中的哪一种适用:
-
每次创建新的GMSPanoramaView(例如
let panoView = GMSPanoramaView(frame: .zero)
(都会收取固定成本,并且一旦创建,将全景移动到不同的区域并通过调用moveNearCoordinate()
方法进行显示是免费的(如果处理得当,基本上每次应用程序启动都会收取0.014美元(; -
固定成本也适用于
moveNearCoordinate()
方法——因此,每次更改GMSPanoramaView
的panoramaID
属性时。
我几乎可以肯定。当一个人告诉我,在他的应用程序(使用安卓SDK(中,每次移动全景时,他都会被收取费用时,情况确实如此。
当然,如果我问这个是因为我还不能自己测试。有人能透露一下账单是如何运作的吗?
编辑:我发现谷歌提供了一些免费积分,我很快就建立了一个项目来测试它。
该项目建设如下:
-
GMSPanoramaView对象被初始化为主
ViewController
的类变量-在frame
发出警告时通过.zero
:private let streetView: GMSPanoramaView = { let pano = GMSPanoramaView(frame: CGRect(x: 0, y: 0, width: 1, height: 1)) pano.camera = GMSPanoramaCamera(heading: 0, pitch: 0, zoom: 0) return pano }()
-
viewDidLoad()
:中发生附加设置view.addSubview(streetView) streetView.move(toPanoramaID: "random_pano_id")
-
帧被设置为等于
viewDidLayoutSubviews()
中的VC视图,因此全屏; -
层次结构的顶部有一个
UIButton
,每次按下它都会调用streetView.move(toPanoramaID: newID)
来移动全景。newID
是一个字符串变量,假定值为12个有效的硬编码街景ID中的一个。该过程是按顺序进行的,从第一个ID到第十二个ID,因此不会显示重复的全景图。
显然,谷歌开发者控制台每4-6小时报告一次请求,所以我可以做三次测试。我试着在iPhone上启动该应用程序,在不退出应用程序的情况下加载所有12个pano(+最初的一个(,然后每次测试都强制退出该应用程序。这里是每个测试的结果:
- 4个请求已计费
- 2个请求已计费
- 2个请求已计费,在此过程中我有一次断开了连接
这有点令人困惑,因为我预计会有1或13个请求计费。要么是Maps SDK出了问题,我的GMSPanoramaView
对象以某种方式被释放并重新实例化(这不太可能,因为屏幕上总是显示全景(,要么是我想不出另一个问题。
再说一遍,如果有人能澄清发生了什么,我很感激。此外,非常感谢最小化实例化/成本的提示。
通过将GMSPanoramaView
对象声明为static
,我能够将每次应用程序启动的收费请求数减少到1。