Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Entwicklung
  4. [Gelöst] Android-App: Wie baue ich Socketverbindung zur Cloud.pro mit Java auf

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.4k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.0k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.6k

[Gelöst] Android-App: Wie baue ich Socketverbindung zur Cloud.pro mit Java auf

Geplant Angeheftet Gesperrt Verschoben Entwicklung
12 Beiträge 2 Kommentatoren 1.2k Aufrufe
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • ? Offline
    ? Offline
    Ein ehemaliger Benutzer
    schrieb am zuletzt editiert von
    #3

    UseCase ist eine native Android App.

    Ich bin schon schon dabei mir die conn.js aus ioBroker.vis.cordova anzusehen.

    Komme da auch weiter, wollte nur in die Runde Fragen ob das schon jemand am Laufen hat.

    Falls es die Tage bei mir läuft, stell ich die Lösung gerne hier bereit.

    1 Antwort Letzte Antwort
    0
    • BluefoxB Offline
      BluefoxB Offline
      Bluefox
      schrieb am zuletzt editiert von
      #4

      Und falls nicht läuft, frage hier noch mal :)

      1 Antwort Letzte Antwort
      0
      • ? Offline
        ? Offline
        Ein ehemaliger Benutzer
        schrieb am zuletzt editiert von
        #5

        Komme nicht wirklich weiter…

        Zu welcher Url muss ich die Socketverbindung aufbauen?

        mSocket = IO.socket("https://iobroker.pro/");

        Muss ich den Port 8084 mit angeben?

        Wie gebe ich username und password an?

        Scheinbar gibt es diverse Möglichkeiten: Cookie, Url, mSocket.emit("authenticate"), ...

        Falls hilfreich hier meine MainActivity:

        package com.example.nagel.sockettest;
        
        import android.os.Bundle;
        import android.support.v7.app.AppCompatActivity;
        import android.util.Log;
        
        import java.net.URISyntaxException;
        import java.security.KeyManagementException;
        import java.security.NoSuchAlgorithmException;
        import java.security.cert.CertificateException;
        import java.security.cert.X509Certificate;
        
        import javax.net.ssl.HostnameVerifier;
        import javax.net.ssl.SSLContext;
        import javax.net.ssl.SSLSession;
        import javax.net.ssl.TrustManager;
        import javax.net.ssl.X509TrustManager;
        
        import io.socket.client.Ack;
        import io.socket.client.IO;
        import io.socket.client.Socket;
        import io.socket.emitter.Emitter;
        
        import static android.content.ContentValues.TAG;
        
        public class MainActivity extends AppCompatActivity {
            private Socket mSocket;
        
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
                IO.Options opts;
        
                SSLContext mySSLContext = null;
                try {
                    mySSLContext = SSLContext.getInstance("TLS");
                } catch (NoSuchAlgorithmException e) {
                    e.printStackTrace();
                }
                TrustManager[] trustAllCerts= new TrustManager[] { new X509TrustManager() {
                    public X509Certificate[] getAcceptedIssuers() {
                        return new X509Certificate[] {};
                    }
        
                    public void checkClientTrusted(X509Certificate[] chain,
                                                   String authType) throws CertificateException {
                    }
        
                    public void checkServerTrusted(X509Certificate[] chain,
                                                   String authType) throws CertificateException {
                    }
                } };
        
                try {
                    mySSLContext.init(null, trustAllCerts, null);
                } catch (KeyManagementException e) {
                    e.printStackTrace();
                }
        
                HostnameVerifier myHostnameVerifier = new HostnameVerifier() {
                    @Override
                    public boolean verify(String hostname, SSLSession session) {
                        return true;
                    }
                };
        
                opts = new IO.Options();
                opts.sslContext = mySSLContext;
                opts.hostnameVerifier = myHostnameVerifier;
                opts.secure = true;
                opts.forceNew = true;
                //opts.port = 8084;
        
                try {
                    mSocket = IO.socket("https://iobroker.pro/", opts);
                    mSocket.on(Socket.EVENT_CONNECT, onConnect);
                    mSocket.on(Socket.EVENT_CONNECTING, onConnecting);
                    mSocket.on(Socket.EVENT_DISCONNECT,onDisconnect);
                    mSocket.on(Socket.EVENT_CONNECT_ERROR, onConnectError);
                    mSocket.on(Socket.EVENT_CONNECT_TIMEOUT, onConnectError);
                    mSocket.on("unauthorized", onConnectError);
                    mSocket.on("authenticated", onConnectError);
                    mSocket.on("error", onConnectError);
                    mSocket.on("stateChange", onStateChange);
        
                } catch (URISyntaxException e) {
                    throw new RuntimeException(e);
                }
                mSocket.connect();
            }
        
            @Override
            public void onDestroy() {
                super.onDestroy();
                mSocket.disconnect();
            }
        
            private Emitter.Listener onConnect = new Emitter.Listener() {
                @Override
                public void call(Object... args) {
                    /*mSocket.emit("name", "socket.io", new Ack() {
                        @Override
                        public void call(Object... args) {
                            Log.i(TAG,"name");
                        }
                    });*/
                    mSocket.emit("authentication","{username: \"John\", password: \"secret\"}", new Ack() {
                        @Override
                        public void call(Object... args) {
                            Log.i(TAG,"authentication");
                        }
                    });
                    mSocket.emit("authenticate", new Ack() {
                        @Override
                        public void call(Object... args) {
                            Log.i(TAG,"authenticate");
                        }
                    });
                    Log.i(TAG, "onConnect:" + args.toString());
                }
            };
        
            private Emitter.Listener onConnecting = new Emitter.Listener() {
                @Override
                public void call(Object... args) {
                    Log.i(TAG, "onConnecting");
                }
            };
        
            private Emitter.Listener onDisconnect = new Emitter.Listener() {
                @Override
                public void call(Object... args) {
                    Log.i(TAG, "onDisconnected");
                }
            };
        
            private Emitter.Listener onConnectError = new Emitter.Listener() {
                @Override
                public void call(Object... args) {
                    Log.i(TAG, "onConnectError:" + args[0].toString());
                }
            };
        
            private Emitter.Listener onStateChange = new Emitter.Listener() {
                @Override
                public void call(final Object... args) {
                    Log.i(TAG,"onStateChange:" + args[0].toString());
                }
            };
        }
        
        
        1 Antwort Letzte Antwort
        0
        • ? Offline
          ? Offline
          Ein ehemaliger Benutzer
          schrieb am zuletzt editiert von
          #6

          ich benutze als dependency:

          implementation('io.socket:socket.io-client:1.0.0')
          

          Und auch hiermit habe ich es bereits versucht ohne Erfolg:

          ...
          
                 OkHttpClient okHttpClient = new OkHttpClient.Builder()
                          .hostnameVerifier(myHostnameVerifier)
                          .sslSocketFactory(mySSLContext.getSocketFactory(), (X509TrustManager) trustAllCerts[0])
                          .build();
          
          // default settings for all sockets
                  IO.setDefaultOkHttpWebSocketFactory(okHttpClient);
                  IO.setDefaultOkHttpCallFactory(okHttpClient);
          
          // set as an option
                  opts = new IO.Options();
                  opts.callFactory = okHttpClient;
                  opts.webSocketFactory = okHttpClient;
          
                  ...
          

          Weitere Erkenntnis:

          Die Angabe des Ports in der Url ("https://iobroker.pro:8084/") führt zu Timeouts während des mSocket.connect()

          1 Antwort Letzte Antwort
          0
          • BluefoxB Offline
            BluefoxB Offline
            Bluefox
            schrieb am zuletzt editiert von
            #7

            Wenn ich an deiner Stelle währe, würde ich erst hier:

            [Authenticate sich:]

            https://github.com/ioBroker/ioBroker.vi … pp.js#L656

            und danach hier

            [<link_text text="https://github.com/ioBroker/ioBroker.vi ... pp.js#L732">https://github.com/ioBroker/ioBroker.vis.cordova/blob/master/app.js#L732</link_text>
            und hier
            [Credentials for socket.io]
            https://github.com/ioBroker/ioBroker.vi ... pp.js#L737
            schauen](<br/>
            <URL url=)[" target="_blank">

            https://github.com/ioBroker/ioBroker.vi … pp.js#L732

            und hier

            [Credentials for socket.io]

            https://github.com/ioBroker/ioBroker.vi … pp.js#L737

            schauen](<br/>
            <URL url=)

            1 Antwort Letzte Antwort
            0
            • ? Offline
              ? Offline
              Ein ehemaliger Benutzer
              schrieb am zuletzt editiert von
              #8

              @Bluefox:

              Wenn ich an deiner Stelle währe, würde ich erst hier:

              [Authenticate sich:]

              https://github.com/ioBroker/ioBroker.vi … pp.js#L656

              und danach hier

              [<link_text text="https://github.com/ioBroker/ioBroker.vi ... pp.js#L732">https://github.com/ioBroker/ioBroker.vis.cordova/blob/master/app.js#L732</link_text>
              und hier
              [Credentials for socket.io]
              https://github.com/ioBroker/ioBroker.vi ... pp.js#L737
              schauenPerfekt. So mach ich weiter.

              Kann ich die app.js irgendwie debuggen?

              Gesendet von meinem Pixel 2 mit Tapatalk

              " target="_blank">

              https://github.com/ioBroker/ioBroker.vi … pp.js#L732

              und hier

              [Credentials for socket.io]

              https://github.com/ioBroker/ioBroker.vi … pp.js#L737

              schauenPerfekt. So mach ich weiter.

              Kann ich die app.js irgendwie debuggen?

              Gesendet von meinem Pixel 2 mit Tapatalk](<br/>
              <URL url=) `

              1 Antwort Letzte Antwort
              0
              • BluefoxB Offline
                BluefoxB Offline
                Bluefox
                schrieb am zuletzt editiert von
                #9

                https://developers.google.com/web/tools … debugging/

                http://download.iobroker.net/android-debug.apk

                1 Antwort Letzte Antwort
                0
                • ? Offline
                  ? Offline
                  Ein ehemaliger Benutzer
                  schrieb am zuletzt editiert von
                  #10

                  Das debuggen der app.js hat wunderbar geklappt.

                  Nun muss ich die Werte nur noch korrekt in die Socketvebindung einbauen.

                  Ich denke die Schwierigkeit liegt noch bei der Authentikation mit Cookie.

                  Url habe ich folgende:````
                  https://iobroker.pro/?key=nokey&user=my.email%40gmail.com&pass=totalgeheim

                  
                  Den generellen Aufbau habe ich hier entnommen: [https://github.com/socketio/socket.io-client-java](https://github.com/socketio/socket.io-client-java)
                  
                  Und hier die aktuelle MainActivity:
                  

                  package com.example.nagel.sockettest;

                  import android.os.Bundle;
                  import android.support.v7.app.AppCompatActivity;
                  import android.util.Log;

                  import java.net.URISyntaxException;
                  import java.security.KeyManagementException;
                  import java.security.NoSuchAlgorithmException;
                  import java.security.cert.CertificateException;
                  import java.security.cert.X509Certificate;
                  import java.util.Arrays;
                  import java.util.List;
                  import java.util.Map;

                  import javax.net.ssl.HostnameVerifier;
                  import javax.net.ssl.SSLContext;
                  import javax.net.ssl.SSLSession;
                  import javax.net.ssl.TrustManager;
                  import javax.net.ssl.X509TrustManager;

                  import io.socket.client.Ack;
                  import io.socket.client.IO;
                  import io.socket.client.Manager;
                  import io.socket.client.Socket;
                  import io.socket.emitter.Emitter;
                  import io.socket.engineio.client.Transport;
                  import okhttp3.OkHttpClient;

                  import static android.content.ContentValues.TAG;

                  public class MainActivity extends AppCompatActivity {
                  private Socket mSocket;
                  private OkHttpClient okHttpClient;
                  private String url = "https://iobroker.pro/?key=nokey&user=my.email%40gmail.com&pass=totalgeheim";
                  private String cookie = "username=my.email@gmail.com;password=totalgeheim";

                  @Override
                  protected void onCreate(Bundle savedInstanceState) {
                      super.onCreate(savedInstanceState);
                      setContentView(R.layout.activity_main);
                  
                      getHttpClient();
                  
                      IO.Options opts;
                      opts = new IO.Options();
                      opts.callFactory = okHttpClient;
                      opts.webSocketFactory = okHttpClient;
                      opts.upgrade = true;
                      opts.reconnection = false;
                      opts.forceNew = true;
                  
                      try {
                          mSocket = IO.socket(url);
                          mSocket.io().on(Manager.EVENT_TRANSPORT, onTransport);
                          mSocket.on(Socket.EVENT_CONNECT, onConnect);
                          mSocket.on(Socket.EVENT_DISCONNECT,onDisconnect);
                          mSocket.on(Socket.EVENT_CONNECT_ERROR, onConnectError);
                          mSocket.on(Socket.EVENT_CONNECT_TIMEOUT, onConnectError);
                  
                      } catch (URISyntaxException e) {
                          throw new RuntimeException(e);
                      }
                      mSocket.connect();
                  }
                  
                  private void getHttpClient() {
                      SSLContext mySSLContext = null;
                      try {
                          mySSLContext = SSLContext.getInstance("TLS");
                      } catch (NoSuchAlgorithmException e) {
                          e.printStackTrace();
                      }
                      TrustManager[] trustAllCerts= new TrustManager[] { new X509TrustManager() {
                          public X509Certificate[] getAcceptedIssuers() {
                              return new X509Certificate[] {};
                          }
                  
                          public void checkClientTrusted(X509Certificate[] chain,
                                                         String authType) throws CertificateException {
                          }
                  
                          public void checkServerTrusted(X509Certificate[] chain,
                                                         String authType) throws CertificateException {
                          }
                      } };
                  
                      try {
                          mySSLContext.init(null, trustAllCerts, null);
                      } catch (KeyManagementException e) {
                          e.printStackTrace();
                      }
                  
                      HostnameVerifier myHostnameVerifier = new HostnameVerifier() {
                          @Override
                          public boolean verify(String hostname, SSLSession session) {
                              return true;
                          }
                      };
                  
                      okHttpClient = new OkHttpClient.Builder()
                              .hostnameVerifier(myHostnameVerifier)
                              .sslSocketFactory(mySSLContext.getSocketFactory(), (X509TrustManager) trustAllCerts[0])
                              .build();
                  
                      IO.setDefaultOkHttpWebSocketFactory(okHttpClient);
                      IO.setDefaultOkHttpCallFactory(okHttpClient);
                  }
                  
                  private Emitter.Listener onConnect = new Emitter.Listener() {
                      @Override
                      public void call(Object... args) {
                          mSocket.emit("getState","javascript.0.vi_text", new Ack() {
                              @Override
                              public void call(Object... args) {
                                  Log.i(TAG,"getState");
                              }
                          });
                          Log.i(TAG, "onConnect:" + args.toString());
                      }
                  };
                  
                  private Emitter.Listener onTransport = new Emitter.Listener() {
                      @Override
                      public void call(Object... args) {
                          Transport transport = (Transport)args[0];
                  
                          transport.on(Transport.EVENT_REQUEST_HEADERS, new Emitter.Listener() {
                              @Override
                              public void call(Object... args) {
                                  @SuppressWarnings("unchecked")
                                  Map<string, list<string="">> headers = (Map<string, list<string="">>)args[0];
                                  // modify request headers
                                  headers.put("Cookie", Arrays.asList(cookie));
                              }
                          });
                  
                          transport.on(Transport.EVENT_RESPONSE_HEADERS, new Emitter.Listener() {
                              @Override
                              public void call(Object... args) {
                                  @SuppressWarnings("unchecked")
                                  Map<string, list<string="">> headers = (Map<string, list<string="">>)args[0];
                                  // access response headers
                                  //String cookie = headers.get("Set-Cookie").get(0);
                              }
                          });
                      }
                  };
                  
                  private Emitter.Listener onDisconnect = new Emitter.Listener() {
                      @Override
                      public void call(Object... args) {
                          Log.i(TAG, "onDisconnected");
                      }
                  };
                  
                  private Emitter.Listener onConnectError = new Emitter.Listener() {
                      @Override
                      public void call(Object... args) {
                          Log.i(TAG, "onConnectError:" + args[0].toString());
                      }
                  };
                  
                  @Override
                  public void onDestroy() {
                      super.onDestroy();
                      mSocket.disconnect();
                  }
                  

                  }</string,></string,></string,></string,>

                  1 Antwort Letzte Antwort
                  0
                  • ? Offline
                    ? Offline
                    Ein ehemaliger Benutzer
                    schrieb am zuletzt editiert von
                    #11

                    Ich habe einen kleinen Fortschritt erreicht.

                    Mittlerweile habe ich das Socket connected.

                    Nun bekomme ich jedoch keine Antworten auf die Anfragen…

                    Jemand noch eine Idee woran es liegen könnte?!?

                    Sobald der Connect des Socket erfolgreich ist, versuche ich States abzufragen:

                    mSocket.emit("getStates", "javascript.0.*", ...
                    

                    Hier der gesamte Code der MainActivity Klasse:

                    package com.example.nagel.sockettest;
                    
                    import android.os.Bundle;
                    import android.support.v7.app.AppCompatActivity;
                    import android.util.Log;
                    
                    import java.net.URISyntaxException;
                    import java.util.List;
                    import java.util.Map;
                    
                    import io.socket.client.Ack;
                    import io.socket.client.IO;
                    import io.socket.client.Manager;
                    import io.socket.client.Socket;
                    import io.socket.emitter.Emitter;
                    import io.socket.engineio.client.Transport;
                    import io.socket.engineio.client.transports.WebSocket;
                    
                    import static android.content.ContentValues.TAG;
                    
                    public class MainActivity extends AppCompatActivity {
                        private Socket mSocket;
                        private IO.Options opts;
                        private final String url = "https://iobroker.pro/?key=nokey&user=max.mustermann%40gmail.com&pass=geheim";
                    
                        @Override
                        protected void onCreate(Bundle savedInstanceState) {
                            super.onCreate(savedInstanceState);
                            setContentView(R.layout.activity_main);
                    
                            createIoOptions();
                    
                            createSocket();
                    
                            mSocket.connect();
                        }
                    
                        private void createSocket() {
                            try {
                                mSocket = IO.socket(url, opts);
                                mSocket.io().on(Manager.EVENT_TRANSPORT, onTransport);
                                mSocket.on(Socket.EVENT_CONNECT, onConnect);
                                mSocket.on(Socket.EVENT_DISCONNECT, onDisconnect);
                                mSocket.on(Socket.EVENT_CONNECT_ERROR, onConnectError);
                                mSocket.on(Socket.EVENT_CONNECT_TIMEOUT, onConnectError);
                    
                            } catch (URISyntaxException e) {
                                throw new RuntimeException(e);
                            }
                        }
                    
                        private void createIoOptions() {
                            opts = new IO.Options();
                            opts.upgrade = true;
                            opts.reconnection = true;
                            opts.forceNew = true;
                            opts.transports = new String[]{WebSocket.NAME};
                        }
                    
                        private Emitter.Listener onConnect = new Emitter.Listener() {
                            @Override
                            public void call(Object... args) {
                                mSocket.emit("getStates", "javascript.0.*", new Ack() {
                                    @Override
                                    public void call(Object... args) {
                                        Log.i(TAG, "getState");
                                    }
                                });
                                Log.i(TAG, "onConnect:" + args.toString());
                            }
                        };
                    
                    //nur zum debuggen eingebaut
                        private Emitter.Listener onTransport = new Emitter.Listener() {
                            @Override
                            public void call(Object... args) {
                                Transport transport = (Transport) args[0];
                    
                                transport.on(Transport.EVENT_REQUEST_HEADERS, new Emitter.Listener() {
                                    @Override
                                    public void call(Object... args) {
                                        @SuppressWarnings("unchecked")
                                        Map<string, list<string="">> headers = (Map<string, list<string="">>) args[0];
                                    }
                                });
                    
                                transport.on(Transport.EVENT_RESPONSE_HEADERS, new Emitter.Listener() {
                                    @Override
                                    public void call(Object... args) {
                                        if (args[0] != null) {
                                            Map<string, list<string="">> headers = (Map<string, list<string="">>) args[0];
                                        }
                                    }
                                });
                            }
                        };
                    
                        private Emitter.Listener onDisconnect = new Emitter.Listener() {
                            @Override
                            public void call(Object... args) {
                                Log.i(TAG, "onDisconnected");
                            }
                        };
                    
                        private Emitter.Listener onConnectError = new Emitter.Listener() {
                            @Override
                            public void call(Object... args) {
                                Log.i(TAG, "onConnectError:" + args[0].toString());
                            }
                        };
                    
                        @Override
                        public void onDestroy() {
                            super.onDestroy();
                            mSocket.disconnect();
                        }
                    
                    }</string,></string,></string,></string,> 
                    
                    1 Antwort Letzte Antwort
                    1
                    • ? Offline
                      ? Offline
                      Ein ehemaliger Benutzer
                      schrieb am zuletzt editiert von
                      #12

                      Problem ist gelöst.

                      Das Ergebnis ist hier zu sehen:

                      viewtopic.php?f=36&t=14919

                      1 Antwort Letzte Antwort
                      0
                      Antworten
                      • In einem neuen Thema antworten
                      Anmelden zum Antworten
                      • Älteste zuerst
                      • Neuste zuerst
                      • Meiste Stimmen


                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      871

                      Online

                      32.4k

                      Benutzer

                      81.4k

                      Themen

                      1.3m

                      Beiträge
                      Community
                      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                      ioBroker Community 2014-2025
                      logo
                      • Anmelden

                      • Du hast noch kein Konto? Registrieren

                      • Anmelden oder registrieren, um zu suchen
                      • Erster Beitrag
                        Letzter Beitrag
                      0
                      • Home
                      • Aktuell
                      • Tags
                      • Ungelesen 0
                      • Kategorien
                      • Unreplied
                      • Beliebt
                      • GitHub
                      • Docu
                      • Hilfe