为什么 HERE Places API 不能在设备上工作,而是在本地主机上工作?
Why is HERE Places API not working on device but on localhost?
我正在尝试在 Ionic5 应用程序中从此处位置 api 实施位置搜索 API。
在本地主机环境中一切正常,但搜索在设备上停止工作。
问题:是否有用于设备使用的特殊 App-Code 或 -Key(也用于通过 Android Studio 进行测试)?为什么通过 android-studio 测试它在本地主机上工作而不在设备上工作?
我尝试将应用程序代码和应用程序 ID 更改为应用程序密钥,还尝试了 Rest、JS 和 Rest-JS 身份验证凭据,但它不起作用。我不知道下一步该怎么做,因为在设备上测试没有错误,对此 API.
没有任何反应
index.html
<script
src="https://js.api.here.com/v3/3.0/mapsjs-core.js"
type="text/javascript"
charset="utf-8"
></script>
<script
src="https://js.api.here.com/v3/3.0/mapsjs-service.js"
type="text/javascript"
charset="utf-8"
></script>
<script
src="https://js.api.here.com/v3/3.0/mapsjs-places.js"
type="text/javascript"
charset="UTF-8"
></script>
搜索服务
public async searchLocation(search): Promise<any> {
var platform = new H.service.Platform({
app_id: "my-id",
app_code: "my-code",
});
var searchParams = {
q: search,
in: "-180,-90,180,90"
};
return this.startSearch(platform, searchParams);
}
public async startSearch(platform: any, searchParams: object): Promise<any> {
return new Promise((resolve, reject) => {
var search = new H.places.Search(platform.getPlacesService());
const self = this;
search.request(
searchParams,
{},
function onResult(data: any) {
self.Result = data.results.items;
resolve(self.Result);
},
function onError(error: any) {
console.log("HERE search error", error);
reject(error);
}
);
});
}
编辑 - 错误日志
E/Capacitor/Console: File: http://localhost/vendor-es2015.js - Line 43427 - Msg: ERROR Error: Uncaught (in promise): Error: [timeout] http://places.api.here.com/places/v1/discover/explore?xnlp=CL_JSMv3.0.17.0&app_id=--myID--&app_code=--myCode--&in=49.9949556%2C10.1767104%3Br%3D10000&size=100 request failed
Error: [timeout] http://places.api.here.com/places/v1/discover/explore?xnlp=CL_JSMv3.0.17.0&app_id=--myID--&app_code=--myCode--&in=479.9949556%2C10.1767104%3Br%3D10000&size=100 request failed
at Object.Zc (eval at <anonymous> (https://js.api.here.com/v3/3.0/mapsjs-core.js:56:36), <anonymous>:11:176)
at b (eval at <anonymous> (https://js.api.here.com/v3/3.0/mapsjs-core.js:56:36), <anonymous>:9:440)
at eval (eval at <anonymous> (https://js.api.here.com/v3/3.0/mapsjs-core.js:56:36), <anonymous>:10:43)
at ZoneDelegate.invokeTask (http://localhost/polyfills-es2015.js:3741:31)
at Object.onInvokeTask (http://localhost/vendor-es2015.js:73280:33)
at ZoneDelegate.invokeTask (http://localhost/polyfills-es2015.js:3740:60)
at Zone.runTask (http://localhost/polyfills-es2015.js:3518:47)
at invokeTask (http://localhost/polyfills-es2015.js:3815:34)
at ZoneTask.invoke (http://localhost/polyfills-es2015.js:3804:48)
已修复:
谢谢@Raymond,我用另一种方式修复了用例。
而不是我的 API 调用我的问题,我将它更改为 httpClient 的 URL 请求。
public async searchLocation(search): Promise<any> {
const BASE_NOMINATIM_URL = "nominatim.openstreetmap.org";
const DEFAULT_VIEW_BOX = "-25.0000%2C70.0000%2C50.0000%2C40.0000";
const url = `https://${BASE_NOMINATIM_URL}/search?format=json&q=${search}&${DEFAULT_VIEW_BOX}&bounded=1`;
return this.http.get(url).subscribe((ans) => {
console.log("data", ans);
});
}
我不知道为什么我的问题里面的方法不起作用。但是 URL 方法有效。
我正在尝试在 Ionic5 应用程序中从此处位置 api 实施位置搜索 API。 在本地主机环境中一切正常,但搜索在设备上停止工作。
问题:是否有用于设备使用的特殊 App-Code 或 -Key(也用于通过 Android Studio 进行测试)?为什么通过 android-studio 测试它在本地主机上工作而不在设备上工作?
我尝试将应用程序代码和应用程序 ID 更改为应用程序密钥,还尝试了 Rest、JS 和 Rest-JS 身份验证凭据,但它不起作用。我不知道下一步该怎么做,因为在设备上测试没有错误,对此 API.
没有任何反应index.html
<script
src="https://js.api.here.com/v3/3.0/mapsjs-core.js"
type="text/javascript"
charset="utf-8"
></script>
<script
src="https://js.api.here.com/v3/3.0/mapsjs-service.js"
type="text/javascript"
charset="utf-8"
></script>
<script
src="https://js.api.here.com/v3/3.0/mapsjs-places.js"
type="text/javascript"
charset="UTF-8"
></script>
搜索服务
public async searchLocation(search): Promise<any> {
var platform = new H.service.Platform({
app_id: "my-id",
app_code: "my-code",
});
var searchParams = {
q: search,
in: "-180,-90,180,90"
};
return this.startSearch(platform, searchParams);
}
public async startSearch(platform: any, searchParams: object): Promise<any> {
return new Promise((resolve, reject) => {
var search = new H.places.Search(platform.getPlacesService());
const self = this;
search.request(
searchParams,
{},
function onResult(data: any) {
self.Result = data.results.items;
resolve(self.Result);
},
function onError(error: any) {
console.log("HERE search error", error);
reject(error);
}
);
});
}
编辑 - 错误日志
E/Capacitor/Console: File: http://localhost/vendor-es2015.js - Line 43427 - Msg: ERROR Error: Uncaught (in promise): Error: [timeout] http://places.api.here.com/places/v1/discover/explore?xnlp=CL_JSMv3.0.17.0&app_id=--myID--&app_code=--myCode--&in=49.9949556%2C10.1767104%3Br%3D10000&size=100 request failed
Error: [timeout] http://places.api.here.com/places/v1/discover/explore?xnlp=CL_JSMv3.0.17.0&app_id=--myID--&app_code=--myCode--&in=479.9949556%2C10.1767104%3Br%3D10000&size=100 request failed
at Object.Zc (eval at <anonymous> (https://js.api.here.com/v3/3.0/mapsjs-core.js:56:36), <anonymous>:11:176)
at b (eval at <anonymous> (https://js.api.here.com/v3/3.0/mapsjs-core.js:56:36), <anonymous>:9:440)
at eval (eval at <anonymous> (https://js.api.here.com/v3/3.0/mapsjs-core.js:56:36), <anonymous>:10:43)
at ZoneDelegate.invokeTask (http://localhost/polyfills-es2015.js:3741:31)
at Object.onInvokeTask (http://localhost/vendor-es2015.js:73280:33)
at ZoneDelegate.invokeTask (http://localhost/polyfills-es2015.js:3740:60)
at Zone.runTask (http://localhost/polyfills-es2015.js:3518:47)
at invokeTask (http://localhost/polyfills-es2015.js:3815:34)
at ZoneTask.invoke (http://localhost/polyfills-es2015.js:3804:48)
已修复:
谢谢@Raymond,我用另一种方式修复了用例。 而不是我的 API 调用我的问题,我将它更改为 httpClient 的 URL 请求。
public async searchLocation(search): Promise<any> {
const BASE_NOMINATIM_URL = "nominatim.openstreetmap.org";
const DEFAULT_VIEW_BOX = "-25.0000%2C70.0000%2C50.0000%2C40.0000";
const url = `https://${BASE_NOMINATIM_URL}/search?format=json&q=${search}&${DEFAULT_VIEW_BOX}&bounded=1`;
return this.http.get(url).subscribe((ans) => {
console.log("data", ans);
});
}
我不知道为什么我的问题里面的方法不起作用。但是 URL 方法有效。