瀏覽代碼

异常上报

Steven 11 月之前
父節點
當前提交
8ebabd39bd
共有 24 個文件被更改,包括 330 次插入38 次删除
  1. 18 4
      KulexiuForTeacher/KulexiuForTeacher.xcodeproj/project.pbxproj
  2. 1 1
      KulexiuForTeacher/KulexiuForTeacher.xcodeproj/xcshareddata/xcschemes/KulexiuForTeacher.xcscheme
  3. 42 0
      KulexiuForTeacher/KulexiuForTeacher/Common/Base/AccompanyWebView/KSAccompanyWebViewController.m
  4. 12 0
      KulexiuForTeacher/KulexiuForTeacher/Common/Base/KSNetworkingManager.h
  5. 16 0
      KulexiuForTeacher/KulexiuForTeacher/Common/Base/KSNetworkingManager.m
  6. 40 0
      KulexiuForTeacher/KulexiuForTeacher/Common/Base/LogManager/KSLogManager.h
  7. 55 0
      KulexiuForTeacher/KulexiuForTeacher/Common/Base/LogManager/KSLogManager.m
  8. 2 0
      KulexiuForTeacher/KulexiuForTeacher/Common/Base/LoginManger/TXIMLinsenter.h
  9. 17 0
      KulexiuForTeacher/KulexiuForTeacher/Common/Base/LoginManger/TXIMLinsenter.m
  10. 23 0
      KulexiuForTeacher/KulexiuForTeacher/Common/Base/WebView/KSBaseWKWebViewController.m
  11. 45 0
      KulexiuForTeacher/KulexiuForTeacher/Common/MediaMerge/AudioMerge/KSMediaMergeView.m
  12. 2 2
      KulexiuForTeacher/KulexiuForTeacher/Common/MediaMerge/AudioMerge/VideoPlayerView/KSVideoPlayerView.h
  13. 18 3
      KulexiuForTeacher/KulexiuForTeacher/Common/MediaMerge/AudioMerge/VideoPlayerView/KSVideoPlayerView.m
  14. 1 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Login/Model/UserInfoManager.m
  15. 18 18
      KulexiuForTeacher/KulexiuForTeacher/Module/Widget/Model/KSMetronomePlayer.m
  16. 二進制
      KulexiuForTeacher/KulexiuForTeacher/ToolKit/CloudAccompanyLibrary.framework/CloudAccompanyLibrary
  17. 3 0
      KulexiuForTeacher/KulexiuForTeacher/ToolKit/CloudAccompanyLibrary.framework/Headers/KSCloudWebViewController.h
  18. 5 0
      KulexiuForTeacher/KulexiuForTeacher/ToolKit/CloudAccompanyLibrary.framework/Headers/KSVideoRecordManager.h
  19. 2 0
      KulexiuForTeacher/KulexiuForTeacher/ToolKit/CloudAccompanyLibrary.framework/Headers/kSNewPlayer.h
  20. 二進制
      KulexiuForTeacher/KulexiuForTeacher/ToolKit/CloudAccompanyLibrary.framework/Info.plist
  21. 二進制
      KulexiuForTeacher/KulexiuForTeacher/ToolKit/CloudAccompanyLibrary.framework/_CodeSignature/CodeDirectory
  22. 二進制
      KulexiuForTeacher/KulexiuForTeacher/ToolKit/CloudAccompanyLibrary.framework/_CodeSignature/CodeRequirements-1
  23. 10 10
      KulexiuForTeacher/KulexiuForTeacher/ToolKit/CloudAccompanyLibrary.framework/_CodeSignature/CodeResources
  24. 二進制
      KulexiuForTeacher/KulexiuForTeacher/ToolKit/CloudAccompanyLibrary.framework/_CodeSignature/CodeSignature

+ 18 - 4
KulexiuForTeacher/KulexiuForTeacher.xcodeproj/project.pbxproj

@@ -415,6 +415,8 @@
 		BC28886C2A8101310064B773 /* KSChatSearchBar.m in Sources */ = {isa = PBXBuildFile; fileRef = BC2888672A8101300064B773 /* KSChatSearchBar.m */; };
 		BC28886D2A8101310064B773 /* KSSearchResultListController.m in Sources */ = {isa = PBXBuildFile; fileRef = BC2888682A8101300064B773 /* KSSearchResultListController.m */; };
 		BC28886E2A8101310064B773 /* KSSearchViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BC28886A2A8101310064B773 /* KSSearchViewController.m */; };
+		BC29AD2C2BFAFAFA00D44848 /* KSLogManager.m in Sources */ = {isa = PBXBuildFile; fileRef = BC29AD2A2BFAFAFA00D44848 /* KSLogManager.m */; };
+		BC29AD2F2BFAFD9400D44848 /* CloudAccompanyLibrary.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BC29AD2E2BFAFD9400D44848 /* CloudAccompanyLibrary.framework */; };
 		BC31BF7F2B219C5700F7D538 /* WidgetViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BC31BF382B219C5700F7D538 /* WidgetViewController.m */; };
 		BC31BF802B219C5700F7D538 /* ToneTuningViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BC31BF392B219C5700F7D538 /* ToneTuningViewController.m */; };
 		BC31BF822B219C5700F7D538 /* MetronomeManager.m in Sources */ = {isa = PBXBuildFile; fileRef = BC31BF3D2B219C5700F7D538 /* MetronomeManager.m */; };
