微信分享去sdk

This commit is contained in:
joywayer
2026-06-30 17:40:54 +08:00
parent 04e702a99b
commit c1e51d2183
2 changed files with 198 additions and 146 deletions
+49 -32
View File
@@ -7,22 +7,22 @@
// docs/H5-Native-Contract.md §3.1 5mediaTypeAudio + §3.2 78
// gameui_play_voice / gameui_stop_voice
//
// ##
// ##
//
// daoqi msext NewRootVC.m / gameController.m voicePlayer / User_id
// VC
// daoqi msext NewRootVC.m / gameController.m voicePlayer / User_id
// VC `voicePlayer = [[AVAudioPlayer alloc]...]`
// ivar player
// `self.User_id` stopradio H5
// `gameui_stop_voice` payload ** user_id**
// H5
//
// - `lastUserId`mediaTypeAudio user mediaTypeAudio
// daoqi gameController.m:438
// `self.User_id=userid;` canbofang=NO
// - `gameui_stop_voice` payload `lastUserId` didFinishPlaying
// player daoqi stopradio self.User_id
// gameui_stop_voice user** daoqi **
// - play player
// ARC/ARC-like daoqi `voicePlayer = [[AVAudioPlayer alloc]...]`
//
// - stop **** onFinishdaoqi stop
// audioPlayerDidFinishPlaying stopradio
// user player `currentUser`
// - play player stop player
// `onFinish(currentUser)` H5 `gameui_stop_voice( user)`
// - / `currentUser` " user"
// onFinish
// - stop() onFinish daoqi
// stop
//
import AVFoundation
@@ -36,42 +36,57 @@ public final class VoicePlayer: NSObject, AVAudioPlayerDelegate {
private var player: AVAudioPlayer?
/// mediaTypeAudio user
/// daoqi self.User_id mediaTypeAudio
public private(set) var lastUserId: String = ""
/// user `player` `player != nil`
/// `player == nil` nil play / didFinishPlaying / decodeError
/// onFinish `gameui_stop_voice` payload /
private var currentUser: String?
/// AVAudioPlayer didFinishPlaying /
/// mediaTypeAudio handler closure gameui_stop_voice
/// payload `lastUserId` player user daoqi
/// / /
/// mediaTypeAudio handler closure H5 `gameui_stop_voice`
/// payload / player user user
public var onFinish: ((String) -> Void)?
private override init() { super.init() }
/// mediaTypeAudio user****
/// daoqi gameController.m:438voicePlaying=0 `self.User_id=userid`
public func recordIncomingUser(_ user: String) {
lastUserId = user
}
/// wav player stop player
/// `onFinish( user)` H5 player
/// - Throws: AVAudioPlayer /
public func play(_ wav: URL, user: String) throws {
// 1. player "" H5
// delegate nil player stop / dealloc
// didFinishPlaying onFinish
if let old = player {
old.delegate = nil
old.stop()
player = nil
if let interrupted = currentUser {
currentUser = nil
Self.log.debug("interrupted user=\(interrupted, privacy: .public)")
onFinish?(interrupted)
} else {
currentUser = nil
}
}
/// wav player daoqi
/// `recordIncomingUser(user)` lastUserId
/// - Throws: AVAudioPlayer /
public func play(_ wav: URL) throws {
// 2. player
let p = try AVAudioPlayer(contentsOf: wav)
p.delegate = self
guard p.prepareToPlay(), p.play() else {
throw PlayerError.startFailed
}
player = p
Self.log.debug("play \(wav.lastPathComponent, privacy: .public) user=\(self.lastUserId, privacy: .public)")
currentUser = user
Self.log.debug("play \(wav.lastPathComponent, privacy: .public) user=\(user, privacy: .public)")
}
/// onFinish
/// 使 H5 BackGameData 退
/// didFinishPlaying
public func stop() {
player?.delegate = nil
player?.stop()
player = nil
currentUser = nil
}
public enum PlayerError: Error, Sendable {
@@ -110,8 +125,10 @@ public final class VoicePlayer: NSObject, AVAudioPlayerDelegate {
/// player self.player + onFinish
private func handleFinish(playerIdentity: ObjectIdentifier, success: Bool) {
guard let current = player, ObjectIdentifier(current) == playerIdentity else { return }
let user = currentUser
player = nil
Self.log.debug("didFinish user=\(self.lastUserId, privacy: .public) success=\(success, privacy: .public)")
onFinish?(lastUserId)
currentUser = nil
Self.log.debug("didFinish user=\(user ?? "<nil>", privacy: .public) success=\(success, privacy: .public)")
if let user { onFinish?(user) }
}
}