Я использую expo-sms и expo-background-fetch code>.
Проблема в том, что обратный вызов фоновой выборки никогда не запускается.
Он регистрируется, но никогда не запускается.
Он регистрируется, но никогда не запускается.
p>
Что я делаю не так?
В app/_layout.tsx
Код: Выделить всё
const BACKGROUND_FETCH_TASK = 'background-fetch-sms';
// Prevent the splash screen from auto-hiding before asset loading is complete.
SplashScreen.preventAutoHideAsync();
// 1. Define the task by providing a name and the function that should be executed
// Note: This needs to be called in the global scope (e.g outside of your React components)
TaskManager.defineTask(BACKGROUND_FETCH_TASK, async () => {
try {
const { result } = await SMS.sendSMSAsync(“+1021230213”,”a sample message”);
return BackgroundFetch.BackgroundFetchResult.NewData;
} catch (err) {
console.log(err)
return BackgroundFetch.BackgroundFetchResult.Failed;
}
});
async function registerBackgroundFetchAsync() {
return BackgroundFetch.registerTaskAsync(BACKGROUND_FETCH_TASK, {
minimumInterval: 60 * 10, // 10 minutes
stopOnTerminate: false, // android only,
startOnBoot: true, // android only
});
}
export default function RootLayout() {
const [isRegistered, setIsRegistered] = useState(false);
useEffect(() => {
checkStatusAsync();
}, []);
const checkStatusAsync = async () => {
const status = await BackgroundFetch.getStatusAsync();
const isRegistered = await TaskManager.isTaskRegisteredAsync(BACKGROUND_FETCH_TASK);
console.log('Background fetch status:', status);
setStatus(status);
setIsRegistered(isRegistered);
};
useEffect(() => {
if (loaded) {
SplashScreen.hideAsync();
}
}, [loaded]);
useEffect(() => {
if (status === BackgroundFetch.BackgroundFetchStatus.Available && !isRegistered) {
registerBackgroundFetchAsync();
}
}, [status, isRegistered]);
useEffect(() => {
if(session?.user.id) {
AsyncStorage.setItem('userId', session.user.id);
}
}, [session]);
return (
)
}
Как вы думаете, что я делаю не так?
Подробнее здесь: https://stackoverflow.com/questions/790 ... on-android