Browse Source

暂时屏蔽qq音乐热启动

newdev_shunjiawei
liwei1dao 1 year ago
parent
commit
84fbb850be
  1. 128
      local_plugins/qq_music/ios/qq_music/Sources/qq_music/QPlayAutoManager.swift
  2. 66
      local_plugins/qq_music/ios/qq_music/Sources/qq_music/QqMusicPlugin.swift

128
local_plugins/qq_music/ios/qq_music/Sources/qq_music/QPlayAutoManager.swift

@ -220,36 +220,87 @@ import QPlayAutoSDK
// MARK: - Connection Management
@objc public func connect(forceLogin: Bool = false) {
print("QPlayAutoManager: 🔗 开始连接,forceLogin: \(forceLogin)")
guard isAppRegistered else {
print("QPlayAutoManager: App not registered, registering first")
print("QPlayAutoManager: ❌ App未注册,先执行注册")
registerAppWithDefaultConfig()
return // 添加这个return语句
return
}
print("QPlayAutoManager: App已注册,开始连接重试机制")
// Add retry mechanism for socket errors
connectWithRetry(forceLogin: forceLogin, retryCount: 3)
}
private func connectWithRetry(forceLogin: Bool, retryCount: Int) {
print("QPlayAutoManager: 连接重试,剩余次数: \(retryCount), forceLogin: \(forceLogin)")
guard retryCount > 0 else {
print("QPlayAutoManager: Connection failed after all retries")
print("QPlayAutoManager: ❌ 连接失败,所有重试次数已用完")
print("QPlayAutoManager: 最终状态 - isConnected: \(isConnected), isLoginOK: \(isLoginOK)")
notifyLoginCompletion(false)
return
}
let startTime = Date()
print("QPlayAutoManager: 调用 QPlayAutoSDK.connectAndForceLogin(\(forceLogin))")
QPlayAutoSDK.connectAndForceLogin(forceLogin)
// If connection fails due to socket error, retry after cleanup
DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
let endTime = Date()
let duration = endTime.timeIntervalSince(startTime)
print("QPlayAutoManager: 连接尝试完成,耗时: \(String(format: "%.2f", duration))秒")
print("QPlayAutoManager: 连接状态检查 - isConnected: \(self.isConnected)")
if !self.isConnected {
print("QPlayAutoManager: Connection failed, retrying... (\(retryCount - 1) attempts left)")
print("QPlayAutoManager: ⚠️ 连接失败,准备重试 (剩余 \(retryCount - 1) 次)")
print("QPlayAutoManager: 执行清理操作")
QPlayAutoSDK.stop()
self.connectWithRetry(forceLogin: forceLogin, retryCount: retryCount - 1)
} else {
print("QPlayAutoManager: ✅ 连接成功")
if forceLogin {
print("QPlayAutoManager: 强制登录模式,等待用户授权...")
}
}
}
}
@objc public func reconnect(timeout: TimeInterval, completion: @escaping (Bool, [String: Any]?) -> Void) {
print("QPlayAutoManager: 开始执行reconnect,超时时间: \(timeout)秒")
print("QPlayAutoManager: 执行前状态检查:")
print(" - isConnected: \(QPlayAutoSDK.isConnected())")
print(" - isConnecting: \(QPlayAutoSDK.isConnecting())")
print(" - isLoginOK: \(QPlayAutoSDK.isLoginOK())")
print(" - isQQMusicInstalled: \(QPlayAutoSDK.isQQMusicInstalled())")
let startTime = Date()
QPlayAutoSDK.reconnect(withTimeout: timeout) { (success, dict) in
let endTime = Date()
let duration = endTime.timeIntervalSince(startTime)
print("QPlayAutoManager: reconnect完成,耗时: \(String(format: "%.2f", duration))秒")
print("QPlayAutoManager: reconnect结果: \(success ? "成功" : "失败")")
print("QPlayAutoManager: 返回数据: \(dict ?? [:])")
print("QPlayAutoManager: 执行后状态检查:")
print(" - isConnected: \(QPlayAutoSDK.isConnected())")
print(" - isConnecting: \(QPlayAutoSDK.isConnecting())")
print(" - isLoginOK: \(QPlayAutoSDK.isLoginOK())")
if !success {
// 分析可能的失败原因
if !QPlayAutoSDK.isQQMusicInstalled() {
print("QPlayAutoManager: ❌ 失败原因:QQ音乐未安装")
} else if !QPlayAutoSDK.isConnected() {
print("QPlayAutoManager: ❌ 失败原因:网络连接失败或服务不可用")
} else {
print("QPlayAutoManager: ❌ 失败原因:token验证失败或其他SDK内部错误")
}
}
completion(success, dict as? [String: Any])
}
}
@ -302,10 +353,55 @@ import QPlayAutoSDK
// 如果已经有登录请求在处理,直接返回
if loginCompletionHandlers.count > 1 {
print("QPlayAutoManager: 登录请求已在队列中,当前队列长度: \(loginCompletionHandlers.count)")
return
}
// 强制登录
// 首先尝试使用保存的token进行reconnect。 暂时reconnect接口无法使用先屏蔽自动登陆逻辑
// if hasValidStoredToken() {
// let tokenInfo = getStoredTokenInfo()
// print("QPlayAutoManager: 检测到有效token,开始热启动连接")
// print("QPlayAutoManager: Token信息 - OpenID: \(tokenInfo?["openId"] as? String ?? "未知")")
// print("QPlayAutoManager: Token信息 - 登录时间: \(tokenInfo?["loginTime"] as? Date ?? Date())")
// print("QPlayAutoManager: 当前连接状态 - isConnected: \(isConnected), isConnecting: \(isConnecting)")
// print("QPlayAutoManager: 当前登录状态 - isLoginOK: \(isLoginOK)")
//
// reconnect(timeout: 10.0) { [weak self] success, responseDict in
// if success {
// print("QPlayAutoManager: ✅ 热启动连接成功")
// print("QPlayAutoManager: 连接响应数据: \(responseDict ?? [:])")
// self?.notifyLoginCompletion(true)
// } else {
// print("QPlayAutoManager: ❌ 热启动连接失败")
// print("QPlayAutoManager: 失败响应数据: \(responseDict ?? [:])")
// print("QPlayAutoManager: 连接状态检查 - isConnected: \(self?.isConnected ?? false)")
// print("QPlayAutoManager: QQ音乐安装状态: \(self?.isQQMusicInstalled ?? false)")
// print("QPlayAutoManager: 开始执行强制登录流程")
// self?.forceLogin()
// }
// }
// } else {
print("QPlayAutoManager: ❌ 没有有效token,直接进行强制登录")
let tokenInfo = getStoredTokenInfo()
if tokenInfo == nil {
print("QPlayAutoManager: 原因:本地未存储任何token信息")
} else {
print("QPlayAutoManager: 原因:token已过期或无效")
print("QPlayAutoManager: 存储的token信息: \(tokenInfo!)")
}
forceLogin()
// }
}
private func forceLogin() {
print("QPlayAutoManager: 🔄 开始强制登录流程")
print("QPlayAutoManager: 执行前环境检查:")
print(" - QQ音乐安装状态: \(isQQMusicInstalled)")
print(" - App注册状态: \(isAppRegistered)")
print(" - 当前连接状态: \(isConnected)")
print(" - 当前登录状态: \(isLoginOK)")
// 强制登录,会跳转到QQ音乐
connect(forceLogin: true)
// 设置超时检查
@ -314,10 +410,30 @@ import QPlayAutoSDK
}
}
private func hasValidStoredToken() -> Bool {
guard let storedOpenId = UserDefaults.standard.string(forKey: Self.STORED_OPEN_ID_KEY),
let storedOpenToken = UserDefaults.standard.string(forKey: Self.STORED_OPEN_TOKEN_KEY),
let loginTime = UserDefaults.standard.object(forKey: Self.STORED_LOGIN_TIME_KEY) as? Date else {
return false
}
// 检查token是否过期
let currentTime = Date()
return currentTime.timeIntervalSince(loginTime) <= Self.TOKEN_EXPIRE_TIME
}
private func checkLoginTimeout() {
print("QPlayAutoManager: ⏰ 检查登录超时")
print("QPlayAutoManager: 当前状态 - 队列长度: \(loginCompletionHandlers.count), isLoginOK: \(isLoginOK)")
if !loginCompletionHandlers.isEmpty && !isLoginOK {
print("QPlayAutoManager: 登录超时")
print("QPlayAutoManager: ❌ 登录超时,清理回调队列")
print("QPlayAutoManager: 超时时状态 - isConnected: \(isConnected), isQQMusicInstalled: \(isQQMusicInstalled)")
notifyLoginCompletion(false)
} else if isLoginOK {
print("QPlayAutoManager: ✅ 登录已完成,无需超时处理")
} else {
print("QPlayAutoManager: 无待处理的登录请求")
}
}

