diff --git a/app/screens/ProfileScreen.tsx b/app/screens/ProfileScreen.tsx
index 790627d..2fd90ac 100644
--- a/app/screens/ProfileScreen.tsx
+++ b/app/screens/ProfileScreen.tsx
@@ -131,17 +131,26 @@ export const ProfileScreen = () => {
style={styles.VipImg}
/>
- {((1 - user?.vip_discount) * 100).toFixed(0)}%
+ -{((1 - user?.vip_discount) * 100).toFixed(0)}%
- 40000/50000
+ {user.points}/{user.next_level_points_threshold}
-
+
+
+
@@ -567,10 +576,18 @@ const styles = StyleSheet.create({
fontFamily: "Segoe UI",
color: "#fcca80",
},
- progressBarLine: {
+ progressBarContainer: {
width: "100%",
height: 3,
backgroundColor: "#d9d9d9",
+ position: "relative",
+ },
+ progressBarFilled: {
+ position: "absolute",
+ top: 0,
+ left: 0,
+ height: "100%",
+ backgroundColor: "#f2cc86",
},
vipExplanation: {
width: "100%",
diff --git a/app/screens/loginList/index.tsx b/app/screens/loginList/index.tsx
index 0a35cbf..2d0bba3 100644
--- a/app/screens/loginList/index.tsx
+++ b/app/screens/loginList/index.tsx
@@ -23,29 +23,29 @@ import { userApi } from "../../services";
import useUserStore from "../../store/user";
// 使用标准的ES6模块导入
-import {
- GoogleSignin,
- statusCodes,
-} from "@react-native-google-signin/google-signin";
+// import {
+// GoogleSignin,
+// statusCodes,
+// } from "@react-native-google-signin/google-signin";
-import { LoginManager, AccessToken, Settings } from "react-native-fbsdk-next";
+// import { LoginManager, AccessToken, Settings } from "react-native-fbsdk-next";
const isDevelopment = __DEV__; // 开发模式检测
// 移出条件块,始终尝试配置 Google 登录
-try {
- // 配置 Google 登录
- GoogleSignin.configure({
- iosClientId: "YOUR_IOS_CLIENT_ID_HERE.apps.googleusercontent.com", // iOS CLIENT_ID
- webClientId:
- "449517618313-av37nffa7rqkefu0ajh5auou3pb0mt51.apps.googleusercontent.com", // <-- 更新为此 Web Client ID
- scopes: ["profile", "email"],
- offlineAccess: false, // <-- 确保为 false 或移除
- forceCodeForRefreshToken: false, // <-- 确保为 false 或移除
- });
-} catch (error) {
- console.log("Google Sign-in模块配置错误:", error); // 稍微修改了日志信息
-}
+// try {
+// // 配置 Google 登录
+// GoogleSignin.configure({
+// iosClientId: "YOUR_IOS_CLIENT_ID_HERE.apps.googleusercontent.com", // iOS CLIENT_ID
+// webClientId:
+// "449517618313-av37nffa7rqkefu0ajh5auou3pb0mt51.apps.googleusercontent.com", // <-- 更新为此 Web Client ID
+// scopes: ["profile", "email"],
+// offlineAccess: false, // <-- 确保为 false 或移除
+// forceCodeForRefreshToken: false, // <-- 确保为 false 或移除
+// });
+// } catch (error) {
+// console.log("Google Sign-in模块配置错误:", error); // 稍微修改了日志信息
+// }
type RootStackParamList = {
Login: undefined;
@@ -108,150 +108,122 @@ export const LoginScreen = ({ onClose, isModal }: LoginScreenProps) => {
// 处理谷歌登录
const handleGoogleLogin = async () => {
- try {
- if (!GoogleSignin || typeof GoogleSignin.signIn !== "function") {
- console.log("Google Sign-in模块未正确初始化或配置失败");
- return;
- }
- await GoogleSignin.hasPlayServices();
- const userInfo = await GoogleSignin.signIn();
- console.log("Google 登录成功:", userInfo);
- try {
- const res = await loginApi.googleLogin(userInfo);
- const user = await userApi.getProfile();
- setUser(user);
- navigation.navigate("MainTabs", { screen: "Home" });
- } catch (err) {
- console.log("Google 登录失败:", err);
- navigation.navigate("Login");
- }
- // 这里可以处理登录成功后的逻辑
- // 比如导航到主页面或保存用户信息
- // navigation.navigate("MainTabs", { screen: "Home" });
- } catch (error: any) {
- console.log("Google 登录错误:", error);
- // 开发模式下的错误处理
- if (isDevelopment) {
- console.log("开发模式:忽略Google登录错误,但已尝试真实登录"); // 修改日志,表明已尝试真实登录
- return;
- }
- if (statusCodes && error.code === statusCodes.SIGN_IN_CANCELLED) {
- console.log("用户取消登录");
- } else if (statusCodes && error.code === statusCodes.IN_PROGRESS) {
- console.log("登录正在进行中");
- } else if (
- statusCodes &&
- error.code === statusCodes.PLAY_SERVICES_NOT_AVAILABLE
- ) {
- console.log("Play Services 不可用");
- } else {
- console.log("其他错误:", error.message);
- navigation.navigate("Login");
- }
- }
+ // try {
+ // if (!GoogleSignin || typeof GoogleSignin.signIn !== "function") {
+ // console.log("Google Sign-in模块未正确初始化或配置失败");
+ // return;
+ // }
+ // await GoogleSignin.hasPlayServices();
+ // const userInfo = await GoogleSignin.signIn();
+ // console.log("Google 登录成功:", userInfo);
+ // try {
+ // const res = await loginApi.googleLogin(userInfo);
+ // const user = await userApi.getProfile();
+ // setUser(user);
+ // navigation.navigate("MainTabs", { screen: "Home" });
+ // } catch (err) {
+ // console.log("Google 登录失败:", err);
+ // navigation.navigate("Login");
+ // }
+ // // 这里可以处理登录成功后的逻辑
+ // // 比如导航到主页面或保存用户信息
+ // // navigation.navigate("MainTabs", { screen: "Home" });
+ // } catch (error: any) {
+ // console.log("Google 登录错误:", error);
+ // // 开发模式下的错误处理
+ // if (isDevelopment) {
+ // console.log("开发模式:忽略Google登录错误,但已尝试真实登录"); // 修改日志,表明已尝试真实登录
+ // return;
+ // }
+ // if (statusCodes && error.code === statusCodes.SIGN_IN_CANCELLED) {
+ // console.log("用户取消登录");
+ // } else if (statusCodes && error.code === statusCodes.IN_PROGRESS) {
+ // console.log("登录正在进行中");
+ // } else if (
+ // statusCodes &&
+ // error.code === statusCodes.PLAY_SERVICES_NOT_AVAILABLE
+ // ) {
+ // console.log("Play Services 不可用");
+ // } else {
+ // console.log("其他错误:", error.message);
+ // navigation.navigate("Login");
+ // }
+ // }
};
const [userInfo, setUserInfo] = useState(null);
- useEffect(() => {
- // 确保在 App 启动时初始化 SDK。这通常在您的 App.js 的顶层完成。
- // 如果您在 app.json 中配置了 Facebook App ID,这里可以省略 Settings.setAppID 和 Settings.setDisplayName
- Settings.initializeSDK();
-
- // 在应用程序启动时检查是否已经登录(可选)
- AccessToken.getCurrentAccessToken().then(data => {
- if (data) {
- console.log("已登录 Facebook,Token:", data.accessToken);
- // 可以尝试获取用户信息
- // fetchFacebookProfile(data.accessToken);
- }
- });
+ // useEffect(() => {
+ // // 确保在 App 启动时初始化 SDK。这通常在您的 App.js 的顶层完成。
+ // // 如果您在 app.json 中配置了 Facebook App ID,这里可以省略 Settings.setAppID 和 Settings.setDisplayName
+ // Settings.initializeSDK();
- }, []);
+ // // 在应用程序启动时检查是否已经登录(可选)
+ // AccessToken.getCurrentAccessToken().then(data => {
+ // if (data) {
+ // console.log("已登录 Facebook,Token:", data.accessToken);
+ // // 可以尝试获取用户信息
+ // // fetchFacebookProfile(data.accessToken);
+ // }
+ // });
+
+ // }, []);
// 辅助函数:获取 Facebook 用户资料 (可选,需要 'public_profile' 权限)
- const fetchFacebookProfile = async (token:string) => {
- try {
- const response = await fetch(`https://graph.facebook.com/me?fields=id,name,email&access_token=${token}`);
- const profile = await response.json();
- setUserInfo(profile);
- console.log('Facebook User Info:', profile);
- return profile;
- } catch (error) {
- console.error('获取 Facebook 用户资料错误:', error);
- Alert.alert("获取资料失败", "无法从 Facebook 获取用户详细资料,请检查网络或权限设置。");
- return null;
- }
- };
+ // const fetchFacebookProfile = async (token:string) => {
+ // try {
+ // const response = await fetch(`https://graph.facebook.com/me?fields=id,name,email&access_token=${token}`);
+ // const profile = await response.json();
+ // setUserInfo(profile);
+ // console.log('Facebook User Info:', profile);
+ // } catch (error) {
+ // console.error('获取 Facebook 用户资料错误:', error);
+ // Alert.alert("获取资料失败", "无法从 Facebook 获取用户详细资料,请检查网络或权限设置。");
+ // }
+ // };
// 处理Facebook登录
const handleFacebookLogin = async () => {
- try {
- // 可选: 先退出登录,确保每次都是全新登录 (主要用于测试)
- // await LoginManager.logOut();
-
- const result = await LoginManager.logInWithPermissions([
- "public_profile",
- "email",
- ]);
-
- if (result.isCancelled) {
- Alert.alert("登录取消", "用户取消了 Facebook 登录。");
- return;
- }
-
- const data = await AccessToken.getCurrentAccessToken();
- // 确保 accessToken 存在且为字符串
- if (!data || !data.accessToken) {
- Alert.alert("登录失败", "无法获取有效的 Facebook AccessToken。");
- return;
- }
-
- const tokenString = data.accessToken.toString();
- console.log("Facebook Access Token:", tokenString);
-
- // 获取 Facebook 用户信息
- const profile = await fetchFacebookProfile(tokenString);
-
- if (profile) {
- try {
- // 准备发送给后端的数据 - 扁平化格式
- const facebookData = {
- id: profile.id,
- name: profile.name,
- email: profile.email,
- access_token: tokenString
- };
-
- console.log("发送给后端的Facebook数据:", facebookData);
-
- // 调用后端Facebook登录API
- const res = await loginApi.facebookLogin(facebookData);
- console.log("Facebook 后端登录响应:", res);
-
- // 获取用户信息并更新状态
- const user = await userApi.getProfile();
- setUser(user);
-
- // 导航到主页面
- navigation.navigate("MainTabs", { screen: "Home" });
-
- } catch (err) {
- console.log("Facebook 后端登录失败:", err);
- Alert.alert("登录失败", "Facebook 登录验证失败,请重试。");
- }
- } else {
- Alert.alert("登录失败", "无法获取 Facebook 用户信息,请重试。");
- }
-
- } catch (error: any) {
- console.error("Facebook 登录或获取资料时发生错误:", error);
- let errorMessage = "发生未知错误";
- if (error && typeof error.message === 'string') {
- errorMessage = error.message;
- }
- Alert.alert("登录错误", `Facebook 操作失败:${errorMessage}`);
- }
+ // try {
+ // // 可选: 先退出登录,确保每次都是全新登录 (主要用于测试)
+ // // await LoginManager.logOut();
+
+ // const result = await LoginManager.logInWithPermissions([
+ // "public_profile",
+ // "email",
+ // ]);
+
+ // if (result.isCancelled) {
+ // Alert.alert("登录取消", "用户取消了 Facebook 登录。");
+ // return;
+ // }
+
+ // const data = await AccessToken.getCurrentAccessToken();
+ // // 确保 accessToken 存在且为字符串
+ // if (!data || !data.accessToken) {
+ // Alert.alert("登录失败", "无法获取有效的 Facebook AccessToken。");
+ // return;
+ // }
+
+ // const tokenString = data.accessToken.toString();
+ // console.log("Facebook Access Token:", tokenString);
+
+ // // 直接获取 Facebook 用户信息并打印
+ // await fetchFacebookProfile(tokenString);
+
+ // // 移除之前的 Alert, 因为 fetchFacebookProfile 内部会处理打印和可能的错误提示
+ // // 如果 fetchFacebookProfile 成功,信息已在控制台,如果失败,它会 Alert
+ // // 可以选择在这里加一个通用成功提示,表明流程已执行
+ // Alert.alert("操作完成", "已尝试 Facebook 登录并获取用户信息,请查看控制台输出。");
+
+ // } catch (error: any) {
+ // console.error("Facebook 登录或获取资料时发生错误:", error);
+ // let errorMessage = "发生未知错误";
+ // if (error && typeof error.message === 'string') {
+ // errorMessage = error.message;
+ // }
+ // Alert.alert("登录错误", `Facebook 操作失败:${errorMessage}`);
+ // }
};
// 处理Apple登录
diff --git a/app/services/api/userApi.ts b/app/services/api/userApi.ts
index b9cffea..79735ac 100644
--- a/app/services/api/userApi.ts
+++ b/app/services/api/userApi.ts
@@ -19,7 +19,9 @@ export interface User {
balance_currency:string,
country_en:string,
language:string,
- vip_level:number
+ vip_level:number,
+ points:number,
+ next_level_points_threshold:number
}
export interface UserSettings {
diff --git a/loginHas.txt b/loginHas.txt
index 1c8d9bd..0a35cbf 100644
--- a/loginHas.txt
+++ b/loginHas.txt
@@ -176,9 +176,11 @@ export const LoginScreen = ({ onClose, isModal }: LoginScreenProps) => {
const profile = await response.json();
setUserInfo(profile);
console.log('Facebook User Info:', profile);
+ return profile;
} catch (error) {
console.error('获取 Facebook 用户资料错误:', error);
Alert.alert("获取资料失败", "无法从 Facebook 获取用户详细资料,请检查网络或权限设置。");
+ return null;
}
};
@@ -208,13 +210,39 @@ export const LoginScreen = ({ onClose, isModal }: LoginScreenProps) => {
const tokenString = data.accessToken.toString();
console.log("Facebook Access Token:", tokenString);
- // 直接获取 Facebook 用户信息并打印
- await fetchFacebookProfile(tokenString);
-
- // 移除之前的 Alert, 因为 fetchFacebookProfile 内部会处理打印和可能的错误提示
- // 如果 fetchFacebookProfile 成功,信息已在控制台,如果失败,它会 Alert
- // 可以选择在这里加一个通用成功提示,表明流程已执行
- Alert.alert("操作完成", "已尝试 Facebook 登录并获取用户信息,请查看控制台输出。");
+ // 获取 Facebook 用户信息
+ const profile = await fetchFacebookProfile(tokenString);
+
+ if (profile) {
+ try {
+ // 准备发送给后端的数据 - 扁平化格式
+ const facebookData = {
+ id: profile.id,
+ name: profile.name,
+ email: profile.email,
+ access_token: tokenString
+ };
+
+ console.log("发送给后端的Facebook数据:", facebookData);
+
+ // 调用后端Facebook登录API
+ const res = await loginApi.facebookLogin(facebookData);
+ console.log("Facebook 后端登录响应:", res);
+
+ // 获取用户信息并更新状态
+ const user = await userApi.getProfile();
+ setUser(user);
+
+ // 导航到主页面
+ navigation.navigate("MainTabs", { screen: "Home" });
+
+ } catch (err) {
+ console.log("Facebook 后端登录失败:", err);
+ Alert.alert("登录失败", "Facebook 登录验证失败,请重试。");
+ }
+ } else {
+ Alert.alert("登录失败", "无法获取 Facebook 用户信息,请重试。");
+ }
} catch (error: any) {
console.error("Facebook 登录或获取资料时发生错误:", error);