KeyboardApi.swift 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. //
  2. // KeyboardApi.swift
  3. // AiKeyboard
  4. //
  5. // Created by Destiny on 2025/4/28.
  6. //
  7. import Foundation
  8. import UIKit
  9. import AdSupport
  10. import AppTrackingTransparency
  11. enum NetworkEnvironment {
  12. case local
  13. case dev
  14. case prod
  15. }
  16. struct KeyboardApi {
  17. static let env: NetworkEnvironment = .local
  18. static let localUrl = "http://192.168.10.113:8880"
  19. static let devUrl = "http://42.193.245.11"
  20. static let prodUrl = "https://project-api.atmob.com"
  21. static func getBaseUrl() -> String {
  22. switch KeyboardApi.env {
  23. case .local:
  24. return KeyboardApi.localUrl
  25. case .dev:
  26. return KeyboardApi.devUrl
  27. case .prod:
  28. return KeyboardApi.prodUrl
  29. }
  30. }
  31. static var params: [String:Any] = [
  32. "channelName":"appstore",
  33. "idfa":"",
  34. "idfv":"",
  35. "packageName":"com.qihuan.zhuiaijianpan",
  36. "appPlatform":2,
  37. "appVersionName":"1.0.0",
  38. "appVersionCode":100,
  39. "authToken": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0aWQiOiI1MWNkNGQzYTkyNmYyMGJlIiwicHJqIjoicHJvamVjdF9rZXlib2FyZCIsInByZCI6ImNvbS5xaWh1YW4uemh1aWFpamlhbnBhbiIsInBrZyI6ImNvbS5xaWh1YW4uemh1aWFpamlhbnBhbiIsInBsZiI6MiwiZGlkIjoiZjMxODEyYzc5OTVjNDJiYmJlZDg2N2FhYzE2Nzg2YTIiLCJyZWciOjE3NDU4OTY1ODkwMDAsInNpZCI6Ijg2NmUyYTRhZjE3ODRmODA4N2NlYTg4ZDdiOWViYjcwIiwidWlkIjoiZmNkZmI5ZmE4NzFiNGRlOWI5ZTc0NTMxODAxZWE3YjUiLCJsb2ciOjEsImV4cCI6MTc2MTU0NTkyMCwiaWF0IjoxNzQ1OTk3NTIwLCJpc3MiOiJkZXYifQ.LWbuvY42U_f0bRd6uiILORU7j9910UyYLNAzuwx1l4qQNc3PblylB28OvhVw38IhbVSEYa6teW1prkG2XkGxs1roEqhJ1kuoT-16scz8UJPfr3dvsO_Xl-m4jip4ThhR8pJWIRVaIrOpQhLuQO38VSeQKDOR_HR1LonHmPY"
  40. ]
  41. static func updateAppVersionName(appVersionName: String) {
  42. params["appVersionName"] = appVersionName
  43. }
  44. static func updateAppVersionCode(appVersionCode: Int) {
  45. params["appVersionCode"] = appVersionCode
  46. }
  47. static func updateIDFV(idfv: String) {
  48. params["idfv"] = idfv
  49. }
  50. static func updateIDFA(idfa: String) {
  51. params["idfa"] = idfa
  52. }
  53. // 初始化基本参数
  54. static func initParams() {
  55. // 获取版本号
  56. if let appVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String {
  57. debugPrint("App Version: \(appVersion)")
  58. KeyboardApi.updateAppVersionName(appVersionName: appVersion)
  59. let array = appVersion.components(separatedBy: ".")
  60. var appVersionCode = ""
  61. for i in array {
  62. appVersionCode.append(i)
  63. }
  64. if appVersionCode.count < 3 {
  65. appVersionCode.append("0")
  66. }
  67. KeyboardApi.updateAppVersionCode(appVersionCode: Int(appVersionCode) ?? 100)
  68. } else {
  69. debugPrint("Unable to retrieve app version")
  70. }
  71. // 获取 设置uuid 并更新
  72. if let uuid = UIDevice.current.identifierForVendor?.uuidString {
  73. KeyboardApi.updateIDFV(idfv: uuid)
  74. debugPrint("IDFV ID: \(uuid)")
  75. } else {
  76. debugPrint("获取 IDFV ID 参数失败")
  77. }
  78. // 获取idfa
  79. initIDFA()
  80. }
  81. // 初始化idfa
  82. static func initIDFA() {
  83. DispatchQueue.global().asyncAfter(deadline: .now() + 0.1){
  84. if #available(iOS 14.0, *) {
  85. // 用户请求授权获得IDFA权限
  86. ATTrackingManager.requestTrackingAuthorization { status in
  87. if status == .authorized {
  88. debugPrint("授权成功")
  89. // 用户已授权
  90. let idfa = ASIdentifierManager.shared().advertisingIdentifier
  91. debugPrint("IDFA: \(idfa.uuidString)")
  92. KeyboardApi.updateIDFA(idfa: idfa.uuidString)
  93. } else {
  94. debugPrint("无法获取idfa")
  95. }
  96. }
  97. } else {
  98. // 检查用户是否授权应用使用广告标识符
  99. if ASIdentifierManager.shared().isAdvertisingTrackingEnabled {
  100. // 获取 IDFA
  101. let idfa = ASIdentifierManager.shared().advertisingIdentifier
  102. KeyboardApi.updateIDFA(idfa: idfa.uuidString)
  103. debugPrint("IDFA: \(idfa)")
  104. } else {
  105. debugPrint("用户拒绝广告追踪")
  106. }
  107. }
  108. }
  109. }
  110. }
  111. extension KeyboardApi {
  112. // 获取键盘人设列表
  113. static let character_list = "/project/keyboard/v1/character/list"
  114. // 获取键盘列表
  115. static let keyboard_list = "/project/keyboard/v1/keyboard/list"
  116. // 选择键盘
  117. static let keyboard_choose = "/project/keyboard/v1/keyboard/choose"
  118. // 获取开场白列表
  119. static let prologue_list = "/project/keyboard/v1/keyboard/prologue/list"
  120. // 获取用户信息
  121. static let user_info = "/project/keyboard/v1/user/info"
  122. }
  123. extension KeyboardApi {
  124. // 超会回
  125. static let chat_super_reply = "/project/keyboard/v1/chat/superReply"
  126. // 超会说
  127. static let chat_super_speak = "/project/keyboard/v1/chat/superSpeak"
  128. // 开场白
  129. static let chat_super_prologue = "/project/keyboard/v1/chat/prologue"
  130. }