mirror of
https://github.com/easychen/pushdeer.git
synced 2024-11-02 00:29:20 +08:00
2136883536
支持微信登录, 支持同时绑定微信和苹果账号; 解决markdown标题文字显示不全的问题; markdown中的链接支持内嵌浏览器打开; 增加是否使用内置浏览器的设置项; 改名输入框, 失去焦点的时候也保存;
101 lines
2.7 KiB
Swift
101 lines
2.7 KiB
Swift
//
|
|
// LoginView.swift
|
|
// PushDeer
|
|
//
|
|
// Created by HEXT on 2021/12/25.
|
|
//
|
|
|
|
import SwiftUI
|
|
import AuthenticationServices
|
|
|
|
/// 登录界面
|
|
struct LoginView: View {
|
|
|
|
@EnvironmentObject private var store: AppState
|
|
@State private var showLoading = false
|
|
|
|
var body: some View {
|
|
VStack{
|
|
Spacer()
|
|
Image("logo.with.space")
|
|
.resizable()
|
|
.scaledToFit()
|
|
if Env.isSelfHosted {
|
|
Button("重置API endpoint") {
|
|
store.api_endpoint = ""
|
|
}
|
|
}
|
|
Spacer()
|
|
if showLoading {
|
|
ProgressView()
|
|
.scaleEffect(1.5)
|
|
.frame(height: 64)
|
|
} else {
|
|
// 苹果登录按钮
|
|
AppleSignInButton(
|
|
onRequest: { request in
|
|
request.requestedScopes = [.fullName, .email]
|
|
},
|
|
onCompletion: { result in
|
|
do {
|
|
showLoading = true
|
|
store.token = try await store.appleIdLogin(result).token
|
|
// 获取成功去主页
|
|
} catch {
|
|
showLoading = false
|
|
if (error as NSError).code == 1001 {
|
|
// 取消登录
|
|
HToast.showWarning(error.localizedDescription)
|
|
return
|
|
}
|
|
HToast.showError(error.localizedDescription)
|
|
}
|
|
}
|
|
)
|
|
.overlay(RoundedRectangle(cornerRadius: 6).stroke(Color.white))
|
|
.frame(maxWidth: 375, minHeight: 64, maxHeight: 64)
|
|
.padding()
|
|
|
|
#if !targetEnvironment(macCatalyst) && !APPCLIP && !SELFHOSTED
|
|
if WXApi.isWXAppInstalled() {
|
|
// 微信登录按钮
|
|
Button {
|
|
let req = SendAuthReq()
|
|
req.scope = "snsapi_userinfo";
|
|
req.state = "login";
|
|
WXApi.send(req) { b in
|
|
print("WXApi.send:", b)
|
|
}
|
|
// 微信登录请求发出去后面的逻辑在 AppDelegate 的 onResp 回调方法中处理
|
|
} label: {
|
|
HStack {
|
|
Image("weixin-login")
|
|
.resizable()
|
|
.renderingMode(.template)
|
|
.scaledToFit()
|
|
.frame(height:20)
|
|
Text("通过微信登录")
|
|
}
|
|
.font(.system(size: 26, weight: .semibold))
|
|
.foregroundColor(Color("weixinFgColor"))
|
|
.frame(maxWidth: 375, minHeight: 64, maxHeight: 64)
|
|
}
|
|
.background(Color("weixinBgColor"))
|
|
.cornerRadius(6)
|
|
.overlay(RoundedRectangle(cornerRadius: 6).stroke(Color("weixinFgColor")))
|
|
.padding()
|
|
}
|
|
#endif
|
|
}
|
|
Spacer()
|
|
}
|
|
.padding()
|
|
}
|
|
}
|
|
|
|
struct LoginView_Previews: PreviewProvider {
|
|
static var previews: some View {
|
|
LoginView()
|
|
}
|
|
}
|