I got the problem like this : i connected with app blynk but it updated the state of button " on then off" automatically even when i had not push the button

#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#define RELAY_PIN  D1

#define BUTTON_PIN  D0
char auth[] = "wp37RZgcxF07wFB9u_yf4_GbtffsdPIC";
char ssid[] = "Đăng Anh";
char pass[] = "1234567890";
WidgetLED connectled(V0);
 BlynkTimer timer;
 void work(){
 if( connectled.getValue())
 {
  connectled.off(); 
  }
  else
  {
    connectled.on();
 
    }}
boolean socketState = 0;
void setup() {
  Serial.begin(9600);
  pinMode(BUTTON_PIN, INPUT);
  pinMode(RELAY_PIN, OUTPUT);
 
  Blynk.begin(auth, ssid, pass);
  delay(1000);
   timer.setInterval(1000L,work);
}
// Hàm này sẽ được gọi mỗi khi widget nút nhấn trên phần mềm Blynk được nhấn
// và gửi lệnh bật tắt vào Virtual Pin V1
BLYNK_WRITE(V1)
{
  int pinValue = param.asInt();
  // Tùy vào lệnh nhận được ta thay đổi trạng thái bật tắt của ổ cắm
  if (pinValue == 1)
   { socketState = true;
   Serial.println("ok");}
  else
    socketState = false;
}
void loop() {
  Blynk.run();
  timer.run();
  if (digitalRead(BUTTON_PIN) == HIGH) {
   
    // Nút được nhấn, đảo trạng thái của ổ cắm điện
    socketState = !socketState;
    // cập nhật lên phần mềm Blynk
   Blynk.virtualWrite(V1, socketState);
    delay(200);
  }
  // bật tắt relay tùy vào trạng thái của biến socketState
  if (socketState) {
    digitalWrite(RELAY_PIN, HIGH);
    Serial.println(" sang");
  } else {
    digitalWrite(RELAY_PIN, LOW);
   Serial.println(" tat");
  } 
}

@Sayashi_Otogoshi please edit your post, using the pencil icon at the bottom, and add triple backticks at the beginning and end of your code so that it displays correctly.
Triple backticks look like this:
```

Pete.

Maybe you’ll have to tell us exactly what you want to accomplish. Also search “clean void loop” on this forum. Everything below timer.run() should be either polled in a timed function or put into interrupt function with some denounce code. I think your issue might be the switch setting in the app. In button mode it sends a 1 when you press and a 0 when you release. Try switch mode.