@@ -499,7 +501,6 @@
 		BC38C49D2AFA4C7D00ABFCC2 /* KSProgressLoadingView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC38C49B2AFA4C7C00ABFCC2 /* KSProgressLoadingView.xib */; };
 		BC38C49E2AFA4C7D00ABFCC2 /* KSProgressLoadingView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC38C49C2AFA4C7D00ABFCC2 /* KSProgressLoadingView.m */; };
 		BC3A4EB728DAFCF7001C4428 /* MusicTagView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC3A4EB628DAFCF7001C4428 /* MusicTagView.m */; };
-		BC3A55652BAA798A002E1616 /* CloudAccompanyLibrary.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BC3A55622BAA798A002E1616 /* CloudAccompanyLibrary.framework */; };
 		BC3A55662BAA799B002E1616 /* KSTunerLibrary.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BC3A55612BAA798A002E1616 /* KSTunerLibrary.framework */; };
 		BC3A55672BAA799C002E1616 /* KSTunerLibrary.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = BC3A55612BAA798A002E1616 /* KSTunerLibrary.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
 		BC3A557F2BAA8F26002E1616 /* KSCloudWebManager.m in Sources */ = {isa = PBXBuildFile; fileRef = BC3A557E2BAA8F26002E1616 /* KSCloudWebManager.m */; };
@@ -1816,6 +1817,9 @@
 		BC2888692A8101310064B773 /* KSChatSearchBar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KSChatSearchBar.h; sourceTree = "<group>"; };
 		BC28886A2A8101310064B773 /* KSSearchViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KSSearchViewController.m; sourceTree = "<group>"; };
 		BC28886B2A8101310064B773 /* KSSearchViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KSSearchViewController.h; sourceTree = "<group>"; };
+		BC29AD292BFAFAFA00D44848 /* KSLogManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KSLogManager.h; sourceTree = "<group>"; };
+		BC29AD2A2BFAFAFA00D44848 /* KSLogManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KSLogManager.m; sourceTree = "<group>"; };
+		BC29AD2E2BFAFD9400D44848 /* CloudAccompanyLibrary.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = CloudAccompanyLibrary.framework; sourceTree = "<group>"; };
 		BC31BF362B219C5700F7D538 /* ToneTuningViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ToneTuningViewController.h; sourceTree = "<group>"; };
 		BC31BF382B219C5700F7D538 /* WidgetViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WidgetViewController.m; sourceTree = "<group>"; };
 		BC31BF392B219C5700F7D538 /* ToneTuningViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ToneTuningViewController.m; sourceTree = "<group>"; };
@@ -1952,7 +1956,6 @@
 		BC3A4EB528DAFCF7001C4428 /* MusicTagView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MusicTagView.h; sourceTree = "<group>"; };
 		BC3A4EB628DAFCF7001C4428 /* MusicTagView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MusicTagView.m; sourceTree = "<group>"; };
 		BC3A55612BAA798A002E1616 /* KSTunerLibrary.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = KSTunerLibrary.framework; sourceTree = "<group>"; };
-		BC3A55622BAA798A002E1616 /* CloudAccompanyLibrary.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = CloudAccompanyLibrary.framework; sourceTree = "<group>"; };
 		BC3A557D2BAA8F25002E1616 /* KSCloudWebManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KSCloudWebManager.h; sourceTree = "<group>"; };
 		BC3A557E2BAA8F26002E1616 /* KSCloudWebManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KSCloudWebManager.m; sourceTree = "<group>"; };
 		BC3ACD922890D60800060E97 /* FreezeListViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FreezeListViewController.h; sourceTree = "<group>"; };
@@ -2875,8 +2878,8 @@
 				BC8B6E532856ED0600866917 /* UMAPM.framework in Frameworks */,
 				2779333F27E314640010E277 /* CoreVideo.framework in Frameworks */,
 				BC42CACD2BEF5B3A001F076E /* KSToolLibrary.framework in Frameworks */,
-				BC3A55652BAA798A002E1616 /* CloudAccompanyLibrary.framework in Frameworks */,
 				BC8B6E572856ED0600866917 /* UMDevice.framework in Frameworks */,
+				BC29AD2F2BFAFD9400D44848 /* CloudAccompanyLibrary.framework in Frameworks */,
 				BC3A55662BAA799B002E1616 /* KSTunerLibrary.framework in Frameworks */,
 				2779334127E3146B0010E277 /* CoreMedia.framework in Frameworks */,
 				2779333D27E314550010E277 /* AVFoundation.framework in Frameworks */,
