qt - 带有 HERE 插件的 Qt Qml Map 如何正确使用 here.token 进行身份验证
问题描述
我正在努力在 HERE 插件中进行身份验证。我正在使用带有 Qt 5.9.1 Mingw 32bit 的 Windows 10,我的应用程序几乎都是用 C++ 编写的。我使用 QML 的唯一部分是关于地图。我想使用 HERE 插件,但我是 QtLocation 和插件的新手,我真的不明白我需要做什么才能在 HERE 中进行身份验证。我试图按照 HERE 网站上的指南进行操作,但我真的无法理解。
我从 qt 知道我必须用来在 HERE 上进行认证的代码如下:
Plugin {
name: "here"
PluginParameter { name: "here.app_id"; value: "myapp" }
PluginParameter { name: "here.token"; value: "abcdefg12345" }
}
所以我需要here.app_id和here.token。
我在 HERE 网站上创建了一个帐户,并使用 REST 创建了一个项目。所以现在我有了我的APP ID参数,但我真的不明白如何将TOKEN值放入第二行。首先,对于我的具体情况,我需要创建一个 api 密钥还是 OAuth 2.0?
我尝试使用 Postman 遵循此链接中所写的内容,最后我得到了一个非常长的令牌,我复制并放入了“here.token”参数,但是当我运行应用程序时,它给了我Invalid here.token和它不显示地图。
有人可以给我有关如何正确获取令牌值的任何提示吗?或者有人可以指点我一些链接吗?是否有其他方法可以使用 api 密钥而不是令牌进行登录?
- - - - - - - - 更新 - - - - - - - - - - - - - - - - - ------
过了一段时间,我不得不回到这个我从未解决过的问题上:现在的情况是我设法通过邮递员获得了令牌,但它总是无效的。现在我正在使用 Qt 5.15.2 和 MinGw 64 位。
我正在使用修改的 minimum_map 示例添加 here.app_id 和 here.token 参数。
main.qml
import QtQuick 2.15
import QtQuick.Window 2.15
import QtLocation 5.6
import QtPositioning 5.6
Window {
width: Qt.platform.os == "android" ? Screen.width : 512
height: Qt.platform.os == "android" ? Screen.height : 512
visible: true
Plugin {
id: mapPlugin
name: "here" // "mapboxgl", "esri", ...
// specify plugin parameters if necessary
parameters: [
PluginParameter {
name: "here.app_id"
value: "xxxxx"
},
PluginParameter {
name: "here.token"
value: "yyyyyy"
}]
}
Map {
anchors.fill: parent
plugin: mapPlugin
center: QtPositioning.coordinate(59.91, 10.75) // Oslo
zoomLevel: 14
}
}
问题是当我运行应用程序时,输出如下:
Invalid here.token
3 , "Qt Location requires app_id and token parameters.\nPlease register at https://developer.here.com/ to get your personal application credentials."
为了获得令牌,我做了以下事情:
- 我在 developer.here 网站上注册了一个免费增值计划并创建了一个项目。
- 我创建了一个 REST API 和一个 OAuth 2.0(JSON Web 令牌),如下所示(我保存了我在 3. 步骤中使用的 credentials.properties 文件):
- 我下载了 Postman,创建了一个帐户,然后按照这个问题的答案中的说明进行操作。我收到了这样的 json 格式的响应 :
- 我进入了我的 minimum_map 示例,并将在我发布的第一张图片中显示的 APP ID 值设置为 app_id(而不是“xxxxx”),并设置为 here.token(而不是“yyyyyy”)在来自邮差。
- 我试图清理项目,删除构建文件夹但没有任何改变,答案总是:
Invalid here.token
3 , "Qt Location requires app_id and token parameters.\nPlease register at https://developer.here.com/ to get your personal application credentials."
我缺少什么来获得在 Qt 中显示此处插件的令牌?
解决方案
HERE 服务已更新,但 Qt 尚未更新其插件。
主要变化是:
app_id 和 token 仅在使用 HERE SDK 时才需要,在 Qt 的情况下必须使用 apiKey。
HERE 服务 url 有以下变化:
使用 https(以前可以通过 http 访问,但现在不行)。
以前的主机有格式
X.api.here.com
,但现在是X.ls.hereapi.com
.
也就是说,您必须从以下位置更改请求:
http://X.api.here.com/?app_code={here.app_code}&app_id={here.app_id}&{other_parameters}
到
https://X.ls.here.com/?apiKey={here.apiKey}&{other_parameters}
Qt 5.14:
考虑到上述情况,我创建了一个实现上述内容的补丁,因此要使用它,您必须遵循以下过程:
git clone https://code.qt.io/qt/qtlocation.git
cd qtlocation
git checkout 5.14
wget https://raw.githubusercontent.com/eyllanesc/stackoverflow/master/questions/60544057/Qt5.14/update-HERE-Qt5.14.patch
git config --global user.email "you@example.com"
git am < update-HERE-Qt5.14.patch
qmake .
make
make install
Qt 5.9:
考虑到上述情况,我创建了一个实现上述内容的补丁,因此要使用它,您必须遵循以下过程:
git clone https://code.qt.io/qt/qtlocation.git
cd qtlocation
git checkout 5.9
wget https://raw.githubusercontent.com/eyllanesc/stackoverflow/master/questions/60544057/Qt5.9/update-HERE-Qt5.9.patch
git config --global user.email "you@example.com"
git am < update-HERE-Qt5.9.patch
qmake .
make
make install
Window {
visible: true
width: 640
height: 480
Plugin {
id: mapPlugin
name: "here"
PluginParameter { name: "here.apiKey"; value: "{YOUR_API_KEY}" }
}
Map {
anchors.fill: parent
plugin: mapPlugin
center: QtPositioning.coordinate(59.91, 10.75) // Oslo
zoomLevel: 14
}
}
更新
这里的服务提供了各种不同的访问 url 的认证系统。因此,考虑到上述情况,我已经尝试了每种情况,我发现 Qt 使用 HERE SDK FOR IO 或 HERE SDK FOR ANDROID(在我回答之前,它用于身份验证类型 REST)。
因此,在这种情况下,您必须激活其中一种类型的身份验证:
在 HERE SDK FOR IOS 或 HERE SDK FOR ANDROID 的情况下,您必须分别为包或包名称设置任何值。
因此,here.app_id 必须使用 APP ID,here.token 必须使用 APP CODE:
Plugin {
id: mapPlugin
name: "here"
parameters: [
PluginParameter {
name: "here.app_id"
value: "APP_ID"
},
PluginParameter {
name: "here.token"
value: "APP_CODE"
}
]
}
推荐阅读
- python - sqlite3.ProgrammingError:提供的绑定数量不正确。当前语句使用 2,并且提供了 1
- testing - 赛普拉斯,cy.visit() 尝试加载 ESOCKETTIMEDOUT 失败
- redux - 默认情况下 CreateEntityAdapter 和 normalizr 兼容吗?- SelectId 始终未定义
- c# - 如何在 JetBrains Rider 中关闭代码“提示”
- wordpress - 如何在 wordpress 中创建分层帖子?
- python - 通过抬腿在中点连接一系列桥梁
- reactjs - TypeScript:“this”隐含类型“any”,因为它没有类型注释
- python - 在 pandas 数据框中获取满足某些条件的行
- sql - 聚合表
- angular8 - 在页面加载时关注 MatInput 给出错误