1.原生与h5交互数据
具体的参考之前博客:https://blog.csdn.net/qq_15509071/article/details/113876172
这里修改为:
- (void)userContentController:(nonnull WKUserContentController *)arg1 didReceiveScriptMessageS:(nonnull WKScriptMessage *)arg2;{
//这个地方直接打印arg2.body有乱码,打印arg2.body[@"queue"]就好了
NSString *queue = arg2.body[@"queue"];
NSLog(@"交互数据之 userContentController\n%@\n%@",queue,arg2.name);
[self userContentController:arg1 didReceiveScriptMessageS:arg2];
}
2.如何拦截与打印所有h5和原生的RPC接口返回报文。
DTRpcClient+YYY.h
#import <APMobileNetwork/APMobileNetwork.h>
NS_ASSUME_NONNULL_BEGIN
@interface DTRpcClient (YYY)
@end
NS_ASSUME_NONNULL_END
DTRpcClient+YYY.m
#import "DTRpcClient+YYY.h"
#import <objc/runtime.h>
@implementation DTRpcClient (YYY)
+ (void)load{
{
Method originalMethod = class_getInstanceMethod([NSClassFromString(@"DTRpcClient") class], @selector(executeMethod:params:requestHeaderField:responseHeaderFields:));
Method swizzledMethod = class_getInstanceMethod([self class], @selector(SexecuteMethod:params:requestHeaderField:responseHeaderFields:));
method_exchangeImplementations(originalMethod, swizzledMethod);
}
}
- (id)SexecuteMethod:(DTRpcMethod *)method params:(NSArray *)params requestHeaderField:(NSDictionary*)field responseHeaderFields:(void (^)(NSDictionary* allHeaderFields))responseBlock;{
//用来修改网络请求数据
id responseData = [self SexecuteMethod:method params:params requestHeaderField:field responseHeaderFields:^(NSDictionary *allHeaderFields) {
if(responseBlock){
responseBlock(allHeaderFields);
}
}];
//框架自己的mPaaSLog打印返回数据有特殊字符 这里不直接打印字典 改成将字典转成json字符串打印 问题解决
if([responseData isKindOfClass:[NSDictionary class]]){
NSDictionary *value_ = responseData[@"body"];
NSLog(@" %@ %@\n",method.operationType,[self convertToJsonData:value_]);
}
return responseData;
}
- (NSString *)convertToJsonData:(NSDictionary *)dict{
NSError *error;
if (dict == nil) {
return @"";
}
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dict options:NSJSONWritingPrettyPrinted error:&error];
NSString *jsonString;
if (!jsonData) {
NSLog(@"%@",error);
}else{
jsonString = [[NSString alloc]initWithData:jsonData encoding:NSUTF8StringEncoding];
}
NSMutableString *mutStr = [NSMutableString stringWithString:jsonString];
return mutStr;
}
@end