Socket.io no funciona en Android 9 (nivel de la API 28)

Snark:

Recientemente quería obtener un control sobre la programación para Android. Mientras que estaba recibiendo a través de este tutorial: https://dev.to/medaymentn/creating-a-realtime-chat-app-with-android--nodejs-and-socketio-4o55 resultó que para Android 9 (nivel de la API 28) no podía conectar con el servidor local desde nodejs emulador de dispositivo Android. Si tan sólo cambiar todas las dependencias de construcción a utilizar niveles inferiores de la API (<= 27) se conecta correctamente. Por lo que he leído en los cambios de comportamiento para Android 9 No se sabe muy bien lo que podría causar tal cosa. Aquí está el código que es crítica, creo.

public class ChatBoxActivity extends AppCompatActivity {

    //declare socket object
    private Socket socket;

    public String Nickname;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_chat_box);

        // get the nickame of the user
        Nickname = (String) getIntent().getExtras().getString(MainActivity.NICKNAME);
        //connect you socket client to the server
        try {
            socket = IO.socket("http://192.168.2.106:3000");
            socket.connect();
            socket.emit("join", Nickname);
        } catch (URISyntaxException e) {
            e.printStackTrace();

        }
    }
}
Ramesh Yankati:

A partir de Android 9.0 (API nivel 28), el apoyo sin formato está desactivado por default.You puede ser que necesite habilitar para su URL de dominio. Más información se refiere este https://developer.android.com/training/articles/security-config#CleartextTrafficPermitted

Crear el archivo res / xml / network_security_config.xml -

 <?xml version="1.0" encoding="utf-8"?>
  <network-security-config>
    <domain-config cleartextTrafficPermitted="true">
    <domain includeSubdomains="true">Your URL</domain>
  </domain-config>
 </network-security-config>

Usted necesita dar referencia de este archivo en Android Manifiesto

     <?xml version="1.0" encoding="utf-8"?>
      <manifest ...>
        <uses-permission android:name="android.permission.INTERNET" />
       <application
         android:networkSecurityConfig="@xml/network_security_config"
          ...>
      </application>

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=176780&siteId=1
Recomendado
Clasificación