PDA

Volledige versie bekijken : Flex 2.0 en Google Maps security probleem


alain_raap
%Europe/Berlin %636 %2007, 16:16
Ik probeer in een Flex Applicatie de Geocode service van Google Maps aan te roepen en krijg een security error. Ik gebruik HttpService als aanroep naar de google maps site en geef
de parameters in een parameter object mee in de send methode van de service.
Ik heb de policy op de site zo ruim mogelijk gezet in crossdomain.xml, maar dit maakt ook niets uit. Vanuit een statische HTML pagina werkt het prima. Wat zou dit probleem op kunnen lossen?

De foutmelding is: faultCode:Channel.Security.Error faultString:'Security error accessing url' faultDetail:'Destination: DefaultHTTP'

Link van de applicatie (http://www.globalspotters.com/flex_gallery/GoogleMaps.html)

TheDutch
%Europe/Berlin %671 %2007, 17:07
Je hebt de crossdomain.xml op je eigen server neergezet, hij moet staan op de server van Google ;).

Dit is uiteraard niet mogelijk voor jou, dus moet je een andere weg bewandelen. Maak in PHP een proxy (lees: doorgeefluik) naar de Google Maps. Jij hebt toegang tot die PHP server dus kan je daar de crossdomain.xml neerzetten. Vervolgens laat je PHP de communicatie naar Google Maps doen want PHP mag dit namelijk wel zonder crossdomain security bestand, dat in tegenstelling tot de Flash Player.

alain_raap
%Europe/Berlin %749 %2007, 18:59
Ik heb een proxy via php gemaakt en krijg geen security error meer, het result wat ik via het event terug krijg, blijft echter leeg (null). In debug mode zie ik wel een object terugkomen met de data, maar het wordt niet goed opgehaald (ik zet het result object om naar XML). Direct via de browser aangeroepen krijg ik wel een XML resultaat terug :( .

TheDutch
%Europe/Berlin %268 %2007, 07:25
Geef eens een volledige(!) url van de proxy zodat wij kunnen zien wat voor data er wordt teruggegeven. Laat ook eens de code zien hoe je het aanroept in Flex :).

alain_raap
%Europe/Berlin %755 %2007, 19:08
Ik roep het script aan volgens deze url (http://www.globalspotters.com/flex_gallery/geomaps.php?query=amsterdam,nl), query bevat de string met het adres. Het resultaat wordt in XML (kml) formaat gegenereerd.

Dit is de aanroep:

public function callService() :void {
googleMapsService.url = serviceURL + "?query=" + adres.text;
googleMapsService.send();
}


Hier de definitie van de webservice:

<mx:HTTPService
id="googleMapsService"
contentType="application/x-www-form-urlencoded"
url="http://www.globalspotters.com/flex_gallery/geomaps.php"
method="POST"
resultFormat="xml"
result="googleResult(event);"
fault="googleFaultHandler(event);"
useProxy="false"
showBusyCursor="true" />

TheDutch
%Europe/Berlin %769 %2007, 19:27
Je gebruikt method "POST" maar verstuurt de variablen in de URL? Dat zou een method "GET" betekenen. Verstuur je variable of per "GET" of verstuur ze met een parameter object i.c.m. "POST" :).

alain_raap
%Europe/Berlin %814 %2007, 20:32
Ik verstuur ze als parameter in de aanroep met een POST. In het result zie ik wel een XMLDocument terugkomen met de juiste nodes, maar het XML object blijft leeg.
Ik heb zo de resultset gedeclareerd:
[Bindable]
private var googleMaps:XML;
// Define and use kml namespace
private namespace kml = "http://earth.google.com/kml/2.0";
use namespace kml;


Zo vang ik het resultaat op als resultaat van het result event:

googleMaps = event.result as XML;

TheDutch
%Europe/Berlin %862 %2007, 21:41
De XML van Google is niet juist (of jouw proxy zet er dingen bij):

Zie de laatste karakters (via deze (http://www.globalspotters.com/flex_gallery/geomaps.php?query=amsterdam,nl) link):

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://earth.google.com/kml/2.0">
<Response>
<name>amsterdam,nl</name>
<Status>
<code>200</code>
<request>geocode</request>
</Status>
<Placemark id="p1">
<address>Amsterdam (Noord-Holland), Netherlands</address>
<AddressDetails Accuracy="4" xmlns="urn:oasis:names:tc:ciq:xsdschema:xAL:2.0">
<Country>
<CountryNameCode>NL</CountryNameCode>
<AdministrativeArea>
<AdministrativeAreaName>Noord-Holland</AdministrativeAreaName>
<Locality>
<LocalityName>Amsterdam</LocalityName>
</Locality>
</AdministrativeArea>
</Country>
</AddressDetails>
<Point>
<coordinates>4.890951,52.373811,0</coordinates>
</Point>
</Placemark>
</Response>
</kml>
657

Die moet je er dus even vanaf snoepen vóór je het als XML object opslaat in een variable :).

alain_raap
%Europe/Berlin %592 %2007, 15:12
Het voorbeeld met de aanroep van de Google Maps API werkt nu en geeft het gewenste resultaat terug, zie link (http://www.globalspotters.com/flex_gallery/GoogleMaps.html) .