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