AppShared.swift
3.38 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
//
// AppShared.swift
// Runner
//
// Created by 权海 on 2026/6/17.
//
import Foundation
let kAppId = "6747254434"
class AppShared{
static let shared = AppShared()
var isLogin: Bool{
baseUrl.hasPrefix("http") && (token?.count ?? 0 > 0)
}
private(set) var agent = UserAgent()
private(set) var payment = ApplePayment()
var baseUrl: String{
myUserInfo?.baseUrl ?? "https://api.doublefeel.cn"
}
var token: String?{
myUserInfo?.token
}
var userId: Int?{
myUserInfo?.userId
}
private(set) var myUserInfo: UserInfoModel?{
didSet{
WatchConnectivityService.shared.transferLoginInfo(userInfo: myUserInfo)
}
}
/// 冷启动待处理的urlstring
var unhandedUrl: String?
private init(){
login(userInfo: nil)
}
func login(userInfo: UserInfoModel?){
if let userInfo{
myUserInfo = userInfo
return
}
guard let data = AppGroupConstants.defaults?.data(forKey: AppGroupConstants.Key.myUserInfo) else{
return
}
do{
myUserInfo = try JSONDecoder().decode(UserInfoModel.self, from: data)
}catch{
}
}
func logout(){
myUserInfo = nil
AppGroupConstants.defaults?.removeObject(forKey: AppGroupConstants.Key.myUserInfo)
}
func reportDeviceInfo() async{
guard AppShared.shared.isLogin else {
print("reportDeviceInfo not login")
return
}
guard let baseURL = URL(string: AppShared.shared.baseUrl),
let url = URL(string: "/client/doublefeel/user/device/", relativeTo: baseURL)?.absoluteURL else {
print("error invalid baseUrl \(AppShared.shared.baseUrl)")
return
}
/// 推送平台 choices: [(1, '小米'), (2, '华为'), (3, 'oppo'), (4, 'vivo'), (5, '荣耀'), (100, '苹果')]
var params: [String: String] = ["push_platform": "100"]
params["device_info"] = AppShared.shared.agent.deviceInfo
params["device_token"] = AppGroupConstants.defaults?.string(forKey: AppGroupConstants.Key.appDeviceToken)
params["watch_device_token"] = AppGroupConstants.defaults?.string(forKey: AppGroupConstants.Key.watchDeviceToken)
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.timeoutInterval = 30
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.setValue("application/json", forHTTPHeaderField: "Accept")
request.setValue(AppShared.shared.token, forHTTPHeaderField: "access_token")
request.setValue(AppShared.shared.agent.finalUA, forHTTPHeaderField: "User-Agent")
do {
request.httpBody = try JSONSerialization.data(withJSONObject: params)
let (data, response) = try await URLSession.shared.data(for: request)
guard let httpResponse = response as? HTTPURLResponse else {
return
}
let bodyText = String(data: data, encoding: .utf8) ?? ""
print("upload device info status=\(httpResponse.statusCode), body=\(bodyText)")
guard (200..<300).contains(httpResponse.statusCode) else {
return
}
} catch {
print("upload device info failed: \(error.localizedDescription)")
}
}
}