@@ -3189,6 +3192,7 @@
 		2779309627E30F2D0010E277 /* Base */ = {
 			isa = PBXGroup;
 			children = (
+				BC29AD2B2BFAFAFA00D44848 /* LogManager */,
 				BC33000D2BBAB5ED003D4921 /* CoursewareDownload */,
 				BC3A557B2BAA8633002E1616 /* AlertView */,
 				BC3A55782BAA8633002E1616 /* AccompanyWebView */,
@@ -4787,6 +4791,15 @@
 			path = LoginManger;
 			sourceTree = "<group>";
 		};
+		BC29AD2B2BFAFAFA00D44848 /* LogManager */ = {
+			isa = PBXGroup;
+			children = (
+				BC29AD292BFAFAFA00D44848 /* KSLogManager.h */,
+				BC29AD2A2BFAFAFA00D44848 /* KSLogManager.m */,
+			);
+			path = LogManager;
+			sourceTree = "<group>";
+		};
 		BC31BF342B219C5700F7D538 /* Widget */ = {
 			isa = PBXGroup;
 			children = (
@@ -5143,9 +5156,9 @@
 			children = (
 				BC00A65B2BB58F1700231B74 /* LLPhotoBrowse.bundle */,
 				BC00A6592BB58F0000231B74 /* WMPlayer.bundle */,
-				BC3A55622BAA798A002E1616 /* CloudAccompanyLibrary.framework */,
 				BC42CACC2BEF5B3A001F076E /* KSToolLibrary.framework */,
 				BC3A55612BAA798A002E1616 /* KSTunerLibrary.framework */,
+				BC29AD2E2BFAFD9400D44848 /* CloudAccompanyLibrary.framework */,
 				BC24570E286C437D00D1F7C0 /* SoundFontFile */,
 				BC3BF6242B9EAF1700831494 /* client.p12 */,
 			);
@@ -8182,6 +8195,7 @@
 				BC38C42F2AF900E100ABFCC2 /* KSMergeAudioControlView.m in Sources */,
 				BC41103828066C2F00800BD9 /* HomeworkListViewController.m in Sources */,
 				BC71DF172A89F470003F165E /* TXToolButtonView.m in Sources */,
+				BC29AD2C2BFAFAFA00D44848 /* KSLogManager.m in Sources */,
 				BC0A22A4284751F80065C1AB /* AccompanySongCell.m in Sources */,
 				BC3A4EB728DAFCF7001C4428 /* MusicTagView.m in Sources */,
 				BCD6D16F28196756009A773E /* FeeRecordModel.m in Sources */,

+ 1 - 1
KulexiuForTeacher/KulexiuForTeacher.xcodeproj/xcshareddata/xcschemes/KulexiuForTeacher.xcscheme

@@ -52,7 +52,7 @@
       </Testables>
    </TestAction>
    <LaunchAction
-      buildConfiguration = "TEST"
+      buildConfiguration = "DEV"
       selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
       selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
       launchStyle = "0"

+ 42 - 0
KulexiuForTeacher/KulexiuForTeacher/Common/Base/AccompanyWebView/KSAccompanyWebViewController.m

@@ -25,6 +25,7 @@
 #import "KSMediaMergeView.h"
 
 #import <KSTunerLibrary/KSTunerLibrary-Swift.h>
+#import "KSLogManager.h"
 
 @interface KSAccompanyWebViewController ()<KSAQRecordManagerDelegate,KSAudioSessionManagerDelegate,PlayerEngineDelegate,TunerDelegate,kSNewPlayerManagerDelegate>
 
@@ -1412,10 +1413,29 @@
                 
             }
         }];
+        [_videoRecordManager errorMessageCallback:^(NSDictionary * _Nonnull errorParm) {
+            [weakSelf uploadVideoRecordErrorMessage:errorParm];
+        }];
     }
     return _videoRecordManager;
 }
 
