Ver código fonte

fix: 隐藏实名认证页面默认导航栏并更新APP端独立广告弹窗配置

zbb 2 dias atrás
pai
commit
93f4d44a8f
2 arquivos alterados com 28 adições e 31 exclusões
  1. 27 31
      app/(tabs)/box.tsx
  2. 1 0
      app/_layout.tsx

+ 27 - 31
app/(tabs)/box.tsx

@@ -1,15 +1,15 @@
 import { Barrage } from "@/components/Barrage";
 import { CouponModal } from "@/components/CouponModal";
-import { NewbieActivityModal } from "@/components/NewbieActivityModal";
+import { AdElement, SuperAdModal } from "@/components/SuperAdModal";
 import { Colors } from "@/constants/Colors";
 import { Images } from "@/constants/images";
-import { CouponItem, getNewbieGiftBagInfo, listValidCoupon } from "@/services/activity";
+import { CouponItem, listValidCoupon } from "@/services/activity";
 import { getFeedbackList, getPoolList, PoolItem } from "@/services/award";
+import { getPageConfig } from "@/services/base";
 import { getToken } from "@/services/http";
-import AsyncStorage from "@react-native-async-storage/async-storage";
 import { Image } from "expo-image";
 import { useFocusEffect, useRouter } from "expo-router";
-import React, { useCallback, useEffect, useMemo, useState } from "react";
+import React, { useCallback, useEffect, useMemo, useRef, useState } from "react";
 import {
     ActivityIndicator,
     Dimensions,
@@ -148,9 +148,9 @@ export default function BoxScreen() {
   // 新人优惠券弹窗
   const [couponVisible, setCouponVisible] = useState(false);
   const [couponList, setCouponList] = useState<CouponItem[]>([]);
-  const [newPeopleChecked, setNewPeopleChecked] = useState(false);
-  // 新人大礼包海报弹窗
-  const [activityVisible, setActivityVisible] = useState(false);
+  // 广告弹窗 (super_ad)
+  const [adElements, setAdElements] = useState<AdElement[]>([]);
+  const adShownRef = useRef(false);
 
   // 加载弹幕
   const loadBarrage = useCallback(async () => {
@@ -164,27 +164,21 @@ export default function BoxScreen() {
     }
   }, []);
 
-  // 新人大礼包检测(Vue: initNewPeople)—— 一个设备只弹一次
-  const initNewPeople = useCallback(async () => {
-    if (newPeopleChecked) return;
-    const token = getToken();
-    if (!token) return; // 未登录不检测
+  // 广告弹窗加载(Vue: App.vue onShow 加载 super_ad + pages/award/index.vue 展示)
+  // 每个 session (冷启动) 只展示一次
+  const initSuperAd = useCallback(async () => {
+    if (adShownRef.current) return;
     try {
-      const flag = await AsyncStorage.getItem("NEW_PEOPLE");
-      if (flag) {
-        setNewPeopleChecked(true);
-        return;
-      }
-      const data = await getNewbieGiftBagInfo();
-      if (data) {
-        setNewPeopleChecked(true);
-        setActivityVisible(true);
-        await AsyncStorage.setItem("NEW_PEOPLE", "1");
+      const config = await getPageConfig("super_ad_app");
+      const elements = (config?.components?.[0]?.elements || []) as AdElement[];
+      if (elements.length > 0) {
+        adShownRef.current = true;
+        setAdElements(elements);
       }
     } catch (e) {
       // 静默失败
     }
-  }, [newPeopleChecked]);
+  }, []);
 
   // 优惠券检测(Vue: initCoupon)
   const initCoupon = useCallback(async () => {
@@ -240,12 +234,12 @@ export default function BoxScreen() {
     loadBarrage();
   }, [typeIndex, priceSort]);
 
-  // 对齐 Vue onShow:每次页面获得焦点检查新人弹窗/优惠券
+  // 对齐 Vue onShow:每次页面获得焦点检查广告弹窗/优惠券
   useFocusEffect(
     useCallback(() => {
-      initNewPeople();
+      initSuperAd();
       initCoupon();
-    }, [initNewPeople, initCoupon]),
+    }, [initSuperAd, initCoupon]),
   );
 
   // 执行搜索
@@ -434,11 +428,13 @@ export default function BoxScreen() {
           }}
         />
 
-        {/* 新人大礼包海报弹窗 */}
-        <NewbieActivityModal
-          visible={activityVisible}
-          onClose={() => setActivityVisible(false)}
-        />
+        {/* 广告弹窗 (super_ad) */}
+        {adElements.length > 0 && (
+          <SuperAdModal
+            elements={adElements}
+            onClose={() => setAdElements([])}
+          />
+        )}
       </View>
     </View>
   );

+ 1 - 0
app/_layout.tsx

@@ -63,6 +63,7 @@ export default function RootLayout() {
             <Stack.Screen name="profile" options={{ headerShown: false }} />
             <Stack.Screen name="test" options={{ headerShown: false }} />
             <Stack.Screen name="lottery" options={{ headerShown: false }} />
+            <Stack.Screen name="certification" options={{ headerShown: false }} />
             <Stack.Screen
               name="modal"
               options={{ presentation: "modal", title: "Modal" }}