Socketio не работает при тестировании Android, созданном с помощью React-native ExpoAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Socketio не работает при тестировании Android, созданном с помощью React-native Expo

Сообщение Anonymous »

Я работаю над приложением для Android с использованием React-native и Expo, я создал свой AAB с помощью Expo и опубликовал его в магазине Google Play для внутреннего тестирования Android, все работает нормально, кроме моего сокета. но когда я настраиваю свой локальный/разрабатывающий механизм реагирования на получение данных из бэкэнда/API в производстве (локальный интерфейс делает запрос на производственный бэкэнд), сокетио работает отлично, но когда я публикую интерфейс в Google для внутреннего тестирования, сокет не работает работает неправильно, когда я делаю запрос, вместо отображения данных на экране отображается пустой белый экран.
my app.json

Код: Выделить всё

  "expo": {
"name": "isioma3",
"slug": "isioma3",
"version": "1.0.0",
"orientation": "portrait",
"icon": "./assets/icon.png",
"userInterfaceStyle": "light",
"newArchEnabled": true,
"android": {
"adaptiveIcon": {
"foregroundImage": "./assets/adaptive-icon.png",
"backgroundColor": "#ffffff"
},
"package": "com.kingsola",
"permissions": ["INTERNET", "ACCESS_NETWORK_STATE"],
"softwareKeyboardLayoutMode": "pan",
"allowBackup": true,
"config": {
"useCleartextTraffic": true
}
},
"ios": {
"supportsTablet": true
},
"plugins": [
[
"expo-splash-screen",
{
"backgroundColor": "#2D3A44",
"image": "./assets/icon.png",
"imageWidth": 200
}
]
],
"extra": {
"development": {
"apiBaseUrl": "https://myapp.fly.dev",
"REACT_APP_GOOGLE_MAPS_API_KEY": "",
"APP_ENV": "development",
"easBuildProfile": "development"
},
"preview": {
"apiBaseUrl": "https://myapp.fly.dev",
"REACT_APP_GOOGLE_MAPS_API_KEY": "",
"APP_ENV": "preview",
"easBuildProfile": "preview"
},
"production": {
"apiBaseUrl": "https://myapp.fly.dev",
"REACT_APP_GOOGLE_MAPS_API_KEY": "",
"APP_ENV": "production",
"easBuildProfile": "production"
},
"eas": {
"projectId": ""
}
},
"owner": "kings"
}
}
мой eas.json

Код: Выделить всё

  "cli": {
"version": ">= 13.2.3",
"appVersionSource": "remote"
},
"build": {
"development": {
"developmentClient": true,
"distribution": "internal",
"android": {
"buildType": "apk",
"gradleCommand": ":app:assembleDebug"
}
},
"preview": {
"distribution": "internal",
"android": {
"buildType": "apk",
"gradleCommand": ":app:assembleRelease"
}
},
"production": {
"autoIncrement": true,
"android": {
"buildType": "app-bundle",
"gradleCommand": ":app:bundleRelease"
}
}
},
"submit": {
"production": {
"android": {
"track": "internal",
"releaseStatus": "completed"
}
}
}
}
Настройка интерфейса Socketio в моем приложении

Код: Выделить всё

    if (!visible || !booking?.bookingId || !userId) {
return;
}

isMounted.current = true;  // Set isMounted to true when the modal is visible

console.log("UserBookingModal useEffect triggered with:", {
visible,
bookingId: booking?.bookingId,
userId: userId,
});

console.log("\n-----INITIALIZING SOCKET IN USERBOOKINGMODAL-----");
console.log("Booking details:", {
bookingId: booking.bookingId,
userId: userId,
status: booking.status,
});

// Clean up existing socket if any
if (socketRef.current) {
console.log("Cleaning up existing socket connection");
socketRef.current.disconnect();
}

socketRef.current = io(apiBaseUrl, {
transports: ["websocket"],
reconnection: true,
reconnectionDelay: 1000,
reconnectionDelayMax: 5000,
reconnectionAttempts: 5,
extraHeaders: {
"x-mobile-app": "true",
},
});

socketRef.current.on("connect", () => {
console.log(
"Socket connected successfully with ID:",
socketRef.current.id
);

// Authenticate and join rooms
socketRef.current.emit("authenticate", {
userId: userId,
userType: "customer",
});

socketRef.current.emit("joinBookingRoom", booking.bookingId);

console.log("In the user: Joined rooms for:", {
userRoom: `user_${userId}`,
bookingRoom: `booking_${booking.bookingId}`,
});
});

const handleSocketErrors = () => {
socketRef.current.on("connect_error", (error) => {
console.error("Socket connection error:", error);
showNotification("Connection error. Please try again.", "error");
});

socketRef.current.on("error", (error) => {
console.error("Socket error:", error);
showNotification("An error occurred. Please try again.", "error");
});

socketRef.current.on("reconnect", (attempt) => {
console.log("Socket reconnected on attempt:", attempt);
if (booking?.bookingId) {
socketRef.current.emit("joinBookingRoom", booking.bookingId);
}
});
};
всякий раз, когда я делаю бронирование, вместо данных для отображения на экране отображается белый пустой экран, он отлично работает на локальном компьютере, и если локальный интерфейс отправляет запрос на производственный сервер, он также работает нормально, проблема возникает только тогда, когда приложение Android при внутреннем тестировании Google отправляет запрос на производственный сервер.
есть ли что-то, что я здесь делаю неправильно?

Подробнее здесь: https://stackoverflow.com/questions/792 ... ative-expo
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»