android - 亚马逊定位服务添加新地理围栏
问题描述
我正在测试新的亚马逊位置地理围栏,我正在尝试使用位置 API 将新的地理围栏添加到创建的集合中。我收到带有“禁止”消息的 403 响应。
一般来说,我认为该错误是权限错误,因此,我将与位置服务和网关 API 相关的所有权限授予我的 IAM。然而,这并没有改变反应。此外,在这个开发者公会中。他们提到 HTTP/1.1,在此作为发送请求的示例:
POST /geofencing/v0/collections/CollectionName/put-geofences HTTP/1.1
Content-type: application/json
{ ** }
那么,这是否意味着使用 HTTP 协议,而不是 HTTPS。我也对此感到困惑?
这是我从我的 Android 应用程序创建请求的代码。
val geofenceCollectionName = "TestGeofence"
val geofenceName = "TestAndroid"
var url: String = "https://%s.geo.%s.amazonaws.com".format("geofencing", "us-east-1")
url += "/geofencing/v0/collections/%s/put-geofences".format(geofenceCollectionName, geofenceName)
Log.i(TAG, "The url $url")
val polygon = mutableListOf<List<Double>>()
for (point in pointsList) {
val doubleList: List<Double> = mutableListOf(point.longitude, point.latitude)
polygon.add(doubleList)
}
val entry = Entry(geofenceName, Geometry(mutableListOf(polygon)))
var geofence = Geofence(mutableListOf(entry))
val accesskeyId = getString(R.string.access_key_id)
val accessKey = getString(R.string.accessKey)
Log.i(TAG, "Keys:$accesskeyId,$accessKey")
val region = "us-east-1"
val serviceName = "geo"
val signer = OkHttpAwsV4Signer(region, serviceName)
val dateStamp = DateTimeFormatter
.ofPattern("yyyyMMdd'T'HHmmss'Z'")
.withZone(ZoneOffset.UTC)
.format(Instant.now())
val request = Request.Builder()
.url(url)
.addHeader("Method", "POST")
.addHeader("Content-Type", "application/x-amz-json-1.0")
.addHeader("x-amz-date", dateStamp)
.addHeader("Host", "iam.amazonaws.com")
.post(Gson().toJson(geofence).toRequestBody())
.build()
val newRequest = signer.sign(request, accesskeyId, accessKey)
Log.i(TAG, newRequest.headers.toString() + newRequest.body.toString())
对于请求参数,我很喜欢本指南。这是请求标头和正文,您可以检查它:
Method: POST
Content-Type: application/x-amz-json-1.0
x-amz-date: 20210323T183557Z
Host: iam.amazonaws.com
Authorization: AWS4-HMAC-SHA256 Credential=*********5PNOV6ZABB/20210323/us-east-1/geo/aws4_request, SignedHeaders=content-type;host;method;x-amz-date, Signature=e2aeb3f2650bbf5fdef2b815fe10d6eb42abd01be658b793f9f9f4e3abcfd4be
Also, this is the body of it:
{"Entries":[{"GeofenceId":"TestAndroid","Geometry":{"Polygon":[[[-63.752788379788406,44.73291195964523],[-63.74916773289442,44.732945542816445],[-63.74743536114693,44.728887554200355],[-63.7557689845562,44.73082785944519],[-63.75456701964139,44.73190350270925],[-63.752788379788406,44.73291195964523]]]}}]}
但是,我得到的响应是 403,带有一条“禁止”消息,它的标题是:
date: Tue, 23 Mar 2021 18:36:00 GMT
content-type: application/json
content-length: 23
x-amzn-requestid: c6e46d11-9bd5-4a0c-8f65-31b1600cf95e
x-amzn-errortype: ForbiddenException
x-amz-apigw-id: cp06pHulIAMFYRA=
解决方案
推荐阅读
- transactions - 当我想使用两个有界上下文 DbContext(实体框架核心)时,我应该如何使用事务?
- c++ - 如何在 omnet++ 5.5.1 中使用 make_unique
- python - 无法将 Pandas 数据框转换为字典
- java - 单击 Intellij 中的运行按钮后测试未运行
- javafx - 无法显示图像,尝试显示目录文件中的 5 张随机卡片
- c - 为什么我的 UART 内核模块不发送消息的最后 8 个字符?
- java - 这个对象的动态类型是什么?
- html - 调整窗口大小时页脚保持向下
- php - 来自 HTML 选择标签的 PHP Post 查询
- feature-engineering - 特征工具 dfs vs categorical_encoding