Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
陈高翔
/
AoleiSports
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit b234e5a9
由
ilCode
编写于
2024-07-02 10:10:31 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
对接苹果登录
1 个父辈
b84af6ea
隐藏空白字符变更
内嵌
并排
正在显示
7 个修改的文件
包含
148 行增加
和
3 行删除
AoleiSports.xcodeproj/project.pbxproj
AoleiSports/Config/AoleiSports.entitlements
AoleiSports/Src/User/AppleSignInManager.swift
AoleiSports/Src/User/LoginController.swift
AoleiSports/Src/User/UserProvider.swift
AoleiSports/Src/Utils/ServerApi.swift
R.generated.swift
AoleiSports.xcodeproj/project.pbxproj
查看文件 @
b234e5a
...
...
@@ -85,6 +85,7 @@
5EA9FDCB2C25690100654E93 /* MatchInfoDetailCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5EA9FDCA2C25690100654E93 /* MatchInfoDetailCell.swift */; };
5EA9FDCD2C256C4A00654E93 /* JcInfoDetailModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5EA9FDCC2C256C4A00654E93 /* JcInfoDetailModel.swift */; };
5EAA223F2C17F87800404739 /* UIView+Ext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5EAA223E2C17F87800404739 /* UIView+Ext.swift */; };
5EAFFDD92C3391160091671D /* AppleSignInManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5EAFFDD82C3391160091671D /* AppleSignInManager.swift */; };
5EB268732C2915AE0044BA0C /* JcInfoDetailHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5EB268722C2915AE0044BA0C /* JcInfoDetailHeaderView.swift */; };
5EB268762C2957550044BA0C /* DiscoverController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5EB268752C2957550044BA0C /* DiscoverController.swift */; };
5EB268782C295DA80044BA0C /* HadoopController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5EB268772C295DA80044BA0C /* HadoopController.swift */; };
...
...
@@ -185,6 +186,8 @@
5EA9FDCA2C25690100654E93 /* MatchInfoDetailCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MatchInfoDetailCell.swift; sourceTree = "<group>"; };
5EA9FDCC2C256C4A00654E93 /* JcInfoDetailModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JcInfoDetailModel.swift; sourceTree = "<group>"; };
5EAA223E2C17F87800404739 /* UIView+Ext.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIView+Ext.swift"; sourceTree = "<group>"; };
5EAFFDD72C3388140091671D /* AoleiSports.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = AoleiSports.entitlements; sourceTree = "<group>"; };
5EAFFDD82C3391160091671D /* AppleSignInManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppleSignInManager.swift; sourceTree = "<group>"; };
5EB268722C2915AE0044BA0C /* JcInfoDetailHeaderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JcInfoDetailHeaderView.swift; sourceTree = "<group>"; };
5EB268752C2957550044BA0C /* DiscoverController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DiscoverController.swift; sourceTree = "<group>"; };
5EB268772C295DA80044BA0C /* HadoopController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HadoopController.swift; sourceTree = "<group>"; };
...
...
@@ -232,6 +235,7 @@
5E1E66B32C19AAC7009339F0 /* UpdateProfileController.swift */,
5E93B4892C1A935F00CD6536 /* PrivacyController.swift */,
5E93B48B2C1A985F00CD6536 /* LoginController.swift */,
5EAFFDD82C3391160091671D /* AppleSignInManager.swift */,
5E93B48D2C1A98BE00CD6536 /* RegisterController.swift */,
5E93B48F2C1A9BDC00CD6536 /* LoginTools.swift */,
5E9165D72C1D3F45004A3C5E /* UserProvider.swift */,
...
...
@@ -350,6 +354,7 @@
children = (
5E9A19F92C0EAC0300321AC5 /* Info.plist */,
5E65F88D2C2279160082D374 /* Localizable.strings */,
5EAFFDD72C3388140091671D /* AoleiSports.entitlements */,
5E6CF0202C1305DD00BF3CF5 /* AoleiSports.xcdatamodeld */,
);
path = Config;
...
...
@@ -630,6 +635,7 @@
5E5A69D72C2AB0560063B726 /* HadoopDetailController.swift in Sources */,
5E93B4902C1A9BDC00CD6536 /* LoginTools.swift in Sources */,
5EC03E532C118FA00068A5CB /* ScoreProvider.swift in Sources */,
5EAFFDD92C3391160091671D /* AppleSignInManager.swift in Sources */,
5E9A1A522C0F205A00321AC5 /* LeagueController.swift in Sources */,
5E9827BE2C2F95E6006D74D4 /* HadoopDetailRadarView.swift in Sources */,
5E9165D82C1D3F45004A3C5E /* UserProvider.swift in Sources */,
...
...
@@ -862,6 +868,7 @@
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_ENTITLEMENTS = AoleiSports/Config/AoleiSports.entitlements;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = L275Z886SW;
...
...
@@ -896,6 +903,7 @@
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_ENTITLEMENTS = AoleiSports/Config/AoleiSports.entitlements;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = L275Z886SW;
...
...
AoleiSports/Config/AoleiSports.entitlements
0 → 100644
查看文件 @
b234e5a
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist
version=
"1.0"
>
<dict>
<key>
com.apple.developer.applesignin
</key>
<array>
<string>
Default
</string>
</array>
</dict>
</plist>
AoleiSports/Src/User/AppleSignInManager.swift
0 → 100644
查看文件 @
b234e5a
//
// AppleSignInManager.swift
// AoleiSports
//
// Created by ilCode on 2024/7/2.
//
import
Foundation
import
AuthenticationServices
class
AppleSignInManager
:
NSObject
{
var
onSignInSuccess
:
((
String
,
String
)
->
Void
)?
var
onSignInFailure
:
((
Error
)
->
Void
)?
private
lazy
var
authorizationController
:
ASAuthorizationController
=
{
let
appleIDProvider
=
ASAuthorizationAppleIDProvider
()
let
request
=
appleIDProvider
.
createRequest
()
request
.
requestedScopes
=
[
.
fullName
,
.
email
]
let
controller
=
ASAuthorizationController
(
authorizationRequests
:
[
request
])
controller
.
delegate
=
self
controller
.
presentationContextProvider
=
self
return
controller
}()
func
performSignIn
()
{
authorizationController
.
performRequests
()
}
}
extension
AppleSignInManager
:
ASAuthorizationControllerDelegate
{
func
authorizationController
(
controller
:
ASAuthorizationController
,
didCompleteWithAuthorization
authorization
:
ASAuthorization
)
{
guard
let
appleIDCredential
=
authorization
.
credential
as?
ASAuthorizationAppleIDCredential
else
{
return
}
guard
let
appleIDToken
=
appleIDCredential
.
identityToken
else
{
return
}
guard
let
idTokenString
=
String
(
data
:
appleIDToken
,
encoding
:
.
utf8
)
else
{
return
}
onSignInSuccess
?(
appleIDCredential
.
user
,
idTokenString
)
}
func
authorizationController
(
controller
:
ASAuthorizationController
,
didCompleteWithError
error
:
Error
)
{
onSignInFailure
?(
error
)
}
}
extension
AppleSignInManager
:
ASAuthorizationControllerPresentationContextProviding
{
func
presentationAnchor
(
for
controller
:
ASAuthorizationController
)
->
ASPresentationAnchor
{
return
UIApplication
.
shared
.
windows
.
first
!
}
}
AoleiSports/Src/User/LoginController.swift
查看文件 @
b234e5a
...
...
@@ -202,6 +202,31 @@ class LoginController: BaseController {
return
stackView
}()
private
lazy
var
appleSignInManager
:
AppleSignInManager
=
{
let
manager
=
AppleSignInManager
()
manager
.
onSignInSuccess
=
{
appleId
,
token
in
print
(
"登录成功:
\(
appleId
)
, token:
\(
token
)
"
)
self
.
view
.
makeToastActivity
(
.
center
)
UserProvider
<
LoginOrRegisterTarget
>.
appleLoginRequest
(
appleId
:
appleId
,
token
:
token
)
{
logicResult
in
self
.
view
.
hideToastActivity
()
if
case
.
failure
(
let
failure
)
=
logicResult
{
self
.
view
.
makeToast
(
failure
.
localizedDescription
,
position
:
.
center
)
return
}
self
.
view
.
makeToast
(
"登录成功"
,
position
:
.
center
)
self
.
dismiss
(
animated
:
true
)
}
}
manager
.
onSignInFailure
=
{
error
in
self
.
view
.
makeToast
(
error
.
localizedDescription
,
position
:
.
center
)
}
return
manager
}()
override
func
viewDidLoad
()
{
super
.
viewDidLoad
()
...
...
@@ -463,8 +488,12 @@ class LoginController: BaseController {
}
@objc
private
func
appleLoginTapped
()
{
dealReadPrivacy
()
if
!
agreementCheckBox
.
isSelected
{
agreementCheckBox
.
shakeAnimation
()
return
}
AppleSignInManager
()
.
performSignIn
()
}
@objc
private
func
guestLoginTapped
()
{
...
...
AoleiSports/Src/User/UserProvider.swift
查看文件 @
b234e5a
...
...
@@ -16,6 +16,8 @@ enum LoginOrRegisterTarget: TargetType {
case
mobileCodeLogin
(
mobile
:
String
,
code
:
String
)
// 密码登录
case
pwdLogin
(
name
:
String
,
pwd
:
String
)
// 苹果登录
case
appleLogin
(
appleId
:
String
,
token
:
String
)
// 游客登录
case
guestLogin
// 退出登录
...
...
@@ -54,7 +56,15 @@ enum LoginOrRegisterTarget: TargetType {
}
"""
]
return
.
requestParameters
(
parameters
:
parameters
,
encoding
:
JSONEncoding
.
default
)
case
.
appleLogin
(
let
appleId
,
let
token
):
let
parameters
=
[
"query"
:
"""
mutation {
\(
APIs
.
kAppleLogin
)
(open_id: "
\
(
appleId
)
", token: "
\
(
token
)
")
}
"""
]
return
.
requestParameters
(
parameters
:
parameters
,
encoding
:
JSONEncoding
.
default
)
case
.
guestLogin
:
let
guestId
=
AppInfo
.
getUKey
()
let
parameters
=
[
"query"
:
"""
...
...
@@ -63,7 +73,7 @@ enum LoginOrRegisterTarget: TargetType {
}
"""
]
return
.
requestParameters
(
parameters
:
parameters
,
encoding
:
JSONEncoding
.
default
)
case
.
logout
:
let
parameters
=
[
"query"
:
"""
mutation {
...
...
@@ -180,6 +190,28 @@ class UserProvider<Target: TargetType>: BaseMoyaProvider<Target> {
}
}
// 苹果登录请求
static
func
appleLoginRequest
(
appleId
:
String
,
token
:
String
,
completion
:
@escaping
(
Result
<
Bool
,
AsError
>
)
->
Void
)
{
let
target
:
LoginOrRegisterTarget
=
.
appleLogin
(
appleId
:
appleId
,
token
:
token
)
moyaPost
(
api
:
APIs
.
kAppleLogin
,
target
:
target
)
{
midResult
in
DDLogInfo
(
"苹果登录请求接口数据:
\(
midResult
)
"
)
switch
midResult
{
case
let
.
success
(
midSuccessResult
):
let
appToken
=
midSuccessResult
[
"AppToken"
]
as?
String
var
resultDic
=
midSuccessResult
[
"Result"
]
as?
[
String
:
Any
]
??
[:]
resultDic
[
"AppToken"
]
=
appToken
let
userModel
=
UserModel
(
JSON
:
resultDic
)
UserManager
.
shared
.
saveUserData
(
userModel
:
userModel
)
completion
(
.
success
(
true
))
case
.
failure
(
let
err
):
completion
(
.
failure
(
err
))
}
}
}
// 退出登录请求
static
func
logoutRequest
(
completion
:
@escaping
(
Result
<
Bool
,
AsError
>
)
->
Void
)
{
moyaPost
(
api
:
APIs
.
kLogout
,
target
:
LoginOrRegisterTarget
.
logout
)
{
midResult
in
...
...
AoleiSports/Src/Utils/ServerApi.swift
查看文件 @
b234e5a
...
...
@@ -20,6 +20,8 @@ struct APIs {
static
let
kSmsLogin
=
"ydn_sms_login"
// 密码登录
static
let
kPwdLogin
=
"ydn_login"
// 苹果登录
static
let
kAppleLogin
=
"ydn_apple_login"
// 游客登录
static
let
kGuestLogin
=
"ydn_apple_login"
// 退出登录
...
...
R.generated.swift
查看文件 @
b234e5a
...
...
@@ -12,6 +12,9 @@ let R = _R(bundle: Bundle(for: BundleFinder.self))
struct
_R
{
let
bundle
:
Foundation
.
Bundle
let
entitlements
=
entitlements
()
var
string
:
string
{
.
init
(
bundle
:
bundle
,
preferredLanguages
:
nil
,
locale
:
nil
)
}
var
color
:
color
{
.
init
(
bundle
:
bundle
)
}
var
image
:
image
{
.
init
(
bundle
:
bundle
)
}
...
...
@@ -201,6 +204,14 @@ struct _R {
var
ssqb_selected
:
RswiftResources
.
ImageResource
{
.
init
(
name
:
"ssqb_selected"
,
path
:
[],
bundle
:
bundle
,
locale
:
nil
,
onDemandResourceTags
:
nil
)
}
}
/// This `_R.entitlements` struct is generated, and contains static references to 1 properties.
struct
entitlements
{
let
comAppleDeveloperApplesignin
=
comAppleDeveloperApplesignin
()
struct
comAppleDeveloperApplesignin
{
let
`
default
`
:
String
=
"Default"
}
}
/// This `_R.file` struct is generated, and contains static references to 6 resource files.
struct
file
{
let
bundle
:
Foundation
.
Bundle
...
...
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论