Платформа Google Maps отклонила ваш запрос.Неверный параметр 'pb' - PullRequest
0 голосов
/ 30 января 2019

Я пытаюсь показать карту Google в веб-обозрении, но в ней говорится:

Платформа Google Maps отклонила ваш запрос.Неверный запрос.Неверный параметр 'pb'.

Но когда я отображаю тот же iframe в веб-браузере, он отлично работает

Вот то, что я пытаюсь отобразить в веб-представлении, этострока, хранящаяся в переменной iframeData

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html>
    <body>
        <iframe src="https://www.google.com/maps/embed?pb=!1m14!1m8!1m3!1d14988.154038971099!2d57.510438!3d-20.090677!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x0%3A0xc479c0ed4774c8e7!2sThe+Westin+Turtle+Bay+Resort+%26+Spa%2C+Mauritius!5e0!3m2!1sen!2smu!4v1513055435928" width="340.0" height="250" frameborder="0" style="border:0" allowfullscreen></iframe>
    </body>
</html>

И это мой код Android для рендеринга этого iframe в веб-просмотр

String iframeData = //look above

WebView webViewMap = (WebView) rootView.findViewById(R.id.webViewMap);
WebSettings settings = webViewMap.getSettings();
settings.setJavaScriptEnabled(true);
settings.setBuiltInZoomControls(true);
settings.setSupportZoom(false);
settings.setUseWideViewPort(false);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
    settings.setAllowUniversalAccessFromFileURLs(true);
}
settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
webViewMap.loadData(iframeData, "text/html", null);

Screenshot

Ответы [ 2 ]

0 голосов
/ 15 августа 2019

ПРАВИЛЬНЫЙ ОТВЕТ:

Кодируйте URL, используя URLEncoder.encode (...), чтобы экранировать символы и решить проблему.

String googleMapLink = "https://www.google.com/maps/embed?pb=!1m14!1m8!1m3!1d14988.154038971099!2d57.510438!3d-20.090677!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x0%3A0xc479c0ed4774c8e7!2sThe+Westin+Turtle+Bay+Resort+%26+Spa%2C+Mauritius!5e0!3m2!1sen!2smu!4v1513055435928";
String encodedUrl = null;
try {
    encodedUrl = URLEncoder.encode(googleMapLink,"UTF-8");
} catch (UnsupportedEncodingException e) {
    e.printStackTrace();
}

String iframe = "<iframe src=\""+ encodedUrl +"\" width=\"100%\" height=\"100%\" frameborder=\"0\" style=\"border:0\" allowfullscreen></iframe>";

googlemap_webView.getSettings().setJavaScriptEnabled(true);
googlemap_webView.loadData(iframe, "text/html", "utf-8");
0 голосов
/ 31 января 2019

URL внутри iframe в вашем примере выглядит как ссылка, полученная из общего ресурса на веб-сайте Google Maps.Обычно этот URL не следует рассматривать как продукт Google Maps Platform.Однако по какой-то причине Google рассматривает ее как платформу Google Maps в компоненте WebView.

Я думаю, что это ошибка на стороне Google.

Временное решение - заменить URL для общего доступа на URLот Google Maps Embed API .В этом случае у вас будет правильная ссылка на Google Maps Platform, и она должна работать как положено.Обратите внимание, что для использования Google Maps Embed API вам понадобится действительный ключ API.

Фрагмент кода:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html>
    <body>
      <iframe width="600" height="450" frameborder="0" style="border:0"
src="https://www.google.com/maps/embed/v1/place?q=The+Westin+Turtle+Bay+Resort+%26+Spa%2C+Mauritius&key=AIzaSyDztlrk_3CnzGHo7CFvLFqE_2bUKEq1JEU" allowfullscreen></iframe>
    </body>
</html>

Вы должны заменить мой ключ API своим.

Надеюсь, это поможет!

...