Преглед на файлове

feat: 补充观众进入主播首页的埋点

陈文艺 преди 5 месеца
родител
ревизия
3ffd6d7799

+ 14 - 0
MiMoLive.xcodeproj/project.pbxproj

@@ -2849,6 +2849,8 @@
 		FBB03B9B2EA21B7B00A14140 /* Double+Format.swift in Sources */ = {isa = PBXBuildFile; fileRef = FBB03B992EA21B7B00A14140 /* Double+Format.swift */; };
 		FBB03B9D2EA2247200A14140 /* MOBubbleToastView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FBB03B9C2EA2247200A14140 /* MOBubbleToastView.swift */; };
 		FBB03B9E2EA2247200A14140 /* MOBubbleToastView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FBB03B9C2EA2247200A14140 /* MOBubbleToastView.swift */; };
+		FBB75E7C2EB09850006A040B /* MOHttpManager+Track.swift in Sources */ = {isa = PBXBuildFile; fileRef = FBB75E7B2EB09850006A040B /* MOHttpManager+Track.swift */; };
+		FBB75E7D2EB09850006A040B /* MOHttpManager+Track.swift in Sources */ = {isa = PBXBuildFile; fileRef = FBB75E7B2EB09850006A040B /* MOHttpManager+Track.swift */; };
 		FBC2FE9E2E975E0600ACD8F7 /* AutoCodable in Frameworks */ = {isa = PBXBuildFile; productRef = FBC2FE9D2E975E0600ACD8F7 /* AutoCodable */; };
 		FBC2FEA02E975E0D00ACD8F7 /* AutoCodable in Frameworks */ = {isa = PBXBuildFile; productRef = FBC2FE9F2E975E0D00ACD8F7 /* AutoCodable */; };
 		FBCB31CC2E854C52005E6E3C /* MOPersonList+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = FBCB31CB2E854C52005E6E3C /* MOPersonList+Extension.swift */; };