+- (void)uploadVideoRecordErrorMessage:(NSDictionary *)errorParm {
+    NSMutableDictionary *parm = [NSMutableDictionary dictionaryWithDictionary:errorParm];
+    [parm setValue:UserDefault(UIDKey) forKey:@"userId"];
+    [parm setValue:[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"] forKey:@"version"];
+    NSString *content = [parm mj_JSONString];
+    NSMutableDictionary *submitParm = [KSLogManager generateLogMessageWithContent:content type:@"ERROR"];
+    NSMutableArray *uploadArray = [NSMutableArray arrayWithObject:submitParm];
+    [KSNetworkingManager sysExceptionLogUpdate:KS_POST token:UserDefault(TokenKey) logArray:uploadArray success:^(NSDictionary * _Nonnull dic) {
+        if ([dic ks_integerValueForKey:@"code"] == 200) {
+            
+        }
+    } faliure:^(NSError * _Nonnull error) {
+        
+    }];
+}
+
 - (void)showSuccessMessage:(NSString *)message {
     if (![NSString isEmptyString:message]) {
         [LOADING_MANAGER MBShowAUTOHidingInWindow:message];
@@ -1749,6 +1769,28 @@
                                @"content" : @{@"reson":@"播放已停止"}
     };
     [self postMessage:postParm];
+    
+    NSError *error = player.player.error;
+    if (error) {
+        NSLog(@"-- error desc - %@", error.description);
+        NSMutableDictionary *parm = [NSMutableDictionary dictionary];
+        [parm setValue:UserDefault(UIDKey) forKey:@"userId"];
+        [parm setValue:@"KSCloudWebViewController_MP3Player" forKey:@"Location"];
+        [parm setValue:@(error.code) forKey:@"errorCode"];
+        [parm setValue:error.description forKey:@"errorDesc"];
+        [parm setValue:[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"] forKey:@"version"];
+        NSString *content = [parm mj_JSONString];
+        NSMutableDictionary *submitParm = [KSLogManager generateLogMessageWithContent:content type:@"ERROR"];
+        NSMutableArray *uploadArray = [NSMutableArray arrayWithObject:submitParm];
+        [KSNetworkingManager sysExceptionLogUpdate:KS_POST token:UserDefault(TokenKey) logArray:uploadArray success:^(NSDictionary * _Nonnull dic) {
+            if ([dic ks_integerValueForKey:@"code"] == 200) {
+                
+            }
+        } faliure:^(NSError * _Nonnull error) {
+            
+        }];
+        
+    }
 }
 
 - (NSMutableArray *)delayArray {

+ 12 - 0
KulexiuForTeacher/KulexiuForTeacher/Common/Base/KSNetworkingManager.h

@@ -1480,5 +1480,17 @@ NS_ASSUME_NONNULL_BEGIN
 /// @param success 成功
 /// @param faliure 失败
 + (void)sysSuggestionListRequest:(NSString *)post suggestionType:(NSString *)suggestionType startTime:(NSString *)startTime endTime:(NSString *)endTime page:(NSInteger)page rows:(NSInteger)rows success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure;
+
+#pragma mark ----- Log 上报功能
+// sysExceptionLog/save
+
+/// Log日志上报
+/// @param post post
+/// @param access_token token
+/// @param logArray 上报内容
+/// @param success 成功
+/// @param faliure 失败
++ (void)sysExceptionLogUpdate:(NSString *)post token:(NSString *)access_token logArray:(NSMutableArray *)logArray success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure;
+
 @end
 NS_ASSUME_NONNULL_END

+ 16 - 0
KulexiuForTeacher/KulexiuForTeacher/Common/Base/KSNetworkingManager.m

@@ -2740,4 +2740,20 @@
     [self request:post andWithUrl:url and:parm success:success faliure:faliure];
 }
 
+#pragma mark ----- Log 上报功能
+// sysExceptionLog/save
+
+/// Log日志上报
+/// @param post post
+/// @param access_token token
+/// @param logArray 上报内容
+/// @param success 成功
+/// @param faliure 失败
++ (void)sysExceptionLogUpdate:(NSString *)post token:(NSString *)access_token logArray:(NSMutableArray *)logArray success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure {
+    
+    [self configRequestMethodJSONWithToken:access_token];
+    NSString *url = [NSString stringWithFormat:@"%@%@%@", hostURL,@"/api-auth", @"/sysExceptionLog/save"];
+    [self request:post andWithUrl:url and:logArray success:success faliure:faliure];
+}
+
 @end

+ 40 - 0
KulexiuForTeacher/KulexiuForTeacher/Common/Base/LogManager/KSLogManager.h

@@ -0,0 +1,40 @@
+//
+//  KSLogManager.h
+//  KulexiuSchoolStudent
+//
+//  Created by 王智 on 2024/4/28.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface KSLogManager : NSObject
+/*
+NSDate *current = [NSDate date];
+NSDateFormatter *formatter = [NSObject getDateformatter];
+[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
+NSString *time = [formatter stringFromDate:current];
+NSString *deviceType = [NSString getDeviceVersion];
+NSString *systemVersion = [NSString getSystemVersion];
+NSMutableDictionary *parm = [NSMutableDictionary dictionary];
+[parm setValue:exceptionType forKey:@"exceptionType"];
+[parm setValue:content forKey:@"content"];
+
+[parm setValue:deviceType forKey:@"deviceType"];
+[parm setValue:systemVersion forKey:@"deviceVersion"];
+[parm setValue:@"TEACHER" forKey:@"clientType"];
+[parm setValue:UserDefault(PHONEKEY) forKey:@"phone"];
+[parm setValue:@"IOS" forKey:@"appType"];
+[parm setValue:@"KLX" forKey:@"appKey"];
+[parm setValue:time forKey:@"exceptionTime"];
+*/
+/// 生成上传log
+/// - Parameters:
+///   - content: 上报内容
+///   - type: 类型
++ (NSMutableDictionary *)generateLogMessageWithContent:(NSString *)content type:(NSString *)type;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 55 - 0
KulexiuForTeacher/KulexiuForTeacher/Common/Base/LogManager/KSLogManager.m

@@ -0,0 +1,55 @@
+//
+//  KSLogManager.m
+//  KulexiuSchoolStudent
+//
+//  Created by 王智 on 2024/4/28.
+//
+
+#import "KSLogManager.h"
+
+@implementation KSLogManager
+/*
+NSDate *current = [NSDate date];
+NSDateFormatter *formatter = [NSObject getDateformatter];
+[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
+NSString *time = [formatter stringFromDate:current];
+NSString *deviceType = [NSString getDeviceVersion];
+NSString *systemVersion = [NSString getSystemVersion];
+NSMutableDictionary *parm = [NSMutableDictionary dictionary];
+[parm setValue:exceptionType forKey:@"exceptionType"];
+[parm setValue:content forKey:@"content"];
+
+[parm setValue:deviceType forKey:@"deviceType"];
+[parm setValue:systemVersion forKey:@"deviceVersion"];
+[parm setValue:@"TEACHER" forKey:@"clientType"];
+[parm setValue:UserDefault(PHONEKEY) forKey:@"phone"];
+[parm setValue:@"IOS" forKey:@"appType"];
+[parm setValue:@"KLX" forKey:@"appKey"];
+[parm setValue:time forKey:@"exceptionTime"];
+*/
+
+/// 生成上传log
+/// - Parameters:
+///   - content: 上报内容
+///   - type: 类型
++ (NSMutableDictionary *)generateLogMessageWithContent:(NSString *)content type:(NSString *)type {
+    
+    NSDate *current = [NSDate date];
+    NSDateFormatter *formatter = [NSObject getDateformatter];
+    [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
+    NSString *logTime = [formatter stringFromDate:current];
+    NSString *deviceType = [NSString getDeviceVersion];
+    NSString *systemVersion = [NSString getSystemVersion];
+    NSMutableDictionary *parm = [NSMutableDictionary dictionary];
+    [parm setValue:type forKey:@"exceptionType"];
+    [parm setValue:content forKey:@"content"];
+    [parm setValue:deviceType forKey:@"deviceType"];
+    [parm setValue:systemVersion forKey:@"deviceVersion"];
+    [parm setValue:@"TEACHER" forKey:@"clientType"];
+    [parm setValue:UserDefault(PHONEKEY) forKey:@"phone"];
+    [parm setValue:@"IOS" forKey:@"appType"];
+    [parm setValue:@"KLX" forKey:@"appKey"];
+    [parm setValue:logTime forKey:@"exceptionTime"];
+    return parm;
+}
+@end

+ 2 - 0
KulexiuForTeacher/KulexiuForTeacher/Common/Base/LoginManger/TXIMLinsenter.h

@@ -19,6 +19,8 @@ NS_ASSUME_NONNULL_BEGIN
 
 @interface TXIMLinsenter : NSObject
 
+@property (nonatomic, strong) NSString *access_token;
+
 // 是否成功登录IM
 @property (nonatomic, assign) BOOL loginIMSuccess;
 

+ 17 - 0
KulexiuForTeacher/KulexiuForTeacher/Common/Base/LoginManger/TXIMLinsenter.m

@@ -10,6 +10,7 @@
 #import "AppDelegate+AppService.h"
 #import "ClassroomService.h"
 #import "TXLiveTextMessage.h"
+#import "KSLogManager.h"
 
 @interface TXIMLinsenter ()<TUILoginListener,V2TIMConversationListener,V2TIMSimpleMsgListener,V2TIMSignalingListener,V2TIMGroupListener>
 
@@ -93,6 +94,22 @@
     NSLog(@"----- tx IM SDK 连接成功");
     self.isIMConnected = YES;
     [[NSNotificationCenter defaultCenter] postNotificationName:@"TXIMConnected" object:nil];
+#pragma mark ----- IM连接成功埋点
+    NSDictionary *parm = @{
+        @"userId" :UserDefault(UIDKey),
+        @"Location" : @"IM Connected",
+        @"version" : [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"],
+    };
+    NSString *content = [parm mj_JSONString];
+    NSMutableDictionary *uploadParm = [KSLogManager generateLogMessageWithContent:content type:@"RECORD"];
+    NSMutableArray *uploadArray = [NSMutableArray arrayWithObject:uploadParm];
+    [KSNetworkingManager sysExceptionLogUpdate:KS_POST token:self.access_token logArray:uploadArray success:^(NSDictionary * _Nonnull dic) {
+        if ([dic ks_integerValueForKey:@"code"] == 200) {
+            
+        }
+    } faliure:^(NSError * _Nonnull error) {
+        
+    }];
 }
 
 - (void)onConnectFailed:(int)code err:(NSString *)err {

+ 23 - 0
KulexiuForTeacher/KulexiuForTeacher/Common/Base/WebView/KSBaseWKWebViewController.m

@@ -38,6 +38,7 @@
 #import "KSWebLoadRefreshView.h"
 
 #import "KSNewAlertView.h"
+#import "KSLogManager.h"
 
 typedef NS_ENUM(NSInteger, CHOOSETYPE) {
     CHOOSETYPE_XML,
@@ -1163,6 +1164,28 @@ typedef NS_ENUM(NSInteger, CHOOSETYPE) {
 // 数据加载发生错误时调用
 - (void)webView:(WKWebView *)webView didFailNavigation:(null_unspecified WKNavigation *)navigation withError:(NSError *)error {
     NSLog(@"----数据加载发生错误时调用");
+    // 错误上报
+    if (error) {
+        NSLog(@"-- error desc - %@", error.description);
+        NSMutableDictionary *parm = [NSMutableDictionary dictionary];
+        [parm setValue:UserDefault(UIDKey) forKey:@"userId"];
+        [parm setValue:@"KSBaseWKWebViewController" forKey:@"Location"];
+        [parm setValue:webView.URL.absoluteString forKey:@"url"];
+        [parm setValue:@(error.code) forKey:@"errorCode"];
+        [parm setValue:error.description forKey:@"errorDesc"];
+        [parm setValue:[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"] forKey:@"version"];
+        
+        NSString *content = [parm mj_JSONString];
+        NSMutableDictionary *uploadParm = [KSLogManager generateLogMessageWithContent:content type:@"ERROR"];
+        NSMutableArray *uploadArray = [NSMutableArray arrayWithObject:uploadParm];
+        [KSNetworkingManager sysExceptionLogUpdate:KS_POST token:UserDefault(TokenKey) logArray:uploadArray success:^(NSDictionary * _Nonnull dic) {
+            if ([dic ks_integerValueForKey:@"code"] == 200) {
+                
+            }
+        } faliure:^(NSError * _Nonnull error) {
+            
+        }];
+    }
 }
 
 

+ 45 - 0
KulexiuForTeacher/KulexiuForTeacher/Common/MediaMerge/AudioMerge/KSMediaMergeView.m

@@ -21,7 +21,9 @@
 #import "KSVideoCropViewController.h"
 #import <KSToolLibrary/KSAudioSessionManager.h>
 #import "ShareFunctionView.h"
+
 #import "KSUMShareManager.h"
+#import "KSLogManager.h"
 
 @interface KSMediaMergeView ()<kSNewPlayerManagerDelegate,KSVideoPlayerViewDelegate,RSKImageCropViewControllerDelegate,RSKImageCropViewControllerDataSource>
 
@@ -1025,6 +1027,29 @@
     }
 }
 
+- (void)videoPlayerOccurError:(AVPlayer *)player {
+    NSError *error = player.error;
+    if (error) {
+        NSLog(@"-- error desc - %@", error.description);
+        NSMutableDictionary *parm = [NSMutableDictionary dictionary];
+        [parm setValue:UserDefault(UIDKey) forKey:@"userId"];
+        [parm setValue:@"KSMediaMergeViewVideoPlayer" forKey:@"Location"];
+        [parm setValue:[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"] forKey:@"version"];
+        [parm setValue:@(error.code) forKey:@"errorCode"];
+        [parm setValue:error.description forKey:@"errorDesc"];
+        NSString *content = [parm mj_JSONString];
+        NSMutableDictionary *uploadParm = [KSLogManager generateLogMessageWithContent:content type:@"ERROR"];
+        NSMutableArray *uploadArray = [NSMutableArray arrayWithObject:uploadParm];
+        [KSNetworkingManager sysExceptionLogUpdate:KS_POST token:UserDefault(TokenKey) logArray:uploadArray success:^(NSDictionary * _Nonnull dic) {
+            if ([dic ks_integerValueForKey:@"code"] == 200) {
+                
+            }
+        } faliure:^(NSError * _Nonnull error) {
+            
+        }];
+    }
+}
+
 - (void)playFinished:(kSNewPlayer *)player {
     if (player == self.recordPlayer) {
         
@@ -1047,6 +1072,26 @@
 
 - (void)playerDidError:(kSNewPlayer *)player {
     [self stopPlay];
+    NSError *error = player.player.error;
+    if (error) {
+        NSLog(@"-- error desc - %@", error.description);
+        NSMutableDictionary *parm = [NSMutableDictionary dictionary];
+        [parm setValue:UserDefault(UIDKey) forKey:@"userId"];
+        [parm setValue:@"KSMediaMergeViewMp3Player" forKey:@"Location"];
+        [parm setValue:[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"] forKey:@"version"];
+        [parm setValue:@(error.code) forKey:@"errorCode"];
+        [parm setValue:error.description forKey:@"errorDesc"];
+        NSString *content = [parm mj_JSONString];
+        NSMutableDictionary *uploadParm = [KSLogManager generateLogMessageWithContent:content type:@"ERROR"];
+        NSMutableArray *uploadArray = [NSMutableArray arrayWithObject:uploadParm];
+        [KSNetworkingManager sysExceptionLogUpdate:KS_POST token:UserDefault(TokenKey) logArray:uploadArray success:^(NSDictionary * _Nonnull dic) {
+            if ([dic ks_integerValueForKey:@"code"] == 200) {
+                
+            }
+        } faliure:^(NSError * _Nonnull error) {
+            
+        }];
+    }
 }
 
 - (KSVideoPlayerView *)videoView {

+ 2 - 2
KulexiuForTeacher/KulexiuForTeacher/Common/MediaMerge/AudioMerge/VideoPlayerView/KSVideoPlayerView.h

@@ -19,8 +19,9 @@
 
 -(void)videoPlayerFinishedPlay:(AVPlayer *_Nonnull)player;
 
+- (void)videoPlayerIsReadyPlay:(AVPlayer *_Nonnull)player;
 
-
+- (void)videoPlayerOccurError:(AVPlayer *_Nonnull)player;
 @end
 
 NS_ASSUME_NONNULL_BEGIN
@@ -29,7 +30,6 @@ NS_ASSUME_NONNULL_BEGIN
 
 @property(nonatomic,weak)id<KSVideoPlayerViewDelegate>delegate;
 
-@property (nonatomic, strong) AVPlayer *videoPlayer;
 
 @property (nonatomic, assign) BOOL isMute;
 

+ 18 - 3
KulexiuForTeacher/KulexiuForTeacher/Common/MediaMerge/AudioMerge/VideoPlayerView/KSVideoPlayerView.m

@@ -10,11 +10,13 @@
 
 @interface KSVideoPlayerView ()
 
+@property (nonatomic, strong) AVPlayer *videoPlayer;
+
 @property(nonatomic,strong) AVPlayerItem *currentItem;
 
 @property (nonatomic,retain) AVPlayerLayer  *playerLayer;
 
-@property(nonatomic,retain)id timeObserver;//时间观察
+@property(nonatomic,retain) id timeObserver;//时间观察
 
 @property (nonatomic, assign) BOOL cacheFinish;
 
@@ -39,11 +41,14 @@
 
 - (void)initPlayer {
     [UIApplication sharedApplication].idleTimerDisabled=YES;
-
 }
 
 
 - (void)resetPlayer {
+    if (self.playerLayer) {
+        [self.playerLayer removeFromSuperlayer];
+        self.playerLayer = nil;
+    }
     [self.videoPlayer replaceCurrentItemWithPlayerItem:nil];
     self.videoPlayer = nil;
 }
@@ -120,6 +125,7 @@
         [_videoPlayer pause];
     }
     [self removeAllNoticeAndObserver];
+    [self resetPlayer];
 }
 
 - (void)seekToStart {
@@ -212,6 +218,7 @@
 {
     [_currentItem addObserver:self forKeyPath:@"status" options:NSKeyValueObservingOptionNew context:nil];
 }
+
 #pragma mark----数据缓冲状态的监听
 -(void)addNetDataStatusObserver
 {
@@ -232,11 +239,19 @@
                 break;
             case AVPlayerStatusReadyToPlay:{
                 NSLog(@"准备完毕,可以播放");
+                dispatch_main_sync_safe(^{
+                    if (self.delegate && [self.delegate respondsToSelector:@selector(videoPlayerIsReadyPlay:)]) {
+                        [self.delegate videoPlayerIsReadyPlay:self.videoPlayer];
+                    }
+                });
             }
                 break;
             case AVPlayerStatusFailed:{
                 _isPlaying = NO;
                 NSLog(@"加载失败,网络或者服务器出现问题");
+                if (self.delegate && [self.delegate respondsToSelector:@selector(videoPlayerOccurError:)]) {
+                    [self.delegate videoPlayerOccurError:self.videoPlayer];
+                }
             }
                 break;
             default:
@@ -324,7 +339,7 @@
 }
 
 - (void)dealloc {
-    NSLog(@" -------- player dealloc ");
+    NSLog(@" -------- video player dealloc ");
 }
 /*
 // Only override drawRect: if you perform custom drawing.

+ 1 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Login/Model/UserInfoManager.m

@@ -304,6 +304,7 @@
     if ([NSString isEmptyString:imToken]) {
         return;
     }
+    TXIM_LINSENTER.access_token = UserDefault(TokenKey);
     [TXIM_LINSENTER TXIMLoginWithUserId:UserDefault(IM_USERID) sig:imToken callback:^(BOOL isSuccess, NSString * _Nullable msg) {
         if (isSuccess) {
             dispatch_async(dispatch_get_main_queue(), ^{

+ 18 - 18
KulexiuForTeacher/KulexiuForTeacher/Module/Widget/Model/KSMetronomePlayer.m

@@ -7,7 +7,7 @@
 
 #import "KSMetronomePlayer.h"
 #import <AVFoundation/AVFoundation.h>
-//#import "KSLogManager.h"
+#import "KSLogManager.h"
 
 @interface KSMetronomePlayer ()
 
@@ -92,23 +92,23 @@
     [self.audioEngine startAndReturnError:&error];
     if (error) {
 #pragma mark ----- 错误上报
-//        NSLog(@"-- error desc - %@", error.description);
-//        NSMutableDictionary *parm = [NSMutableDictionary dictionary];
-//        [parm setValue:UserDefault(UIDKey) forKey:@"userId"];
-//        [parm setValue:@"metronomePlay" forKey:@"Location"];
-//        [parm setValue:[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"] forKey:@"version"];
-//        [parm setValue:@(error.code) forKey:@"errorCode"];
-//        [parm setValue:error.description forKey:@"errorDesc"];
-//        NSString *content = [parm mj_JSONString];
-//        NSMutableDictionary *uploadParm = [KSLogManager generateLogMessageWithContent:content type:@"ERROR"];
-//        NSMutableArray *uploadArray = [NSMutableArray arrayWithObject:uploadParm];
-//        [KSNetworkingManager sysExceptionLogUpdate:KS_POST logArray:uploadArray success:^(NSDictionary * _Nonnull dic) {
-//            if ([dic ks_integerValueForKey:@"code"] == 200) {
-//
-//            }
-//        } faliure:^(NSError * _Nonnull error) {
-//
-//        }];
+        NSLog(@"-- error desc - %@", error.description);
+        NSMutableDictionary *parm = [NSMutableDictionary dictionary];
+        [parm setValue:UserDefault(UIDKey) forKey:@"userId"];
+        [parm setValue:@"metronomePlay" forKey:@"Location"];
+        [parm setValue:[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"] forKey:@"version"];
+        [parm setValue:@(error.code) forKey:@"errorCode"];
+        [parm setValue:error.description forKey:@"errorDesc"];
+        NSString *content = [parm mj_JSONString];
+        NSMutableDictionary *uploadParm = [KSLogManager generateLogMessageWithContent:content type:@"ERROR"];
+        NSMutableArray *uploadArray = [NSMutableArray arrayWithObject:uploadParm];
+        [KSNetworkingManager sysExceptionLogUpdate:KS_POST token:UserDefault(TokenKey) logArray:uploadArray success:^(NSDictionary * _Nonnull dic) {
+            if ([dic ks_integerValueForKey:@"code"] == 200) {
+
+            }
+        } faliure:^(NSError * _Nonnull error) {
+
+        }];
     }
     self.audioEngine.autoShutdownEnabled = YES;
 }

二進制
KulexiuForTeacher/KulexiuForTeacher/ToolKit/CloudAccompanyLibrary.framework/CloudAccompanyLibrary


+ 3 - 0
KulexiuForTeacher/KulexiuForTeacher/ToolKit/CloudAccompanyLibrary.framework/Headers/KSCloudWebViewController.h

@@ -37,6 +37,9 @@
 // 上传
 - (void)uploadFile:(NSString *_Nonnull)uploadFileUrl success:(void(^_Nullable)(NSString * _Nonnull remoteFileUrl))success faliure:(void(^_Nullable)(NSString * _Nonnull desc))faliure;
 
+// 错误上报回调 ,额外需填写当前版本
+- (void)cloudPageOccourError:(NSMutableDictionary *_Nonnull)uploadParm;
+
 @end
 
 NS_ASSUME_NONNULL_BEGIN

+ 5 - 0
KulexiuForTeacher/KulexiuForTeacher/ToolKit/CloudAccompanyLibrary.framework/Headers/KSVideoRecordManager.h

@@ -10,6 +10,8 @@
 
 typedef void(^KSVideoRecordCallback)(BOOL isSuccess, NSString * _Nullable message);
 
+typedef void(^KSVideoRecordErrorCallback)(NSDictionary * _Nonnull errorParm);
+
 NS_ASSUME_NONNULL_BEGIN
 
 @interface KSVideoRecordManager : NSObject
@@ -46,6 +48,9 @@ NS_ASSUME_NONNULL_BEGIN
 
 - (void)clearVideoFile;
 
+// 错误回调
+- (void)errorMessageCallback:(KSVideoRecordErrorCallback)callback;
+
 @end
 
 NS_ASSUME_NONNULL_END

+ 2 - 0
KulexiuForTeacher/KulexiuForTeacher/ToolKit/CloudAccompanyLibrary.framework/Headers/kSNewPlayer.h

@@ -32,6 +32,8 @@ NS_ASSUME_NONNULL_BEGIN
 
 @interface kSNewPlayer : NSObject
 
+@property(nonatomic,strong, readonly) AVPlayer *player;
+
 @property (nonatomic, assign) BOOL isReady;
 
 @property (nonatomic, assign) BOOL isPlaying;

二進制
KulexiuForTeacher/KulexiuForTeacher/ToolKit/CloudAccompanyLibrary.framework/Info.plist


二進制
KulexiuForTeacher/KulexiuForTeacher/ToolKit/CloudAccompanyLibrary.framework/_CodeSignature/CodeDirectory


二進制
KulexiuForTeacher/KulexiuForTeacher/ToolKit/CloudAccompanyLibrary.framework/_CodeSignature/CodeRequirements-1


+ 10 - 10
KulexiuForTeacher/KulexiuForTeacher/ToolKit/CloudAccompanyLibrary.framework/_CodeSignature/CodeResources

@@ -54,19 +54,19 @@
 		</data>
 		<key>Headers/KSCloudWebViewController.h</key>
 		<data>
-		s0w9GhO5Bd1aS7dIDTVZ+7Am1qw=
+		pZOk0rtmzLtLAH9cSM9y5V6aZ/k=
 		</data>
 		<key>Headers/KSVideoRecordManager.h</key>
 		<data>
-		CJqdyXOd3xT7h5IcjnAsBINz2xI=
+		Ins78iJ7FlX1PoqhnAFEw4DAix8=
 		</data>
 		<key>Headers/kSNewPlayer.h</key>
 		<data>
-		X2XN9irloBDbPzY/b0eZq0vFpnI=
+		/EmFON7pgDfYqZXte5+VuTCx30U=
 		</data>
 		<key>Info.plist</key>
 		<data>
-		NuL3nHg/McGQdlTYK4RMQg7eOTQ=
+		EbXK4oBtuwzpcM6n6jwLip0yy+c=
 		</data>
 	</dict>
 	<key>files2</key>
@@ -207,33 +207,33 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			s0w9GhO5Bd1aS7dIDTVZ+7Am1qw=
+			pZOk0rtmzLtLAH9cSM9y5V6aZ/k=
 			</data>
 			<key>hash2</key>
 			<data>
-			vl7XdMyd71/yd1vGqPY+KQTgYnMwQt261AgYbDjfQiE=
+			RO0ZS6NoI6TZn40r/kX+ncngS2X+PI+xR65M5qT1qUs=
 			</data>
 		</dict>
 		<key>Headers/KSVideoRecordManager.h</key>
 		<dict>
 			<key>hash</key>
 			<data>
-			CJqdyXOd3xT7h5IcjnAsBINz2xI=
+			Ins78iJ7FlX1PoqhnAFEw4DAix8=
 			</data>
 			<key>hash2</key>
 			<data>
-			+CBcFUFEFEUNB3Qvg0pTrkobAfPoQufuNMZsHJRb6sM=
+			hd1YLjbCUB6NcOSoWquK1K484BqR4Ewrj2GzHtONQ/4=
 			</data>
 		</dict>
 		<key>Headers/kSNewPlayer.h</key>
 		<dict>
 			<key>hash</key>
 			<data>
-			X2XN9irloBDbPzY/b0eZq0vFpnI=
+			/EmFON7pgDfYqZXte5+VuTCx30U=
 			</data>
 			<key>hash2</key>
 			<data>
-			7BWfNRynhcPvJdTf3C3kP3jkfCdn6V/LpXbzj4Vt+fk=
+			frpKu3bmbEnJpGISJIx9Ohop6rzvLaDxk5om3tWT19I=
 			</data>
 		</dict>
 	</dict>

二進制
KulexiuForTeacher/KulexiuForTeacher/ToolKit/CloudAccompanyLibrary.framework/_CodeSignature/CodeSignature