5

Pracuję nad aplikacją dla systemu Android, która używa Google Cloud Endpoints w Google App Engine (w języku Python). Aplikacja na Androida autoryzuje użytkownika korzystającego z Usług Google Play na urządzeniu z Androidem i wszystko działa fantastycznie.Testy lokalne dla aplikacji na Androida z wykorzystaniem Cloud Endpoints dla Google App Engine

Jednak teraz, gdy mam faktycznych użytkowników, chciałbym móc przetestować to wszystko lokalnie przed wdrożeniem jakichkolwiek zmian w API mechanizmu aplikacji do produkcji i nie mam pojęcia, jak rozmawiać z aplikacją na Androida mój lokalny serwer programistyczny w dowolnym miejscu. testing recommendations sugeruje, że po prostu wykonuję pewne ręczne majsterkowanie z Eksploratorem API, ale ponieważ używam Endpoints Proto Datastore dla mojego API, co czyni programowanie Android łatwym, czyni to API Explorerem w zasadzie bezużytecznym, ponieważ wywołania potrzebne do make są o wiele bardziej skomplikowane niż to, co mogę wygenerować ręcznie.

Jedna odpowiedź na this question sugeruje, że istnieje sposób na wskazanie klienta Android na lokalnym serwerze, ale podczas gdy mogę użyć argumentu --host, aby serwer domyślny dev_appserver słuchał na czymś innym niż localhost, mogę ". t wydaje się znaleźć sposób na to samo dla serwera API. I nawet jeśli mógłbym to zrobić, może to być tylko pierwszy krok do pełnej end-to-end lokalnej konfiguracji testowej dla mojej aplikacji na Androida.

Czy ktoś może zamieścić więcej informacji na temat tego, w jaki sposób mogę to zrobić, a może poza tym, proszę mnie poinformować o sprawdzonych metodach testowania aplikacji na Androida, które korzystają z Google Cloud Endpoints w App Engine? Z góry dziękuję za wszelkie odpowiedzi.

Odpowiedz

2

W środowisku lokalnym dev_appserver jest serwerem interfejsu API. Jeśli skonfigurowałeś go tak, aby był dostępny z komputerów innych niż localhost (tj. Inna maszyna/urządzenie w sieci), żądania API również powinny być dostępne.

Jednak obecnie jest dostępny serwer issue z lokalnym serwerem i gzippedami. Dopóki to nie rozwiąże problemu, musisz wyłączyć gzipowanie w bibliotece klienta w swojej aplikacji na Androida (patrz: post).

8

Dobra, w końcu udało się, dzięki za wskazówki, Dan! Oto pozostałe szczegóły, które zaoszczędziłyby mi kilka godzin - mam nadzieję, że jest to pomocne dla kogoś innego.

1) Jak się spodziewałem i wspomniałem wcześniej, dev_appserver.py musi być uruchomiony z --host = 0.0.0.0, aby mógł nasłuchiwać w sieci lokalnej.

2) Aby poprawnie przeanalizować token ID, aby uwierzytelnianie użytkownika działało, musisz mieć zainstalowaną bibliotekę PyCrypto - nie jest ona domyślnie instalowana, więc posiadanie jej tylko w pliku app.yaml jest niewystarczające . Znalazłem pliki binarne dla Windows here.

3) Następnie, w wygenerowanej przeze mnie klasie odpowiednika Tictactoe.java, musiałem zmienić DEFAULT_ROOT_URL na http://<my-local-machine>:8080/_ah/api/ (czyli tam, gdzie działa moja maszyna lokalna), aby żądania trafiały do ​​sieci lokalnej. Alternatywnie (i być może mniej inwazyjnie), możesz użyć builder.setRootUrl do tego samego adresu z miejsca, w którym zainicjowałeś swój program budujący. W ten sposób nie powlekasz z wygenerowanymi klasami.

4) Musiałem również wprowadzić zmianę opisaną przez Dana here.

Po wykonaniu tych czterech czynności wszystko wydaje się działać teraz i mogę przetestować aplikację lokalnie - hooray!

+0

dziękuję, uratowałem mój dzień! –

Powiązane problemy