leon hace 1 año
padre
commit
a889b3f787

+ 1 - 1
android/app/build.gradle

@@ -144,7 +144,7 @@ aaptOptions.useNewCruncher = false
         applicationId app_id
         minSdkVersion rootProject.ext.minSdkVersion
         targetSdkVersion rootProject.ext.targetSdkVersion
-        versionCode 14
+        versionCode 16
         versionName "1.0.1"
         buildConfigField "boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled().toString()
 //        manifestPlaceholders = [

+ 5 - 2
android/app/src/main/AndroidManifest.xml

@@ -5,8 +5,11 @@
     <uses-permission android:name="android.permission.INTERNET" />
     <uses-permission android:name="android.permission.CAMERA" />
     <uses-permission android:name="android.permission.RECORD_AUDIO" />
-    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
-    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
+    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"
+        android:maxSdkVersion="32" />
+    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
+        android:maxSdkVersion="32"
+        tools:ignore="ScopedStorage" />
     <uses-permission android:name="android.permission.VIBRATE" />
     <uses-permission android:name="android.permission.USE_EXACT_ALARM"
         tools:ignore="ExactAlarm" />

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
android/app/src/main/assets/index.android.bundle


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
android/app/src/main/assets/index.android.map


+ 14 - 0
android/app/src/main/java/com/hola/HolaModule.java

@@ -1,5 +1,6 @@
 package com.hola;
 
+import static android.provider.Settings.ACTION_REQUEST_SCHEDULE_EXACT_ALARM;
 import static androidx.core.content.ContextCompat.startActivity;
 
 import android.app.Activity;
@@ -27,6 +28,7 @@ import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.core.app.ActivityCompat;
 import androidx.core.app.NotificationManagerCompat;
+import androidx.core.content.ContextCompat;
 
 import com.facebook.react.bridge.Callback;
 import com.facebook.react.bridge.Promise;