66
local_plugins/qq_music/ios/qq_music/Sources/qq_music/QqMusicPlugin.swift

@ -140,38 +140,44 @@ public class QqMusicPlugin: NSObject, FlutterPlugin {
result(["success": true])
}
// 新增:登录功能
// 新增:自动登陆
private func handleLogin(_ call: FlutterMethodCall, result: @escaping FlutterResult) {
// 如果已经登录,直接返回登录信息
if QPlayAutoManager.shared.isLoginOK {
let openId = QPlayAutoManager.shared.openId ?? ""
let openToken = QPlayAutoManager.shared.openToken ?? ""
result([
"success": true,
"openId": openId,
"openToken": openToken,
"expireTime": ""
])
return
}
//iOS 暂时不支持自动登陆
result([
"success": false,
])
return
// 如果未登录,主动执行登录
QPlayAutoManager.shared.login { success in
DispatchQueue.main.async {
if success {
let openId = QPlayAutoManager.shared.openId ?? ""
let openToken = QPlayAutoManager.shared.openToken ?? ""
result([
"success": true,
"openId": openId,
"openToken": openToken,
"expireTime": ""
])
} else {
result(FlutterError(code: "LOGIN_FAILED", message: "登录失败", details: nil))
}
}
}
// if QPlayAutoManager.shared.isLoginOK {
// let openId = QPlayAutoManager.shared.openId ?? ""
// let openToken = QPlayAutoManager.shared.openToken ?? ""
// result([
// "success": true,
// "openId": openId,
// "openToken": openToken,
// "expireTime": ""
// ])
// return
// }
//
// // 如果未登录,主动执行登录
// QPlayAutoManager.shared.login { success in
// DispatchQueue.main.async {
// if success {
// let openId = QPlayAutoManager.shared.openId ?? ""
// let openToken = QPlayAutoManager.shared.openToken ?? ""
// result([
// "success": true,
// "openId": openId,
// "openToken": openToken,
// "expireTime": ""
// ])
// } else {
// result(FlutterError(code: "LOGIN_FAILED", message: "登录失败", details: nil))
// }
// }
// }
}
// 新增:搜索歌曲功能

Loading…
Cancel
Save