AppShared.swift
2.81 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
//
// 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") && (userSummary?.accessToken?.count ?? 0 > 0)
}
private(set) var agent = UserAgent()
private(set) var payment = ApplePayment()
var baseUrl: String = "https://api.doublefeel.cn"
var token: String?
var userId: String?
var userSummary: FlutterUserSummary?
/// 冷启动待处理的urlstring
var unhandedUrl: String?
private init(){
login()
}
func login(){
token = AppGroupConstants.defaults?.string(forKey: AppGroupConstants.Key.token)
userId = AppGroupConstants.defaults?.string(forKey: AppGroupConstants.Key.userId)
if let url = AppGroupConstants.defaults?.string(forKey: AppGroupConstants.Key.baseUrl){
baseUrl = url
}
}
func logout(){
token = nil
userId = nil
userSummary = nil
}
func reportDeviceInfo() async{
guard AppShared.shared.isLogin else {
print("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
}
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)")
} catch {
print("upload device info failed: \(error.localizedDescription)")
}
}
}