将读取设备id和剪贴板权限时机放在用户同意隐私政策之后

This commit is contained in:
yezian 2024-01-18 22:47:17 +08:00
parent fb06ac82d8
commit ad633d6502
5 changed files with 40 additions and 37 deletions

36
App.jsx
View File

@ -43,6 +43,7 @@ import { save, get, remove, storeAppInfo } from "./utils/storeInfo";
import baseRequest from "./utils/baseRequest";
import { generateSignature } from "./utils/crypto";
import * as Clipboard from "expo-clipboard";
import PrivatyModal from "./components/PrivatyModal";
const RootStack = createNativeStackNavigator();
@ -63,6 +64,23 @@ export default function App() {
//
const [inviterCode, setInviterCode] = useState();
//
const [isPrivatyModalOpen, setIsPrivatyModalOpen] = useState(false);
//
const [checked, setChecked] = useState(false);
//app
useEffect(() => {
const handlePrivatyModal = async () => {
const notFirstTimeOpenApp = await get("not_first_time_open_app");
if (!notFirstTimeOpenApp) {
setIsPrivatyModalOpen(true);
save("not_first_time_open_app", 1);
return;
}
};
handlePrivatyModal();
}, []);
//
const apiUrl = process.env.EXPO_PUBLIC_API_URL;
//
@ -106,8 +124,10 @@ export default function App() {
}
},
inviterCode: inviterCode,
checked: checked,
setChecked: setChecked,
}),
[inviterCode]
[inviterCode, checked]
);
//
const [appIsReady, setAppIsReady] = useState(false);
@ -117,7 +137,6 @@ export default function App() {
const [versionData, setVersionData] = useState({});
useEffect(() => {
async function prepare() {
await storeAppInfo();
try {
const token = await get("token");
const account = await get("account");
@ -125,6 +144,7 @@ export default function App() {
const signature = await generateSignature({
...base,
});
//token
if (token && account) {
const response = await fetch(
`${apiUrl}/api/login/validate?signature=${signature}`,
@ -190,8 +210,10 @@ export default function App() {
//
useEffect(() => {
if (state.isSignin) return;
if (!checked) return; //
getClipboardContent();
}, []);
storeAppInfo();
}, [checked]);
//
const appState = useRef(AppState.currentState);
@ -551,6 +573,14 @@ export default function App() {
status={streamerNavigatorModalStatus}
setStatus={setStreamerNavigatorModalStatus}
/>
<PrivatyModal
visible={isPrivatyModalOpen}
setVisible={setIsPrivatyModalOpen}
confirm={() => {
setIsPrivatyModalOpen(false);
setChecked(true);
}}
/>
</NavigationContainer>
</View>
<Toast />

View File

@ -2,7 +2,7 @@
"expo": {
"name": "铁粉空间",
"slug": "ironfans",
"version": "1.1.4",
"version": "1.1.5",
"orientation": "portrait",
"icon": "./assets/icon.png",
"splash": {

View File

@ -11,8 +11,8 @@ import MyDivider from "../../../components/MyDivider";
import baseRequest from "../../../utils/baseRequest";
import { get } from "../../../utils/storeInfo";
export default function PasswordLogin({ checked, setChecked }) {
const { signIn } = useContext(AuthContext);
export default function PasswordLogin() {
const { signIn, checked, setChecked } = useContext(AuthContext);
const navigation = useNavigation();
const tailwind = useTailwind();
//

View File

@ -11,8 +11,8 @@ import baseRequest from "../../../utils/baseRequest";
import { get, save } from "../../../utils/storeInfo";
import { generateSignature } from "../../../utils/crypto";
export default function PhoneNumLogin({ checked, setChecked }) {
const { signIn, inviterCode } = useContext(AuthContext);
export default function PhoneNumLogin() {
const { signIn, inviterCode, checked, setChecked } = useContext(AuthContext);
const navigation = useNavigation();
const tailwind = useTailwind();
//checkbox

View File

@ -10,8 +10,6 @@ import { useSafeAreaInsets } from "react-native-safe-area-context";
import { useTailwind } from "tailwind-rn";
import PasswordLogin from "./PasswordLogin";
import PhoneNumLogin from "./PhoneNumLogin";
import PrivatyModal from "../../components/PrivatyModal";
import { get, save } from "../../utils/storeInfo";
export default function Login() {
const tailwind = useTailwind();
@ -23,23 +21,6 @@ export default function Login() {
const windowWidth = Dimensions.get("window").width;
const tabWidth = windowWidth / 2;
//
const [isPrivatyModalOpen, setIsPrivatyModalOpen] = useState(false);
const [checked, setChecked] = useState(false);
//appapp
useEffect(() => {
const handlePrivatyModal = async () => {
const notFirstTimeOpenApp = await get("not_first_time_open_app");
if (!notFirstTimeOpenApp) {
setIsPrivatyModalOpen(true);
save("not_first_time_open_app", 1);
return;
}
};
handlePrivatyModal();
}, []);
return (
<TouchableWithoutFeedback onPress={() => Keyboard.dismiss()}>
<View
@ -51,14 +32,6 @@ export default function Login() {
...tailwind("flex flex-1"),
}}
>
<PrivatyModal
visible={isPrivatyModalOpen}
setVisible={setIsPrivatyModalOpen}
confirm={() => {
setIsPrivatyModalOpen(false);
setChecked(true);
}}
/>
{/* tab栏 */}
<Tab
value={index}
@ -103,10 +76,10 @@ export default function Login() {
disableSwipe
>
<TabView.Item style={tailwind("w-full flex-1")}>
<PhoneNumLogin checked={checked} setChecked={setChecked} />
<PhoneNumLogin />
</TabView.Item>
<TabView.Item style={tailwind("w-full flex-1")}>
<PasswordLogin checked={checked} setChecked={setChecked} />
<PasswordLogin />
</TabView.Item>
</TabView>
</View>