diff --git a/lib/components/farcaster-data-handler.react.js b/lib/components/farcaster-data-handler.react.js
new file mode 100644
--- /dev/null
+++ b/lib/components/farcaster-data-handler.react.js
@@ -0,0 +1,26 @@
+// @flow
+
+import * as React from 'react';
+
+import { useSelector } from '../utils/redux-utils.js';
+
+function FarcasterDataHandler(): React.Node {
+ const isActive = useSelector(state => state.lifecycleState !== 'background');
+
+ const prevIsActiveRef = React.useRef();
+ React.useEffect(() => {
+ if (isActive === prevIsActiveRef.current) {
+ return;
+ }
+ prevIsActiveRef.current = isActive;
+ if (!isActive) {
+ return;
+ }
+ // app either just started, or just became active
+ // we will fetch Farcaster data here
+ }, [isActive]);
+
+ return null;
+}
+
+export { FarcasterDataHandler };
diff --git a/native/root.react.js b/native/root.react.js
--- a/native/root.react.js
+++ b/native/root.react.js
@@ -26,6 +26,7 @@
import { ChatMentionContextProvider } from 'lib/components/chat-mention-provider.react.js';
import { EditUserAvatarProvider } from 'lib/components/edit-user-avatar-provider.react.js';
import { ENSCacheProvider } from 'lib/components/ens-cache-provider.react.js';
+import { FarcasterDataHandler } from 'lib/components/farcaster-data-handler.react.js';
import IntegrityHandler from 'lib/components/integrity-handler.react.js';
import KeyserverConnectionsHandler from 'lib/components/keyserver-connections-handler.js';
import { MediaCacheProvider } from 'lib/components/media-cache-provider.react.js';
@@ -343,6 +344,7 @@
+
{navigation}