Сборка Phonegap: добавление доменов Google Map в белый список для API v3

У меня были некоторые проблемы с правильным отображением карт на двух реальных телефонах Android: один с 2.2.2, а другой с 4.2.2. Последнее всегда меня огорчало, когда дело касалось карт. Я разместил это в другом потоке здесь, поскольку я частично решил это.

Примечание. Я использую Phonegap Build с Dreamweaver CS6. Просто config.xml без XML-файла манифеста.

Теперь у меня есть другая проблема: мне нужно внести все домены в белый список, чтобы карта работала правильно на 4.2.2, и я не знаю, почему. Первоначально у меня было это в моем config.xml:

<access origin="*.googleapis.com" />
<access origin="*.gstatic.com" />
<access origin="*.google.com" />
<access origin="maps.googleapis.com" />
<access origin="maps.gstatic.com" />
<access origin="mt0.googleapis.com" />
<access origin="mt1.googleapis.com" />
<access origin="csi.gstatic.com" />

Хотя это отлично работало для Android 2.2.2, на 4.2.2 я получил следующие проблемы:

  • В нижней части карты отсутствует последний ряд плиток (если я использую HTTPS для src карт Google)
  • Маркеры вообще не отображались

Просто добавив все в белый список, все эти проблемы исчезли. Однако я не хочу заносить все в белый список, так что кто-нибудь знает, не упустил ли я что-то здесь?

Любая помощь высоко ценится.

РЕДАКТИРОВАТЬ: я понимаю, что, используя *.googleapis.com, я также охватывал бы оставшиеся домены белого списка, которые похожи. Однако я пару раз замечал в своих поисках, что iOS требует явного указания доменов. Хотя это может быть неприменимо здесь в данный момент, я намерен использовать это приложение на iOS, поэтому я оставил его (если только кто-то не скажет мне, что оно совершенно бесполезно и не нужно ;-).

//////// ОБНОВЛЕНИЕ 1 ////////

Пройдя через вкладку сети в инструментах разработчика Chrome, я извлек все URL-адреса, к которым обращаются карты Google. Явно указав каждый из них, все работает нормально, например:

    <access origin="https://mts.googleapis.com" subdomains="true"/>
    <access origin="https://mts0.googleapis.com" subdomains="true"/>
    <access origin="https://mts1.googleapis.com" subdomains="true"/>
    <access origin="https://maps.googleapis.com" subdomains="true"/>
    <access origin="https://fonts.googleapis.com" subdomains="true"/>
    <access origin="https://maps.gstatic.com" subdomains="true"/>
    <access origin="https://csi.gstatic.com" subdomains="true"/>
    <access origin="https://themes.googleusercontent.com" subdomains="true"/>

Они, вероятно, могут быть изменены, поэтому было бы хорошо, если бы я мог просто использовать подстановочный знак * перед каждым из доменов, но это не работает. Я пробовал оба следующих способа безуспешно:

    <access origin="*.googleapis.com" subdomains="true"/>
    <access origin="*.gstatic.com" subdomains="true"/>
    <access origin="*.googleusercontent.com" subdomains="true"/>


    <access origin="https://*.googleapis.com" subdomains="true"/>
    <access origin="https://*.gstatic.com" subdomains="true"/>
    <access origin="https://*.googleusercontent.com" subdomains="true"/>

У кого-нибудь есть идеи, почему я не могу использовать подстановочный знак в этих случаях? Ваше здоровье.

//////// ОБНОВЛЕНИЕ 2 / ОТВЕТ ////////

После долгих экспериментов я нашел ответ. Похоже, вы должны быть очень конкретными в том, как вы пишете теги в config.xml, особенно когда речь идет о разрешении поддоменов - очевидно, указание поддоменов не работает с подстановочными знаками, поэтому вам нужно два блока тегов. Наконец-то у меня оба устройства работают правильно, используя https, используя следующее:

    <access origin="*.google.com" />
    <access origin="*.googleapis.com" />
    <access origin="*.gstatic.com" />
    <access origin="*.googleusercontent.com" />
    <access origin="google.com" subdomains="true"/>
    <access origin="googleapis.com" subdomains="true"/>
    <access origin="gstatic.com" subdomains="true"/>
    <access origin="googleusercontent.com" subdomains="true"/>

Надеюсь, это будет кому-то полезно. Я до сих пор не понимаю, почему он нормально работал на старой версии Android. Может быть, кто-то может помочь просветить меня, если они так считают?


person Rusty    schedule 15.10.2013    source источник


Ответы (1)


Синтаксис внесения доменов в белый список изменился в версиях PhoneGap. Если вы используете версию 3.1 или более позднюю, см. синтаксис в этой документации: http://docs.phonegap.com/en/3.1.0/guide_appdev_whitelist_index.md.html. Я думаю, может быть, поэтому ваши подстановочные знаки не работали на вас.

Я использую следующее, и оно работает, чтобы показать мои Карты Google в моем приложении PhoneGap:

<access origin="*://*.googleapis.com/*" subdomains="true" />
<access origin="*://*.gstatic.com/*" subdomains="true" />
<access origin="*://*.google.com/*" subdomains="true" />
<access origin="*://*.googleusercontent.com/*" subdomains="true" />
person Matty J    schedule 19.12.2013