From bae5ee44af6c6932ccc2c82e569d83fd89c7ae33 Mon Sep 17 00:00:00 2001 From: roxy Date: Fri, 26 Jun 2026 16:40:25 +0800 Subject: [PATCH] =?UTF-8?q?iOS=E9=9A=90=E8=97=8F=E5=85=85=E5=80=BC?= =?UTF-8?q?=E5=85=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ios/Runner.xcodeproj/project.pbxproj | 6 +- ios/Runner/Info.plist | 2 +- lib/modules/user/me_page2.dart | 25 ++++++++ .../wallet/recharge/recharge_page.dart | 58 +++++++----------- sc_images/index/sc_icon_cp_entry.png | Bin 0 -> 6340 bytes 需求进度.md | 22 +++++++ 6 files changed, 72 insertions(+), 41 deletions(-) create mode 100644 sc_images/index/sc_icon_cp_entry.png diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index b7bf204..0b12671 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -524,7 +524,7 @@ CODE_SIGN_ENTITLEMENTS = Runner/RunnerRelease.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 101; + CURRENT_PROJECT_VERSION = 102; DEVELOPMENT_TEAM = S9YG87C297; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; @@ -715,7 +715,7 @@ CODE_SIGN_ENTITLEMENTS = Runner/RunnerDebug.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 101; + CURRENT_PROJECT_VERSION = 102; DEVELOPMENT_TEAM = S9YG87C297; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; @@ -744,7 +744,7 @@ CODE_SIGN_ENTITLEMENTS = Runner/RunnerRelease.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 101; + CURRENT_PROJECT_VERSION = 102; DEVELOPMENT_TEAM = S9YG87C297; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist index 8fab214..ff3b0e0 100644 --- a/ios/Runner/Info.plist +++ b/ios/Runner/Info.plist @@ -57,7 +57,7 @@ CFBundleVersion - 101 + 102 LSRequiresIPhoneOS NSCameraUsageDescription diff --git a/lib/modules/user/me_page2.dart b/lib/modules/user/me_page2.dart index a9b42e2..795d265 100644 --- a/lib/modules/user/me_page2.dart +++ b/lib/modules/user/me_page2.dart @@ -37,6 +37,8 @@ class MePage2 extends StatefulWidget { class _MePage2State extends State with WidgetsBindingObserver { static const Duration _counterStaleDuration = Duration(seconds: 30); + static const String _cpActivityUrl = + 'https://h5.global-interaction.com/activity/cp-space/yumi.html'; static const String _inviteActivityUrl = 'https://h5.haiyihy.com/app-invite/index.html'; static const double _inviteActivityHorizontalScale = 750 / 662; @@ -299,6 +301,21 @@ class _MePage2State extends State with WidgetsBindingObserver { ); } + void _openCpActivity() { + final cpActivityUrl = _cpActivityUrl.trim(); + if (cpActivityUrl.isEmpty) { + if (kDebugMode) { + debugPrint('[MePage2] cp activity url is empty'); + } + return; + } + + SCNavigatorUtils.push( + context, + "${SCMainRoute.webViewPage}?url=${Uri.encodeComponent(cpActivityUrl)}&showTitle=false", + ); + } + String _appendToken(String url) { final token = AccountStorage().getToken(); if (token.isEmpty) return url; @@ -480,6 +497,14 @@ class _MePage2State extends State with WidgetsBindingObserver { iconPath: 'sc_images/index/sc_icon_bag.png', onTap: () => SCNavigatorUtils.push(context, StoreRoute.bags), ), + SizedBox(width: 10.w), + _buildEntryItem( + title: 'cp', + iconPath: 'sc_images/index/sc_icon_cp_entry.png', + iconWidth: 47, + iconHeight: 50, + onTap: _openCpActivity, + ), ], ); } diff --git a/lib/modules/wallet/recharge/recharge_page.dart b/lib/modules/wallet/recharge/recharge_page.dart index eaa3c30..1eb18a3 100644 --- a/lib/modules/wallet/recharge/recharge_page.dart +++ b/lib/modules/wallet/recharge/recharge_page.dart @@ -37,11 +37,6 @@ class _RechargePageState extends State { context, listen: false, ).initializePaymentProcessor(context); - } else if (Platform.isIOS) { - Provider.of( - context, - listen: false, - ).initializePaymentProcessor(context); } } @@ -60,7 +55,7 @@ class _RechargePageState extends State { .getRechargePageScaffoldBackgroundColor(), resizeToAvoidBottomInset: false, appBar: SocialChatStandardAppBar( - title: SCAppLocalizations.of(context)!.recharge, + title: SCAppLocalizations.of(context)!.wallet, actions: [ GestureDetector( onTap: _showRecordDialog, @@ -83,38 +78,27 @@ class _RechargePageState extends State { _buildWalletSection(), SizedBox(height: 36.w), Expanded( - child: Padding( - padding: EdgeInsets.fromLTRB(12.w, 8.w, 12.w, 0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - _buildMethodSection(), - SizedBox(height: 14.w), - Expanded(child: _buildNativeProductList()), - if (Platform.isIOS) ...[ - SizedBox(height: 12.w), - _buildFooterButton( - title: - SCAppLocalizations.of( - context, - )!.restorePurchases, - onTap: () { - Provider.of( - context, - listen: false, - ).recoverTransactions(); - }, + child: + Platform.isIOS + ? const SizedBox.shrink() + : Padding( + padding: EdgeInsets.fromLTRB(12.w, 8.w, 12.w, 0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + _buildMethodSection(), + SizedBox(height: 14.w), + Expanded(child: _buildNativeProductList()), + SizedBox(height: 12.w), + _buildFooterButton( + title: + SCAppLocalizations.of(context)!.recharge, + onTap: _processNativePurchase, + ), + SizedBox(height: 14.w), + ], + ), ), - ], - SizedBox(height: 12.w), - _buildFooterButton( - title: SCAppLocalizations.of(context)!.recharge, - onTap: _processNativePurchase, - ), - SizedBox(height: 14.w), - ], - ), - ), ), ], ), diff --git a/sc_images/index/sc_icon_cp_entry.png b/sc_images/index/sc_icon_cp_entry.png new file mode 100644 index 0000000000000000000000000000000000000000..9b2c19d72845b8a1ca60795ce35fe21fba394f95 GIT binary patch literal 6340 zcmV;#7(3^QP)E?0USbo6Bu+v?OcD|T z*_sIyXjle%;kGQ(p)-`ZmwD#t&2;Xxoo709nd#6%VSuts*-L;V5D3|K$5|XFcI16u zB-@fK$y&ZSlC0Pce2yZ0+xwmOyyyJS|D5wF#*#c$Q4~})3@FIY=y!Zm!(kMSCi)#Y z8M{`Eo>P=r*U7Q?e&n}atKqq4?&AkPe|^q9@hx&`{80S-_22R9BJzYqK8>Q8KCVWO zY2pIL1XiO1MlQH^vnF;!KHfoYANnU6J@hG#c$3ZGW?-6v|Q*HkYS!@}>XJ zlk2Of%1I;?RS?tTXowFJxjs6+I(G%*<3$xY{XO%{*jSplmNjt=Gkb}Z=!C-44_0H# zGD~~02Sxv;rHNd-q^_E}`a=1gNl|GMX*O%@x>;ry87348&5WzWbQ>QhqNupA@z2aN zW6IR((^7WEPecd4POGusbC-Fx#v)o+zia`%sQ@0IpJ$)^F8_CP6(M~secEhNl9IT+ zIvGuZnUl@ERL?7Hjl9SH7vj0 zgr0xqUUEA3Fwou3@$N9CH>~82)wvwpbCgNH44f9M;cNiXnMWfo1Dxy6>s)8P~* z#|9$HNYzct*!!iO3r7yHsz6UxQ8~xMxjgsh^UPIb%!J}AbiI;w8m;D%p6nnyZNYRXUplhhm2 zaGdKPO%rBva*B_4pXA?m_lhrManci@&fdiR-(STql?&HFV%*=9IX)3Tuhpg|?c{5l zAco(LRvTnl~YBxSezNwEu_b9G0g^r$1?(Vm+ zBVA9${CO0uxSwRJmMblG_O*vemdX5Na{*NaDVU8@yxlPJHI$hfoR|Z*-)Qp+Gg_Y$ zH01Not2J!iP$U7u!mhIuv<|A+8!obSshRm{I$Vl{a~FE3sLEoHWacGJ(R8Vwm5bBK zPB*ddOfO$G2C>#IrZUmV?TeF8gH!zO<8EGVQm&cDH_?RImOSmS`Rd%L%C(y#+k*0Z z9=Ll8^$YT-sVG7*g+&~lBlP?B!L6%KK||L?c|!$C`^a4`n$zL(ij_ZFw*=HEys`I_m5yS zY6RwzC|kCcl!6M{8b9a9|L`)^*|2^46291bj?xxN=A)bQo>OL&Of< zUIV2!Z6&>OEhbZt*28Zy(B4Txf}T&$cJabKJDYCI(X2rkDuWD**@yG+|C_$u0x-;fTq1~^X~IM;n8e3FcCQ=Wz!iY(mm z*iV?h_IBEiz02!1IT*^F1KwI=V3?_?)xxuYxr?PxRa z?K($h`8>Y+=tc|~<$U(a@A;3P|10lY2+`!xGcKkxnV5**lt56lRFt2?o=f9gZ9L1$ zW%Ic2q1$=o)uTN9qwTacHSp8le8jsKL!=buvZOKvLvjjzVJ#D?o~9v{rY;|@roAL4 zTDWn;7X1C^xMX*5?&KA!b9IaljdS#pAXIS1@U;fvHj&*ztA+oaSxD}Z?F@LrTpf1u zqaW_ToTla2uFv`HbH8Ixw~h(nD#*2p#e~*kB+;y6-Qq=j|E?uW6i43M-4#`P-Xw$ua6_2=$SpN#khy7~NNTs4del z;S6!>+NC`5{rfPOvhnnu!(^EvF{=`-dxRQmnEfpdyc&Jf1V_d~xca)-^zHRH>@E1l zC&1&N@ejLMC#y76oy%2Og(z)_u*%31IQlzSS!yDwAjEq|M%b|721@eHv|Q@qwOtL^ zr;I2fcvur*lL}8rlCkH-U$eU0MpJV;M}w2xW5}j9&qu(N!SVJ{Ixcpxal>kg%8MD3 zsM~htFnJ4B;B>h0yFD0fHgdA`_*`NV_6hM{jUbb#)a|5hVKEs=D&1|p>^j)N_S-U1 za#H!dn3C5Yj0Gv3*nDxOg{SWO7P;kFT<)E~sn@b*~{6=FmAVvJ; zp+#x@;_1!!T?4%O#btcn0oG@x({}kX^$$NuMXJiY>_lET*3XsWXQ?i>P_;Ny96VyX z4vboPu;O9x@+C%kM=*@_@ZlvdIzb<8glbDPUyzqbaju!Jj=`u;6fUU3S|Z4oZRX05 z7nek8O@5Y@-~Zrdvc?Y4-gJlufB3)ntA}pJHPVh}Vw~>Y9wx#u3ZV*Ko2I7t`|b0X z8ttLG;XFonJLaS?&apn$?AX9WZyQ+^dC=1?P^ROAF9A!26_Y?xu0-12juD)Fo!C#d z(BC^s*z3mS389Y!r6{EZui(GSBZ%bnMWON5c`D1+tfR00DvQ%S{Ouj(QHRy6yRi&g zcnI^9O9b+8VgGydv~=Nf4B{Sh3EnDEJdSSSC^zJoB=k>l;-H;f?Sj1%gII?B+)!62 zp45dw9mHnwPNCkT&86RA5TXNyr|&*(VAqf_i}wqx`A$j?k;*}C}zTrMGY2?QqXSQ5i@PJ{@H zW9!2TIl1Ws10g0olVa0BjOIkLvlWu`L58~f`JzQkK+#|0f)OytPZQ{LDWq8RygR6; z&_9SXoQSD;khR;^l5HABV>3&z@kgc{>TwEJ7Y)0n$V^X>C65IZMKY%e zcL4kOi`azfCMB4tUAdg(f?BML@8bBe%LF8FX$(fbvtuM|X5*#>Hhhy_+!HQb z6K+AEF-AoRPPZS&WSDMGY-N>c8k}qhlb)W1b9@p^Ho`>}yxDEx=uiag^yrgP$jh>! zamxUSNfyehMcdjKe;9Cwq9NDq@?uNYlb0+4iS&`rEeo?TC7G!zO`(44D#pYKPwsEz z`5*p`+#eL7+zi;o!AJW@_KtF)sh`K5{e(%s!lc(P+V@4xA(9nY)6E#OZIaVU+=yt0 za5R4ATMg0ukx>^(qIvt(o~T?parDXpF{7ZET}b3Pd7%TpXM*CK49aXeHq?~}OoRBSxLM(+yQlyidV$&@Pa1QrVwxF86 zjuyVX{zeuRB~g{BrD91fURjWfS3A&M>~Ya>zL!O1X*^cj!VSxEagW2nPe&=P(u=c9 zv9`8`502V-sy>6hmR5R4{ZxrbeD?7HOo|tWDz<2lm6F6FQe5(RebGq_OYW){p#ly$ttdV|Kh>Qf`IfaRIw>y{`7Q`ENvu2T% zZ`CcO`S=l%M9F7Px6|6^M0ch?z{&GnEM8c|vZ`_+M4xfF-$$Qc(zAj|EE1|6gFQU8 zu@oe^@?zH9T*=WtUF4`gh0;Mkx6Cs#>Kvh{s0@F%j~=I& z3~MS*apr>J914XV^k3}~6Kcn%X7NFzm#K)r5y|zsSeZ}kPissdL+Hfn6}8lDy&W|v zpZ=acK79KC&F7jKbULsmrSZu23VP*uY9hRH*vT<>A`cd6*|L5S);t5pFAVYG!S0w3 zM0C?Oq4H6KgDjgcx}}voS6sq(fAtl+M380K8getzXccq0p{^eNfiEPExM{b0S#$3W zdiU>U)yidfCWi^=1yK#UXbDtRVl+Y5r94j3v2Ijw!K( zd#Vhqou4ervxtyqoPT=pD?0nUJhCnw)o5XOT%|5&5iuscJ}R{E0n7#szkGZh z#fDLuo4YAU)9~Xx6Ktt9@a&`O2_z(Q@bhz$b`JAK;{@@vH7a~OQ#Wc=))psl=X`C{ zAyWm%UwrczBVKQGQa(j82eS>EL7_B9gU4JTNreH%d$H!`pcM$SUl}ApAn&;^J1I8@ z*s--n0#%4-pFhc0z4BCp2rWLKL{~(?pi}twN7hoA>Y}}^2b;;q>wEj9E>y_6zqpOA zu1*>oJ4NV8j&}R!q^ZIxW64OwG()OFn^4$+fpHv7t+LvFmMtrn?_>_2?xempS%S=@ z1Q#F8-EK}dv|ux9sk?16=Z>F};B^ISijm?~t0Y3Zn4hi^o*3r!Jy-a0Faf_VqHVEM zU8Fh@5gdN};7V$(UV1uuagUC0^s<{Rs~1zcpp?Om^PK+jEH9o5(l8XBRdiD0)q}X^ zV;Rb$x7V_^P=_i^&ll3t(d(qPG7FQK&AHQ!EEU-5b%4+9rb$rgl_M?|q$~W@rUI_m zhe?&>hb@sN{k5{J}D7)JtHH8$Zu!OjWKD)h+I^i#l{(iyx5%Gx<(y}rLO?pINJ!e~n z_|wS&JR_4b-c|}Ue!gm%h*qNGHm}vBT6V_k^7-Zon_oP!jZ9&nVV?uN-$BvBC4yEHLPvrGLjkTx)E?+}b9TZ=t3>G>cMoal z$$Zi{$b>f#E4Ip?R+pN*Gu|8+as{Zg2rbZCqNuP;gEz_FoxgwKprnUhY6`TR?opz({Mn`PYYBLK6S78+gy@?jH(hS? zP#|g7SodX)eRWQ9*!d(R=QA{JVcC*W{DWNr(|%5$came%3Z2Lzbaq4tnUfU1ALGz4 z{(zs32?yCW1C^W0INvZJ@SZ?+P7;~o7iEiXW+;%2)t1M=NCKb!@hvhfW4Hv-GR3D_ zCKEW<<(*Tni5Ff)c+1ZCp@+BJOs3jTqQ%UktMepBouFHSMtk=-xm7j1`|+3j>eGvo zQH=;`Dl>D1EQ8Pb--@SH%Mf1~0EhuJCYL%-cux!(&(kHqdQ>9+>7qtwH2#s)r z+41By%iaxs0;M~~e{joHd+uai3;Sju~%yS6Rks=bH(5;s~0 zR4OxcCvaI?%165!xv|2A&SYZ2(uJhtE#wz3zsEZ#`{oKC2Y;(% zFn5)QDY7QeCJ=Q{YBdi?FKI-`*p0Q>jLGtTdZLx9=sT`V)RiVIqC9wiDc!a zOIfdv+9ee-GhC6ez2W; zR%J_c_ES(%O~v9`9OF~$ld{N9cXv>i>SyuI#iVb1oY!Cf0~U$aJJwh5(*rIh11dA! z`I!cDlpbhPEIYrc1E?sm>}GkcmaCEuemQ98;K>7I3%n&uhnc?kb&T=hu}%gh zM@gw#j8bMf(lN#tr>}^$4-3>zvhRwAmH9!A z+a)MnJkF@gNtwlfRfyZ+uE3lg?6qF;^fAHtq@Bu4O@B_E-XDxLduuZccvs9PdubUp zQiS@XU5g}Gq)6}z2jPvgZjSbZIN3YJBAKiNP&O_pL91r6uq2fU*BB#`H|8VogmF2mkvrH&<_>x&H_YZnN^y#Q>wy z1>D^{9(%DOk{-^y@<2_7hQ(Qm#1!c;j`%s!HQjZe)fK${g^g?Iju|e8(Zfw2_vVKYhCi#E#c{QW31(pCuIw-WI}gV8dxq7_DD}R zA4)UAAPzL_311sWnbVq_S%R>7{Tm+N{BlNQ(|!Fd4x;JX>@BX5>8H+gprgk$GpiuPIu4eDq-&a%#G38u6uPrjn;D1>)ua@kMTbW>%iwlHCgNc0000 4 -> 1 -> 4` 这类来回闪动。 - 已按 2026-04-20 最新调整撤掉 `Wallet -> Recharge` 中新增的 MiFaPay 第三方支付 UI 与页面逻辑:当前充值页仅保留原生 `Google Pay / Apple Pay` 入口与商品列表,`Recharge methods` 区域也已收敛为单一原生支付卡片;此前接入的 MiFaPay 方法选择、底部弹窗、H5 收银台页以及对应页面级状态管理已从现有充值链路移除,避免继续对当前版本产生影响。 +- [x] 2026-06-26 App Review 收口:已调整 `Wallet -> Recharge` 页面,iOS 仅展示钱包余额,不再初始化/展示 Recharge methods、商品空态、恢复购买和充值按钮;顶部标题改为 Wallet,页面静态检查通过。 +- [x] 2026-06-26 iOS 提审版本号调整:Runner 的 `MARKETING_VERSION` 保持 `1.0.0`,`CFBundleVersion` / `CURRENT_PROJECT_VERSION` 已调整为 `102`,对应 App Store Connect 显示 `1.0.0 (102)`。 - 已按 2026-04-18 联调要求继续收口幸运礼物链路:项目默认 API host 已临时切到 `http://192.168.110.43:1100/` 方便直连测试环境;`/gift/give/lucky-gift` 请求体也已补齐为最新结构,除原有 `giftId/quantity/roomId/acceptUserIds/checkCombo` 外,会稳定携带 `gameId: null`、`accepts: []`、`dynamicContentId: null`、`songId: null` 这几组字段,便于和当前后端参数定义保持一致。 - 已继续补齐 `GAME_LUCKY_GIFT` 的 socket 播报与中奖动效:房间群消息收到该类型后,现在会统一落聊天室中奖消息、奖励弹层队列与发送者余额回写,不再只在 `3x+` 时才触发顶部奖励动画;同时全局飘窗已改为按服务端 `globalNews` 字段决定是否展示,避免再用前端本地倍率硬编码去猜。 - 已按最新 UI 口径重排幸运礼物中奖展示:顶部 `LuckGiftNomorAnimWidget` 不再叠加大头像、倍率和奖励框,只在“单个礼物倍率 `>= 10x`”或“单次中奖金币 `> 5000`”时负责播全屏 `luck_gift_reward_burst.svga`;原本的 `luck_gift_reward_frame.svga` 已改挂到房间礼物播报条最右侧,并在框内显示 `+formattedAwardAmount`,金额文案直接复用此前大头像下方那一份中奖金币额。