@@ -5435,6 +5437,7 @@
 		FBAEB9EB2E9CFE3800BBA750 /* MORtmLivePKLinkInvite.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MORtmLivePKLinkInvite.swift; sourceTree = "<group>"; };
 		FBB03B992EA21B7B00A14140 /* Double+Format.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Double+Format.swift"; sourceTree = "<group>"; };
 		FBB03B9C2EA2247200A14140 /* MOBubbleToastView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MOBubbleToastView.swift; sourceTree = "<group>"; };
+		FBB75E7B2EB09850006A040B /* MOHttpManager+Track.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "MOHttpManager+Track.swift"; sourceTree = "<group>"; };
 		FBCB31CB2E854C52005E6E3C /* MOPersonList+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "MOPersonList+Extension.swift"; sourceTree = "<group>"; };
 		FBCB31D52E85523B005E6E3C /* icon_line_pk_match.webp */ = {isa = PBXFileReference; lastKnownFileType = file; path = icon_line_pk_match.webp; sourceTree = "<group>"; };
 		FBCB31D82E855524005E6E3C /* MOLinePkContributionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MOLinePkContributionView.swift; sourceTree = "<group>"; };
@@ -6038,6 +6041,7 @@
 		A601BAE52AD7F99E0021CF03 /* NetManager */ = {
 			isa = PBXGroup;
 			children = (
+				FBB75E7A2EB0983E006A040B /* Track */,
 				FB77301E2E9DE79E0022E8C8 /* Relation */,
 				FB249B942E9CAC4B0063E7FC /* Line+PK */,
 				A601BAE92AD7FB980021CF03 /* MOAPIUrl.h */,
@@ -11400,6 +11404,14 @@
 			path = Models;
 			sourceTree = "<group>";
 		};
+		FBB75E7A2EB0983E006A040B /* Track */ = {
+			isa = PBXGroup;
+			children = (
+				FBB75E7B2EB09850006A040B /* MOHttpManager+Track.swift */,
+			);
+			path = Track;
+			sourceTree = "<group>";
+		};
 		FBC2FEA12E9762B100ACD8F7 /* Models */ = {
 			isa = PBXGroup;
 			children = (
@@ -12776,6 +12788,7 @@
 				FBCB32AD2E867B03005E6E3C /* MOEventDeliver.swift in Sources */,
 				A6157ADC2E26712C00F8CD99 /* MOEffectResourceHelper.m in Sources */,
 				FB9A8B252E8A6A8500488A61 /* String+Localizable.swift in Sources */,
+				FBB75E7D2EB09850006A040B /* MOHttpManager+Track.swift in Sources */,
 				A6157ADD2E26712C00F8CD99 /* MOLicenseHelper.mm in Sources */,
 				A6157ADE2E26712C00F8CD99 /* MOImageUtils.m in Sources */,
 				A6157ADF2E26712C00F8CD99 /* BytesBeautyRender.m in Sources */,
@@ -13893,6 +13906,7 @@
 				FB069CD72E82B3FB00A3CD51 /* MOGLUtils.m in Sources */,
 				FB069CD82E82B3FB00A3CD51 /* MODynmicResourceConfig.m in Sources */,
 				FB7730222E9DE7BD0022E8C8 /* MOHttpManager+Relation.swift in Sources */,
+				FBB75E7C2EB09850006A040B /* MOHttpManager+Track.swift in Sources */,
 				FB069CD92E82B3FB00A3CD51 /* MOEffectResourceHelper.m in Sources */,
 				FB069CDA2E82B3FB00A3CD51 /* MOLicenseHelper.mm in Sources */,
 				FB069CDB2E82B3FB00A3CD51 /* MOImageUtils.m in Sources */,

+ 1 - 1
MiMoLive/Classes/Live/Model/NewLiveRoom/MORoomStatus.h

@@ -65,7 +65,7 @@
 
 #pragma mark - Pk V2
 /** 虚拟PK房间信息 */
-@property (nonatomic, strong) MOLinkPKInfo *linkPKInfo;
+@property (nonatomic, strong, nullable) MOLinkPKInfo *linkPKInfo;
 
 
 + (instancetype)modelObjectWithDictionary:(NSDictionary *)dict;

+ 26 - 2
MiMoLive/Classes/Live/ViewModels/MOLiveViewModel.swift

@@ -61,6 +61,29 @@ class MOLiveViewModel: NSObject {
             checkLineStatus(info)
         }
     }
+    
+    func isHost(_ uid: String) -> Bool {
+        guard let curJoinedRoom else { return false }
+        
+        // 是房主
+        if ownerUid == uid {
+            return true
+        }
+        
+        // 多人房主播
+        if let linkMics = curJoinedRoom.statusInfo.roomStatus.linkMics as? [MOLinkMic],
+           linkMics.first(where: { $0.profile.id == uid }) != nil {
+           return true
+        }
+        
+        // line 对方主播
+        if let lineViewModel,
+           lineViewModel.curPeerInfo?.userId == uid {
+            return true
+        }
+        
+        return false
+    }
 }
 
 extension MOLiveViewModel {
@@ -90,7 +113,8 @@ extension MOLiveViewModel {
     
     func checkLineStatus(_ newStatusInfo: MOStatusInfo) {
         guard curJoinedRoom != nil else { return }
-        let lineRoomId = newStatusInfo.roomStatus.linkPKInfo.pkLinkRoomId
+        guard let pkInfo = newStatusInfo.roomStatus.linkPKInfo else { return }
+        let lineRoomId = pkInfo.pkLinkRoomId
         
         guard lineViewModel?.curLineRoomId != lineRoomId else {
             // Line 房间号不变,已经加入了该 Line 房间
@@ -103,7 +127,7 @@ extension MOLiveViewModel {
             self.lineViewModel = nil
         }
         
-        if let lineRoomId, let token = newStatusInfo.roomStatus.linkPKInfo.agoraRtcToken,
+        if let lineRoomId, let token = pkInfo.agoraRtcToken,
            !lineRoomId.isEmpty, !token.isEmpty {
             // 创建新的 Line 房逻辑
             self.lineViewModel = MOLineViewModel(lineRoomId: lineRoomId, token: token)

+ 6 - 0
MiMoLive/Classes/Mine/Controller/AboutHomePage/MOUserHomePageVC.m

@@ -96,6 +96,12 @@
     }
     else{
         [self getUserInfoWith:userId];
+        
+        if (![MOLiveManager.curLive isHost:GetUserId]
+            && [MOLiveManager.curLive isHost:userId]) {
+            // 非主播,进入主播页,上报
+            [MOHttpManager.sharedManager reportVisistHostPage:userId handler:^(NSString * _Nullable error) { }];
+        }
     }
     
     if(userId.length == 0){

+ 17 - 0
MiMoLive/Global/NetManager/Track/MOHttpManager+Track.swift

@@ -0,0 +1,17 @@
+//
+//  MOHttpManager+Track.swift
+//  MiMoLive
+//
+//  Created by OneeChan on 2025/10/28.
+//
+
+import Foundation
+
+
+let kNetPath_TrackInteractReport = "/track/interact/report"
+
+extension MOHttpManager {
+    @objc func reportVisistHostPage(_ uid: String, handler: @escaping (String?) -> Void) {
+        sendPostRequest(path: kNetPath_TrackInteractReport, params: ["anchorUserId": uid, "type": 5], handler: handler)
+    }
+}