微信分享去sdk
This commit is contained in:
@@ -379,9 +379,9 @@ window.rootViewController = NavgationController
|
||||
**流程**:
|
||||
1. 下载 AMR 到本地
|
||||
2. `VoiceConverter ConvertAmrToWav` 转 WAV
|
||||
3. `AVAudioPlayer` 播放
|
||||
3. `AVAudioPlayer` 播放(若当前已有语音在播,先停旧、给 H5 发 `gameui_stop_voice(被打断 user)` 再起新播放)
|
||||
4. 开始播放时 callback H5:`gameui_play_voice(user)` (见 §3.2 [7])
|
||||
5. 播放结束 callback H5:`gameui_stop_voice(user)` (见 §3.2 [8])
|
||||
5. 播放结束 / 被打断 callback H5:`gameui_stop_voice(user)` (见 §3.2 [8])
|
||||
|
||||
##### 【6】 `voicePlaying` — 语音播放总开关
|
||||
|
||||
@@ -563,7 +563,7 @@ window.rootViewController = NavgationController
|
||||
| 5 | `shakeEnd` | motionEnded 摇一摇结束 | `nil` | ✓ | ✓ |
|
||||
| 6 | `getlocationinfo` | 定位成功/失败 | 见下方表 B | ✓ | ✓ |
|
||||
| 7 | `gameui_play_voice` | mediaTypeAudio 开始播放(且 voicePlaying=1 时)| 字符串 user_id | ✓ | ✓ |
|
||||
| 8 | `gameui_stop_voice` | mediaTypeAudio AVAudioPlayer 播放结束 | 字符串 user_id(最近一次 mediaTypeAudio 的 user 字段)| ✓ | ✓ |
|
||||
| 8 | `gameui_stop_voice` | mediaTypeAudio AVAudioPlayer 播放结束 / 被新一次 mediaTypeAudio 打断 / 解码失败 | 字符串 user_id(**该次结束 / 被打断的语音**所绑定的 user,不是入参里最新的 user — 与 daoqi 旧实现语义不同,详见下方 `gameui_stop_voice` 行为说明)| ✓ | ✓ |
|
||||
| 9 | `getaudiourl` | 录音 + 上传成功(七牛或旧 PostFile)| `{ "audiourl": "<七牛 URL>", "time": "<秒数字符串>" }` | ✓ | ✓ |
|
||||
| 10 | `sharelogin` | 微信授权 OAuth 拿到 userinfo 后 | 见下方表 C | ✓ | ✓ |
|
||||
| 11 | `sharesuccess` | 分享完成(微信 SendMessageToWXResp / 闲聊 finishBlock)| `{ "success": "2", "type": "<sharefriend 原值如 '1' 或 '2'>" }` | ✓ | ✓ |
|
||||
@@ -586,6 +586,21 @@ H5 端 N 年来收到的实际语义就是:**`"2"` = 进入后台、`"1"` =
|
||||
|
||||
(顺带:原 msext 还有一条 iOS<9 UIWebView 路径 `RootVC.m:516-543` / `fourviewVC.m:1254-1282`,发的值反过来:进入后台 → `"1"` / 回到前台 → `"2"`。该路径在新外壳最低 iOS 15.6 下完全不可达,**不能作为对齐依据**,请忽略。)
|
||||
|
||||
**`gameui_stop_voice` 行为说明**(与 daoqi 旧实现的有意差异,用户反馈驱动):
|
||||
|
||||
daoqi `NewRootVC.m:1736-1748` / `gameController.m:1288-1308` 把 `voicePlayer` / `self.User_id` 都作为 VC 成员变量。覆盖式播放(前一条还在播,第二条到来)的代码路径:
|
||||
1. `self.User_id = userid;` 先覆盖最新 user
|
||||
2. `voicePlayer = [[AVAudioPlayer alloc]...]` 直接换 ivar(MRC 下旧 player 实际泄漏继续在播)
|
||||
3. 旧 player 自然播完触发 `audioPlayerDidFinishPlaying:` → 调 `stopradio` → `callHandler:@"gameui_stop_voice" data:self.User_id`
|
||||
|
||||
结果:旧消息对应的 `gameui_stop_voice` 发出去的 user_id **实际是新消息的 user_id**;H5 收不到旧消息的停止动画信号,旧动画一直转,新消息那条反而停了。
|
||||
|
||||
新外壳实现(`VoicePlayer.swift`)把 user 与 player 一一绑定(`currentUser`):
|
||||
- 覆盖式 play 时**主动**停旧 player,并用旧 player 绑定的 user 触发一次 `gameui_stop_voice`,再起新播放 + `gameui_play_voice(新 user)`
|
||||
- 自然结束 / 解码失败:用结束那个 player 绑定的 user 发 `gameui_stop_voice`,不再读"最近一次入参"
|
||||
|
||||
H5 端无需任何改动:仍然按照"收到 `gameui_stop_voice(user)` 就停这个 user 的动画"处理即可,只是信号现在会更准。验证场景:H5 连发两条 `mediaTypeAudio`(user A → user B,A 还没播完 B 就来),现在 H5 会先收 `gameui_stop_voice(A)` 再收 `gameui_play_voice(B)`,B 播完再收 `gameui_stop_voice(B)`。daoqi 旧路径下 A 那次停止信号永远收不到。
|
||||
|
||||
**表 A — `getphoneinfo`**:
|
||||
```json
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user