@@ -248,12 +250,24 @@ public class HolaModule extends ReactContextBaseJavaModule {
         if (getCurrentActivity()==null){
             return;
         }
+//        if (ContextCompat.checkSelfPermission(getCurrentActivity(), Manifest.permission.SCHEDULE_EXACT_ALARM) != PackageManager.PERMISSION_GRANTED) {
+//            ActivityCompat.requestPermissions(getCurrentActivity(), new String[]{Manifest.permission.SCHEDULE_EXACT_ALARM}, REQUEST_CODE);
+//        }
 
         //取消历史alarm
         clearClockSchedule();
 
         AlarmManager alarmManager = (AlarmManager) getCurrentActivity().getSystemService(Context.ALARM_SERVICE);
 
+//        if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.S){
+//            if (alarmManager.canScheduleExactAlarms()){
+//
+//            }
+//            else {
+//                startActivity(Intent(ACTION_REQUEST_SCHEDULE_EXACT_ALARM));
+//            }
+//        }
+
         int flags = PendingIntent.FLAG_UPDATE_CURRENT;
         if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.M){
             flags = PendingIntent.FLAG_IMMUTABLE;

+ 1 - 1
config/env.ts

@@ -1,3 +1,3 @@
 
-export const APP_VERSION = '1.0.0'
+export const APP_VERSION = '1.0.1'
 export const WX_VERSION = '1.4.5'

+ 2 - 2
ios/hola.xcodeproj/project.pbxproj

@@ -576,7 +576,7 @@
 				CODE_SIGN_ENTITLEMENTS = hola/hola.entitlements;
 				CODE_SIGN_IDENTITY = "Apple Development";
 				CODE_SIGN_STYLE = Automatic;
-				CURRENT_PROJECT_VERSION = 81;
+				CURRENT_PROJECT_VERSION = 82;
 				DEVELOPMENT_TEAM = GPMXAZ9G5N;
 				ENABLE_BITCODE = NO;
 				INFOPLIST_FILE = hola/Info.plist;
@@ -609,7 +609,7 @@
 				CODE_SIGN_ENTITLEMENTS = hola/hola.entitlements;
 				CODE_SIGN_IDENTITY = "Apple Development";
 				CODE_SIGN_STYLE = Automatic;
-				CURRENT_PROJECT_VERSION = 81;
+				CURRENT_PROJECT_VERSION = 82;
 				DEVELOPMENT_TEAM = GPMXAZ9G5N;
 				INFOPLIST_FILE = hola/Info.plist;
 				LD_RUNPATH_SEARCH_PATHS = (

+ 1 - 1
ios/hola/Info.plist

@@ -32,7 +32,7 @@
 		</dict>
 	</array>
 	<key>CFBundleVersion</key>
-	<string>81</string>
+	<string>82</string>
 	<key>ITSAppUsesNonExemptEncryption</key>
 	<false/>
 	<key>LSApplicationCategoryType</key>

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
ios/main.jsbundle


+ 45 - 21
src/features/trackTimeDuration/components/CheckAccess.tsx

@@ -2,7 +2,7 @@ import showAlert from "@/components/basic/Alert"
 import { View, Text } from "@tarojs/components";
 import './CheckAccess.scss'
 
-import { useContext, useEffect, useState } from "react";
+import { memo, useContext, useEffect, useState } from "react";
 import { TimeFormatter } from "@/utils/time_format";
 import { useDispatch, useSelector } from "react-redux";
 import { getPlans, setPlan } from "@/services/trackTimeDuration";
@@ -25,8 +25,8 @@ if (process.env.TARO_ENV == 'rn') {
     useNavigation = require("@react-navigation/native").useNavigation
 }
 
-
-export default function CheckAccess(props: { record: any, count: number }) {
+const CheckAccess = memo((props: { record: any, count: number }) => {
+    // export default function CheckAccess(props: { record: any, count: number }) {
     const [showFastAlert, setShowFastAlert] = useState(false)
     const [alertTitle, setAlertTitle] = useState('')
     const [alertContent, setAlertContent] = useState('')
@@ -36,7 +36,7 @@ export default function CheckAccess(props: { record: any, count: number }) {
     const [confirmText, setConfirmText] = useState('')
     const [subConfirmText, setSubConfirmText] = useState('')
     const user = useSelector((state: any) => state.user);
-    const [rnKeep,setRnKeep] = useState(true)
+    const [rnKeep, setRnKeep] = useState(true)
 
     const { t } = useTranslation()
 
@@ -52,10 +52,7 @@ export default function CheckAccess(props: { record: any, count: number }) {
         navigation = useNavigation()
     }
 
-    // const [confirmAction, setConfirmAction] = useState<any>(null)
-    // const [access, setAccess] = useState<any>(null)
 
-    
 
     useEffect(() => {
         var obj = props.record
@@ -106,7 +103,8 @@ export default function CheckAccess(props: { record: any, count: number }) {
         setChooseMixedSuccess(false)
     }
 
-    function viewWillDisappear(){
+    function viewWillDisappear() {
+        debugger
         setRnKeep(false)
     }
 
@@ -134,6 +132,13 @@ export default function CheckAccess(props: { record: any, count: number }) {
             setShowFastAlert(false)
             setKeepContent(false)
         }
+
+        global.paySuccess = ()=>{
+            cancelAction = null
+            confirmAction = null
+            setShowFastAlert(false)
+            setKeepContent(false)
+        }
         global.checkAccess = (acccessData: any) => {
             const currentStatus = acccessData.current.qualification.status
             const preStatus = acccessData.previous.qualification.status
@@ -141,10 +146,11 @@ export default function CheckAccess(props: { record: any, count: number }) {
 
 
             setSubConfirmText('')
+            debugger
             confirmAction = null
 
             const { trigger_event } = access.current.qualification;
-            
+
             //删除记录后仍有资格,不做特殊处理。只有删除时为NOT_SATISFIED_AFTER_DELETE时,弹失去资格弹窗
             if (trigger_event == 'SATISFIED_AFTER_DELETE') {
                 return;
@@ -169,9 +175,9 @@ export default function CheckAccess(props: { record: any, count: number }) {
                 setConfirmText(t('feature.check_access.non_access.btn'))
             }
             else if (preStatus == 'NOT_QUALIFIED' && currentStatus == 'PROVISIONAL_QUALIFIED') {
-                
+
                 const { streak_fast_current } = acccessData.current.qualification.condition
-                const reason = t('feature.check_access.gain_access.reason',{day: streak_fast_current})
+                const reason = t('feature.check_access.gain_access.reason', { day: streak_fast_current })
                 Taro.setStorage({ key: 'showedDisqualifiedAlert', data: false })
                 var expire = acccessData.current.qualification.fast_expire
                 setShowFastAlert(true)
@@ -202,7 +208,7 @@ export default function CheckAccess(props: { record: any, count: number }) {
                 const { streak_fast_current, streak_sleep_current } = acccessData.current.qualification.condition
                 if (global.ring.current_record.scenario == 'FAST') {
                     var expire = acccessData.current.qualification.fast_expire
-                    const reason = t('feature.check_access.gain_access.reason',{day: streak_fast_current})
+                    const reason = t('feature.check_access.gain_access.reason', { day: streak_fast_current })
                     setShowFastAlert(true)
                     // setKeepContent(false)
                     setKeepContent(true)
@@ -241,6 +247,14 @@ export default function CheckAccess(props: { record: any, count: number }) {
         setShowFastAlert(false)
     }
 
+    function pay() {
+        jumpPage('', 'ProductList', navigation)
+        setTimeout(()=>{
+            confirmAction = pay
+            cancelAction = changeFastScenaria
+        },200)
+    }
+
     async function loseGain(access) {
         var showedDisqualifiedAlert = await getStorage('showedDisqualifiedAlert') || false;
         if (showedDisqualifiedAlert) {
@@ -258,7 +272,7 @@ export default function CheckAccess(props: { record: any, count: number }) {
             dt = sleep_expire
         }
         var date = TimeFormatter.getMonthAndDayByTimestamp(dt, true)
-        var day_unit = Math.max(condition.streak_fast_min_required-1,1)==1?'day':'days';
+        var day_unit = Math.max(condition.streak_fast_min_required - 1, 1) == 1 ? 'day' : 'days';
 
         switch (trigger_event) {
             case 'FAST_STREAK_LOST':
@@ -274,7 +288,7 @@ export default function CheckAccess(props: { record: any, count: number }) {
                 desc = t('feature.check_access.lost_reason.sleep_streak_not_growing');
                 break;
             case 'NOT_SATISFIED_AFTER_DELETE':
-                desc = t('feature.check_access.lost_reason.not_satisfied_after_delete',{day:Math.max(condition.streak_fast_min_required-1,1),day_unit:day_unit});
+                desc = t('feature.check_access.lost_reason.not_satisfied_after_delete', { day: Math.max(condition.streak_fast_min_required - 1, 1), day_unit: day_unit });
                 break;
             case 'NA':
             default:
@@ -285,19 +299,27 @@ export default function CheckAccess(props: { record: any, count: number }) {
 
 
         setShowFastAlert(true)
-        setKeepContent(false)
+        setKeepContent(true)
         setAlertTitle(t('feature.check_access.lose_access.title'))
         setAlertContent(t('feature.check_access.lose_access.desc', { reason: desc, require_days: condition.streak_fast_min_required }))
-        setShowCancel(false)
-        setConfirmText(t('feature.check_access.lose_access.btn'))
-        // setConfirmText('Become a PRO member')
+        setShowCancel(true)
+        setCancelText(t('feature.check_access.lose_access.btn'))
+        setConfirmText('Become a PRO member')
         setSubConfirmText('')
+        setTimeout(() => {
+            cancelAction = changeFastScenaria
+            confirmAction = pay
+        }, 100)
+        // confirmAction = pay
+        // cancelAction = changeFastScenaria
         Taro.setStorage({ key: 'showedDisqualifiedAlert', data: true })
 
-        changeFastScenaria()
+        // changeFastScenaria()
     }
 
     function changeFastScenaria() {
+        cancelAction = null
+        confirmAction = null
         const { start_time, end_time } = global.ring.schedule.fast
         var params: any = {
             scenario: 'FAST',
@@ -451,7 +473,7 @@ export default function CheckAccess(props: { record: any, count: number }) {
                 <View className="fast_alert_title">{alertTitle}</View>
                 <View className="fast_alert_detail">{alertContent}</View>
                 <View className={subConfirmText.length > 0 ? 'fast_alert_confirm confirm_multline' : 'fast_alert_confirm'} onClick={confirm}>
-                    <Text style={{fontWeight:'bold',color:ColorType.black}}>{confirmText}</Text>
+                    <Text style={{ fontWeight: 'bold', color: ColorType.black }}>{confirmText}</Text>
                     {
                         subConfirmText.length > 0 && <Text className="confirm_sub_text">{subConfirmText}</Text>
                     }
@@ -485,4 +507,6 @@ export default function CheckAccess(props: { record: any, count: number }) {
             </Modal>
         }
     </View>
-}
+})
+
+export default CheckAccess;

+ 14 - 6
src/pages/store/product_list.tsx

@@ -4,25 +4,31 @@ import { View, Text } from "@tarojs/components";
 import { useEffect, useState } from "react";
 import { FlatList, Pressable } from "react-native";
 import Purchases from 'react-native-purchases'
+import { useSelector } from "react-redux";
 
 export default function ProductList() {
 
     const [packages, setPackages] = useState([]);
-
+    const user = useSelector((state: any) => state.user);
     // - State for displaying an overlay view
     const [isPurchasing, setIsPurchasing] = useState(false);
 
     useEffect(() => {
+        console.log(user)
         if (process.env.TARO_ENV == 'rn') {
             if (kIsIOS) {
-                Purchases.configure({ apiKey: 'appl_FNFYDLwHZlXzqrKJFlErWXUHGwx' })
+                Purchases.configure({ apiKey: 'appl_FNFYDLwHZlXzqrKJFlErWXUHGwx',
+                    appUserID:user.id
+                 })
             }
             else if (kIsAndroid) {
-                Purchases.configure({ apiKey: 'goog_cyJSYOsnZpNqsUbCsHSdhqQdQwe' })
+                Purchases.configure({ apiKey: 'goog_cyJSYOsnZpNqsUbCsHSdhqQdQwe',
+                    appUserID:user.id
+                 })
             }
             // console.log('aaaa')
             // setTimeout(() => {
-            //     getProducts();
+            //     // getProducts();
             //     hi()
             // }, 2000)
 
@@ -32,7 +38,9 @@ export default function ProductList() {
     async function getProducts() {
         try {
             const offerings = await Purchases.getOfferings();
-            console.log((offerings as any).current.availablePackages)
+            console.log('product list offerings',offerings)
+            console.log('product list detail',(offerings as any).current.availablePackages[1])
+
             if (offerings.current !== null && offerings.current.availablePackages.length !== 0) {
                 setPackages((offerings as any).current.availablePackages);
             }
@@ -42,7 +50,7 @@ export default function ProductList() {
     }
 
 
-    async function hi(item) {
+    async function hi() {
         try {
             // 启动购买流程
             const purchaseResult = await Purchases.purchaseProduct('pro_lifelong_test');

Algunos archivos no se mostraron porque demasiados archivos cambiaron en este cambio