From cd9af65019e1851c2b739d95139e26aff5be7bf8 Mon Sep 17 00:00:00 2001 From: jinyaqiu Date: Mon, 18 Aug 2025 15:59:37 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=A0=B7=E5=BC=8F=E3=80=82=E3=80=82?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UserInterfaceState.xcuserstate | Bin 99683 -> 99693 bytes wake/Info.plist | 20 ++ wake/View/Login/Login.swift | 171 ++++++++++++------ 3 files changed, 135 insertions(+), 56 deletions(-) diff --git a/wake.xcodeproj/project.xcworkspace/xcuserdata/elliwood.xcuserdatad/UserInterfaceState.xcuserstate b/wake.xcodeproj/project.xcworkspace/xcuserdata/elliwood.xcuserdatad/UserInterfaceState.xcuserstate index 4d3fbc5b21215b207a399e9c918dc88480a87c5d..39fe2f50bdcb3ef1598445580ab4d405919a64b8 100644 GIT binary patch delta 38713 zcmZ_V2YeLe+V}BUva_qOQ+H=)mk>IHlF+;K-h1yY^xk`N(|cPW^pXHVkls{m*eQyj zC`wTf5k&THG1(bqHA*HZVL@BDoE5(%J zN(rTuQc{bpdN0g(=G38a|4dqScE#*VylyY6Up?s^{RK8PgDc>u% zl^>KJl{?B^<$>~#@>G@7oN6xBrz)zUT56n{SIwu!tHsphx@tYOzS=--s5Vj?t4-9V zYBROD+Cpukc2>KnUDdv7KefL)OdYO{P$#LA)hX&!HCdgdM$}d6YITj8s;*Vnsq57= zHC^4V?ofBC8R`M`pn6DsRXw48s(z+kR6ke0P%o)ps$Z#>)hp^%^}2dn{XzXz{Z0Kn zS$(4ZqdwIn&86)RLT5c^?tEg4dDr;4=s#-Pe1+BVPL#wIP(rRn!|hAdTG72A=*%Fm^NG+t&P{_XmhoB+I($+woqH7MYL7gdToQ2u5H&|(_Yu!(B9PE z(oSk`Ywu|9YVT?9Yp1p3^V*l%SK4LmTkWRyopx8dr~Rt^rajOe={fWmJyy@7$LV?X ze0qMpfL>59q!-qU=*9IidRe`kUQK^NuddhE8|V%7)_NPgt=>-Wq<7Q%>HYO-`gDDU zo~))^tt*%eTBYGU$1Y_)AjB8K7D_(en3B{AJt#cPwH>$U+I_iEBaOa zn*O!^jecFfp?|C2)Nku|^@sYO`d>zj;WlK$W8^ecBWT!0J|n+T#i(jjGhQ&N8#RoY zMlGYZQOBrjG&EWm9gL1fC!?3q+ZbXDHHI0(jnT$~@zD6w_{(@?{B1lo zo*4faPt6!JrSIn#CHS>mf%lzKFZQe6~HGlKx^yl*X{EA=oYku8t_)Wjx zAMl6#`TX(zV*cX(vi@@Z>i!!3n*Lh;dj8}_{#O3h{z3l1{vrOM{$c*%{t^C>{!#wX z{xSXu{^|ZX{<;2n{$>8<{uTZW{*C@k{>}b0|4#ot|9<}m{tx}9{HOhA{Ac|i`9Job z^MB$$@4x83;=k$t&VS2)&;P6cH~;VchyK39@rk(5!fF%5I7h(6gU=mHSl)eoxr<+vw@ES-vw?3z7O0E z{1Esta3}Cn;OD?EfxCg<1CIiKTQOF$+mbECQZ3C2Te+=RE02}mDr_ZKiBxgy2dd+&*de3^_`q(;WePVrOUG`a5tgF^_>pSab>z7Cw z#pXIl;NXdBJ7D<-zsA4Z)4UO~Gx!9l^c9eUYt-mHbKYv*6|6 zmEg_bcfni1d%<6WzXg8}J`DbC$JlOLwmr6LYj$zFgk923uoLZ4c4@neUDhsVm$xg} zRqR@JZM(7E#BOT0wcFY4?VffoySLrPPO=BvL+mN`RC}5|-JW45+bQ;Zdx5>oUT&|j z*V*gsL-t|&NV0v@K4u@cU$$SdU$sxzui098iZPeT83JM zI)yri`i6#tMuaAWri5mO7KWCFmW4KiHikBZk~fF8gtmsZg?5B8LVH4oLq|d{hu#jo z6M8rFUg%Wlhgw?Pa4u$iC zi-zOF#lpqIWy9sdmBLlS)x-6}jlxaC9mAc%ox@$iUBf-Xy~F*&1Hv=H$>Ef+2+xd^ z)4~;(g;$0*hqr{chPQ>&!s+4d;T_>U;iKVW;p5?#!>@#24Zj=i`KT{NZLbSIgd5;VmG%H4cAYZ+U^v zM?}mgBIZZoeqOi>3wJx=9x2?Z!hJ}%&k6SrLXHt~oRF&sxxJ7_3VETBw+s1AA%7|4 z`@&-gPonTN6`ldYGh28z3(pDR`A&GH!{?HQ7t5LJe9SZvGfBiuj@0>WX0cqCBrVsM zF|)h3Y*%Xh_`&`AP9B#uww33P`3VyeMuRp8=p#wq)M7^qHl^6O!H0hO%^dPikMw#zNtQTwOhoz6xnv8 zNvu!!X7dG}p1xVa^@E7XNOPU@%}rS&V)jJD>ezyde9NR@x^J;>iEpWh*(+l9iJ1NA zzU96ZPH_iB%t5C(k8dsKS{G@!CSKmi(Wc0lHHo>m`qEiCW`!?Jxblja!~a_PeEU$W zZ@2G=l#t=e@a^%vyC$}jhgN$IB42KFSQ}Ph$Bil4E_m{FtLBky7gu zViie=i6*4vh$eK-N$5K#{0|~dLdx?>fP|EsN-o8xD2l3Rimn)nsrVy%);kG(m7!Rf z2`S;sgp@cZq089`U453&Z4&C>GD{MWk|1KPWCf&@j@0@hPadU`QkAVJm6a+Y=9-B4 zI!&pjydYw}5ivKM6bz-dQjah2^i=9b2jzO?{1*iZDNU3Xl&>^Znkmgi%(o)uril42 zU1_Pba>~CYV!n@-uXL0&rBmeCrg*t4N8KVfHYMskl|Gr(_l{QogR^3+GEf=g)I3NT ztPD|xD#MiF$_QnoGD;a8>A5+!w21j5Lm8V@^F(EmGFd93Om%9$pI!4`!YvE8hXHYW zqeZt};1s=3#5~9@dI?jZELD~{M9f1G^JnHOmri-TY}RBbYm{|PCaKC=5%WmI{GFz( zS2l>4$0Fuw^x{#rD$azH2@}r6^Mw8>JDmRg6FIOoPr(djpA*g=e(U+8g+4($F9y$5^sgSrW+@Un(Z{@LYhlM*|#Ms`npi7mh zU(KP$sBYoTE!?rfohM!Os9vZ3IN{D4tzYFvrD_p*N4#uu#vC?PA#rhloIx+CDf8?f|{t7QcJ64)Us+h zwY*v(a%)H4^1@wuk6KA8>_nti^Au34JNFm0mJ?B#6eW6paaSNB;jSIM=epZOeqDbd z^3Bt|?bMberM438vRO%~ZAnUPr?z(pcRAr^edm>VQuSO}d8ysho@`p}uJ#b_io#tf zP3@)j7VgTzT`f9KYLYrAv*>}*qN_Mn4RMOD8X2-HPr;GuSSQa>>S%S0aK9kj)rGr8 zx;joB@8nrixNBwRIgJ#jN6PGums2 NeMgEIqF<>o;qJ$pe_{dI>KF7 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 delta 38772 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 diff --git a/wake/Info.plist b/wake/Info.plist index efad56b..3a0d680 100644 --- a/wake/Info.plist +++ b/wake/Info.plist @@ -7,5 +7,25 @@ Quicksand x.ttf SankeiCutePopanime.ttf + + + CFBundleURLTypes + + + CFBundleURLSchemes + + $(PRODUCT_BUNDLE_IDENTIFIER) + + + + + ASAuthorizationAppleIDProvider + $(PRODUCT_BUNDLE_IDENTIFIER) + + LSApplicationQueriesSchemes + + appleid + appleauth + diff --git a/wake/View/Login/Login.swift b/wake/View/Login/Login.swift index 72b526f..d9d4dde 100644 --- a/wake/View/Login/Login.swift +++ b/wake/View/Login/Login.swift @@ -1,4 +1,5 @@ import SwiftUI +import AuthenticationServices import Alamofire struct Post: Codable { @@ -16,88 +17,146 @@ struct Login: Encodable { struct LoginView: View { @Environment(\.dismiss) private var dismiss @State private var showModal = false - @State private var username = "" - @State private var password = "" @State private var isLoading = false var body: some View { NavigationView { ZStack { VStack { - // Back button and settings - HStack { - Button(action: { dismiss() }) { - HStack { - Image(systemName: "chevron.left") - Text("返回") - } - .padding() - } - Spacer() + // App logo or title + VStack { + Image(systemName: "person.circle.fill") + .resizable() + .frame(width: 80, height: 80) + .foregroundColor(.blue) + .padding(.bottom, 20) - Button(action: { showModal = true }) { - Image(systemName: "gearshape") - .font(.title2) - .padding() - } + Text("Welcome") + .font(.largeTitle) + .fontWeight(.bold) + .padding(.bottom, 40) } - // Login form - VStack(spacing: 20) { - Text("邮箱登录").font(.title) - - // Username field - TextField("请输入用户名", text: $username) - .textFieldStyle(RoundedBorderTextFieldStyle()) - .padding(.horizontal) - - // Password field - SecureField("请输入密码", text: $password) - .textFieldStyle(RoundedBorderTextFieldStyle()) - .padding(.horizontal) - - // Login button - Button(action: handleLogin) { - if isLoading { - ProgressView() - } else { - Text("登录") + // Apple Sign In Button + SignInWithAppleButton( + onRequest: { request in + request.requestedScopes = [.fullName, .email] + }, + onCompletion: { result in + switch result { + case .success(let authResults): + print("Authorization successful: \(authResults)") + // Handle successful authentication + // You can get user details from authResults.credential + if let appleIDCredential = authResults.credential as? ASAuthorizationAppleIDCredential { + let userId = appleIDCredential.user + let email = appleIDCredential.email + let fullName = appleIDCredential.fullName + + print("User ID: \(userId)") + print("Email: \(email ?? "No email")") + print("Name: \(fullName?.givenName ?? "") \(fullName?.familyName ?? "")") + + // TODO: Send this information to your backend + // For example: + // loginWithApple(userId: userId, email: email, name: "\(fullName?.givenName ?? "") \(fullName?.familyName ?? "")") + + // Dismiss the login view after successful login + DispatchQueue.main.async { + self.dismiss() + } + } + + case .failure(let error): + print("Authorization failed: \(error.localizedDescription)") + // Handle error } } - .buttonStyle(.borderedProminent) - .disabled(isLoading) - .padding() + ) + .signInWithAppleButtonStyle(.black) // or .white, .whiteOutline + .frame(height: 50) + .padding(.horizontal, 40) + .padding(.bottom, 20) + + // Terms and Privacy Policy + VStack(spacing: 8) { + Text("By continuing, you agree to our") + .font(.caption) + .foregroundColor(.gray) + + HStack(spacing: 16) { + Button("Terms of Service") { + // Open terms URL + if let url = URL(string: "https://yourwebsite.com/terms") { + UIApplication.shared.open(url) + } + } + .font(.caption) + .foregroundColor(.blue) + + Text("•") + .foregroundColor(.gray) + + Button("Privacy Policy") { + // Open privacy policy URL + if let url = URL(string: "https://yourwebsite.com/privacy") { + UIApplication.shared.open(url) + } + } + .font(.caption) + .foregroundColor(.blue) + } } + .padding(.bottom, 40) + Spacer() } + .padding() .navigationBarHidden(true) .navigationBarBackButtonHidden(true) - // Modal view - if showModal { + // Loading indicator + if isLoading { Color.black.opacity(0.4) .edgesIgnoringSafeArea(.all) - .onTapGesture { showModal = false } - // Your modal content here - VStack { - Text("Settings") - Button("Close") { showModal = false } - } - .frame(width: 300, height: 200) - .background(Color.white) - .cornerRadius(20) + ProgressView() + .scaleEffect(1.5) + .progressViewStyle(CircularProgressViewStyle(tint: .white)) } } } } - func handleLogin() { + // Example function to handle login with your backend + private func loginWithApple(userId: String, email: String?, name: String) { isLoading = true - // Your login logic here - DispatchQueue.main.asyncAfter(deadline: .now() + 1) { - isLoading = false - } + + // Replace with your actual API endpoint + let url = "https://your-api-endpoint.com/auth/apple" + let parameters: [String: Any] = [ + "appleUserId": userId, + "email": email ?? "", + "name": name, + // Add any other required parameters + ] + + AF.request(url, method: .post, parameters: parameters, encoding: JSONEncoding.default) + .validate() + .responseJSON { response in + isLoading = false + + switch response.result { + case .success(let value): + print("Login successful: \(value)") + // Handle successful login (e.g., save auth token, navigate to home screen) + dismiss() + + case .failure(let error): + print("Login failed: \(error.localizedDescription)") + // Show error message to user + } + } } }