Phonegap Build: белый список доменов Google для 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 для карт Google src)
  • Маркеры вообще не отображались

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

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

EDIT: Я понимаю, что с помощью *.googleapis.com я бы также включил оставшиеся белые списки, похожие. Однако я несколько раз заметил в своих поисках, что iOS требует, чтобы домены отображались явно. Хотя на данный момент это может быть неприменимо, я намереваюсь, чтобы это приложение использовалось на iOS, поэтому я его оставил (если кто-то не может сказать мне, что он совершенно бесполезен и не нужен; -).

////////UPDATE 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"/>

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

////////UPDATE 2/ANSWER////////

После долгих экспериментов я нашел ответ. Похоже, вы должны быть очень конкретными в том, как вы пишете теги в файле 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. Может быть, кто-то может помочь просветить меня, если они так себя чувствуют?

Ответ 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" />