Google App Engine with Android - testing endpoints on real device

旧巷老猫 提交于 2019-11-29 04:38:42

Add the

--address="0.0.0.0" 

as the app engine server address parameter to accept from all incoming connections.

If you want to do this in Android Studio, set httpAddress as follows in your build.gradle

appengine {

  ...

  httpAddress = "0.0.0.0"
}

To accomplish this

  1. Put LOCAL_APP_ENGINE_SERVER_URL_FOR_ANDROID = your IP address (this is in your android App)
  2. Right click on App-Engine project -> Run-> Run Configurations -> Web Application(left bar) -> your app-engine project.

2.(Contniued) Go to Arugments -> add exactly like this

--address=0.0.0.0 --port=.......

*to get your ip address, go to cmd -> ipconfig -> add (IPV4 address with port number) in step 1

important note: Please change this everytime in case you are accessing internet from dongle or some dynamic IP internet service

Thankyou ... this works perfectly

There are many answers here but I've found them messy or uncomplete. To run the local server on your computer and test it with a real device do this:

1) Add httpAddress = "0.0.0.0" to the appengine block in your build.gradle file of the backend (Google Cloud Endpoint) module, like this:

appengine {
    ...
    httpAddress = "0.0.0.0"
}

According to a comment on the question this means that 'will accept from anywhere'.

2) Run your backend module locally (ie. start the web server). This is trivial: select the backend configuration on the drop-down menu and press the green button. You can find more detailed instructions here.

You should now be able to open a browser (on your computer) and navigate to http://localhost:8080/ and see a webpage with 'Hello, Endpoints!' and many other stuff.

3) Find your computer's IP address (on a Mac go to System Preferences -> Network) and then set it as the root url in your Android app code, like this:

MyApi.Builder builder = new MyApi.Builder(
                            AndroidHttp.newCompatibleTransport(),
                            new AndroidJsonFactory(), 
                            null
).setRootUrl("http://192.168.1.36:8080/_ah/api/")

That's all!

When locally testing Google cloud endpoints from none localhost address --address="0.0.0.0" setting might not be sufficient.

My Endpoints were giving 404 Not Found error when accessing from non localhost. I resolved it by including path parameter in API decoration.

My API annotation looked like this:

@ApiMethod(name="saveResponse", httpMethod = "post", path="saveResponse)
public Response saveResponse(@Named("answerString") String responseString)

Follow the 2. point post by user248187 2.(Contniued) Go to Arugments -> add exactly like this --address=0.0.0.0 --port=.......

Now, On the client android code you need change the request IP (RootURL) of your services to local IP. You can do that by use builder.setRootUrl(). It is good that you add a flat for outomatice it on you android client, then it can switch between local and deployed app-engiene quickly. Such as:

//........................

private boolean mFlatLocalHostServer=true;  
private static final String LOCAL_IP = "192.168.1.11"; //Ip debug server
public static final String  LOCAL_SERVER_IP = "http://"+LOCAL_IP+":8888/_ah/api";
//......................
Mydataendpoint.Builder builder = new Mydataendpoint.Builder(
                                AndroidHttp.newCompatibleTransport(),
                                new GsonFactory(),
                                        mCredential); 

//request the  service to local ip 
if(mFlatLocalHostServer){
         builder.setRootUrl(LOCAL_SERVER_IP); 
}

Mydataendpoint service =  builder.build();
response=service.insertMyData(mydata).execute(); 

Address 10.0.2.2 is for accessing localhost using the emulator, to access localhost using a real device, use the following steps

-open your commandline (cmd) run ipconfig. -Get the ipaddress of your computer and replace 10.0.2.2 with it, -Build and run on your device.

Hope this helps someone

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!