Commit 2e7ab86af6f43b247e782fb50ae1152996c948a7

Authored by zhangxiaowen
1 parent 5f621a7e

no message

Showing 15 changed files with 443 additions and 672 deletions
CNLiveUserAgreementManager.podspec
... ... @@ -9,7 +9,7 @@
9 9 Pod::Spec.new do |s|
10 10 s.name = 'CNLiveUserAgreementManager'
11 11 s.version = '0.0.1'
12   - s.summary = '网家家用户协议管理类'
  12 + s.summary = 'CNLiveUserAgreementManager'
13 13  
14 14 # This description is used to generate tags and improve search results.
15 15 # * Think: What does it do? Why did you write it? What is the focus?
... ... @@ -18,7 +18,7 @@ Pod::Spec.new do |s|
18 18 # * Finally, don't worry about the indent, CocoaPods strips it!
19 19  
20 20 s.description = <<-DESC
21   -TODO: Add long description of the pod here.
  21 +TODO: 网家家-用户协议管理类.
22 22 DESC
23 23  
24 24 s.homepage = 'http://bj.gitlab.cnlive.com/ios-team/CNLiveUserAgreementManager'
... ... @@ -33,16 +33,26 @@ TODO: Add long description of the pod here.
33 33 s.source_files = 'CNLiveUserAgreementManager/Classes/**/*'
34 34  
35 35 s.resource_bundles = {
36   - 'CNLiveAgreementManager' => ['CNLiveUserAgreementManager/Assets/CNLiveAgreementManager.bundle']
  36 + 'CNLiveUserAgreementManager' => ['CNLiveUserAgreementManager/Assets/CNLiveUserAgreementManager.xcassets']
37 37 }
38 38  
39 39 s.public_header_files = 'CNLiveUserAgreementManager/Classes/**/*.h'
40 40 # s.frameworks = 'UIKit', 'MapKit'
41   - s.dependency 'QMUIKit'
42   - s.dependency 'Qiniu'
43   - s.dependency 'WebViewJavascriptBridge'
44   - s.dependency 'CNLiveRequestBastKit'
  41 +
  42 + # pod
  43 + s.dependency 'CNLiveTripartiteManagement/QMUIKit'
  44 +
  45 + # 服务层
  46 + s.dependency 'CNLiveServices'
  47 +
  48 + #环境库
45 49 s.dependency 'CNLiveEnvironment'
  50 +
  51 + # 数据请求
  52 + s.dependency 'CNLiveRequestBastKit'
  53 +
  54 + # 用户信息本地化
  55 + s.dependency 'CNLiveUserManagement'
46 56  
47 57  
48 58 end
... ...
CNLiveUserAgreementManager/Assets/CNLiveUserAgreementManager.xcassets/Contents.json 0 → 100644
  1 +{
  2 + "info" : {
  3 + "version" : 1,
  4 + "author" : "xcode"
  5 + }
  6 +}
0 7 \ No newline at end of file
... ...
CNLiveUserAgreementManager/Assets/CNLiveUserAgreementManager.xcassets/web_black_back.imageset/Contents.json 0 → 100644
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "scale" : "1x"
  6 + },
  7 + {
  8 + "idiom" : "universal",
  9 + "filename" : "web_black_back@2x.png",
  10 + "scale" : "2x"
  11 + },
  12 + {
  13 + "idiom" : "universal",
  14 + "filename" : "web_black_back@3x.png",
  15 + "scale" : "3x"
  16 + }
  17 + ],
  18 + "info" : {
  19 + "version" : 1,
  20 + "author" : "xcode"
  21 + }
  22 +}
0 23 \ No newline at end of file
... ...
CNLiveUserAgreementManager/Assets/CNLiveAgreementManager.bundle/web_black_back@2x.png renamed to CNLiveUserAgreementManager/Assets/CNLiveUserAgreementManager.xcassets/web_black_back.imageset/web_black_back@2x.png

1.49 KB

CNLiveUserAgreementManager/Assets/CNLiveAgreementManager.bundle/web_black_back@3x.png renamed to CNLiveUserAgreementManager/Assets/CNLiveUserAgreementManager.xcassets/web_black_back.imageset/web_black_back@3x.png

1.79 KB

CNLiveUserAgreementManager/Assets/CNLiveUserAgreementManager.xcassets/web_black_close.imageset/Contents.json 0 → 100644
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "scale" : "1x"
  6 + },
  7 + {
  8 + "idiom" : "universal",
  9 + "filename" : "web_black_close@2x.png",
  10 + "scale" : "2x"
  11 + },
  12 + {
  13 + "idiom" : "universal",
  14 + "filename" : "web_black_close@3x.png",
  15 + "scale" : "3x"
  16 + }
  17 + ],
  18 + "info" : {
  19 + "version" : 1,
  20 + "author" : "xcode"
  21 + }
  22 +}
0 23 \ No newline at end of file
... ...
CNLiveUserAgreementManager/Assets/CNLiveAgreementManager.bundle/web_black_close@2x.png renamed to CNLiveUserAgreementManager/Assets/CNLiveUserAgreementManager.xcassets/web_black_close.imageset/web_black_close@2x.png

2.92 KB

CNLiveUserAgreementManager/Assets/CNLiveAgreementManager.bundle/web_black_close@3x.png renamed to CNLiveUserAgreementManager/Assets/CNLiveUserAgreementManager.xcassets/web_black_close.imageset/web_black_close@3x.png

4.14 KB

CNLiveUserAgreementManager/Classes/CNLiveAgreementWebController.m deleted 100644 → 0
1   -//
2   -// CNLiveAgreementWebController.m
3   -// CNLiveServices_Example
4   -//
5   -// Created by CNLive-zxw on 2019/7/30.
6   -// Copyright © 2019 153993236@qq.com. All rights reserved.
7   -//
8   -
9   -#import "CNLiveAgreementWebController.h"
10   -// 交接库
11   -#import "WKWebViewJavascriptBridge.h"
12   -// 七牛
13   -#import "QiniuSDK.h"
14   -#import <WebKit/WebKit.h>
15   -// 环境库
16   -#import "CNLiveEnvironment.h"
17   -#import "QMUIKit.h"
18   -#import <CNLiveRequestBastKit/CNLiveNetworking.h>
19   -
20   -@interface CNLiveAgreementWebController ()<WKUIDelegate, WKNavigationDelegate>
21   -@property (nonatomic, copy) NSString *url;
22   -@property (nonatomic, copy) NSString *name;
23   -@property (nonatomic, assign) BOOL isShow;
24   -
25   -@property (nonatomic, strong) WKWebViewJavascriptBridge *bridge;
26   -@property (nonatomic, strong) WKWebView *webView;
27   -@property (nonatomic, strong) UIProgressView *processView;
28   -@property (nonatomic, weak) UILabel *titleLabel;
29   -
30   -@property (nonatomic, strong) NSMutableArray *photos;// 上传图片
31   -
32   -@end
33   -
34   -@implementation CNLiveAgreementWebController
35   -#pragma mark - 初始化方法
36   -- (instancetype)initWithUrl:(NSString *)url name:(nullable NSString *)name showCloseBtn:(BOOL)isShow {
37   - self = [super init];
38   - if (self) {
39   - self.url = url;
40   - self.name = name;
41   - self.isShow = isShow;
42   - }
43   - return self;
44   -}
45   -
46   -- (void)setName:(NSString *)name{
47   - _name = name;
48   - _titleLabel.text = name;
49   -
50   -}
51   -
52   -#pragma mark - 加载数据
53   -- (void)loadUrl {
54   - NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:self.url] cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:15.0];
55   - [self.webView loadRequest:theRequest];
56   -
57   -}
58   -
59   -#pragma mark - 生命周期
60   -- (void)viewWillAppear:(BOOL)animated {
61   - [super viewWillAppear:animated];
62   - self.navigationController.navigationBarHidden = YES;
63   -
64   -}
65   -
66   -- (void)viewWillDisappear:(BOOL)animated {
67   - [super viewWillDisappear:animated];
68   - self.navigationController.navigationBarHidden = NO;
69   -
70   -}
71   -
72   -- (void)viewDidLoad {
73   - [super viewDidLoad];
74   - self.view.backgroundColor = [UIColor whiteColor];
75   - if (@available(iOS 11, *)) {
76   - self.webView.scrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentAutomatic;
77   - }
78   - else {
79   - self.automaticallyAdjustsScrollViewInsets = NO;
80   - }
81   - [self setupNavigationBar];
82   - [self setupUI];
83   - [self setupUserAgent];
84   - [self interaction];
85   - [self loadUrl];
86   -
87   -}
88   -
89   -- (void)dealloc {
90   - if(TestEnvironment){
91   - NSLog(@"CNUserAgreementWebController dealloc");
92   - }
93   - [self.webView stopLoading];
94   - [self.webView removeObserver:self forKeyPath:@"estimatedProgress"];
95   - if (!self.name) {
96   - [self.webView removeObserver:self forKeyPath:@"title"];
97   - }
98   - self.webView.UIDelegate = nil;
99   - self.webView.navigationDelegate = nil;
100   - self.webView = nil;
101   - [self clearWKCache];
102   -
103   -}
104   -
105   -#pragma mark - 交互相关
106   -- (void)interaction {
107   - [WKWebViewJavascriptBridge enableLogging];
108   - self.bridge = [WKWebViewJavascriptBridge bridgeForWebView:self.webView];
109   - [self.bridge setWebViewDelegate:self];
110   -
111   - __weak typeof(self) weakSelf = self;
112   -
113   - // 帮助与反馈->产品建议:添加照片按钮
114   - [self.bridge registerHandler:@"wjjHelpAndFeedbackImage" handler:^(id data, WVJBResponseCallback responseCallback) {
115   - if(TestEnvironment){
116   - NSLog(@"ObjC Echo called with: %@", data);
117   - }
118   - __strong typeof(weakSelf) strongSelf = weakSelf;
119   - if(strongSelf){
120   -
121   - }
122   - responseCallback(data);
123   - }];
124   -
125   - // 帮助与反馈->产品建议:删除照片
126   - [self.bridge registerHandler:@"wjjDelegateImage" handler:^(id data, WVJBResponseCallback responseCallback) {
127   - if(TestEnvironment){
128   - NSLog(@"ObjC Echo called with: %@", data);
129   - }
130   - __strong typeof(weakSelf) strongSelf = weakSelf;
131   - if(strongSelf){
132   - if ([data isKindOfClass:[NSDictionary class]]) {
133   - NSInteger index = [[data objectForKey:@"index"] integerValue];
134   - [strongSelf.photos removeObjectAtIndex:index];
135   - }
136   - }
137   - responseCallback(data);
138   - }];
139   -
140   - // 帮助与反馈->产品建议:点击提交
141   - [self.bridge registerHandler:@"wjjSubmitImage" handler:^(id data, WVJBResponseCallback responseCallback) {
142   - if(TestEnvironment){
143   - NSLog(@"ObjC Echo called with: %@", data);
144   - }
145   - __strong typeof(weakSelf) strongSelf = weakSelf;
146   - if(strongSelf){
147   - if (strongSelf.photos.count > 0) {
148   - [strongSelf getImageToken];
149   - }
150   - else {
151   - id data = @{ @"images": @[] };
152   - [QMUITips showLoading:@"正在提交" inView:weakSelf.view];
153   - // 帮助与反馈->产品建议App->h5图片urls
154   - [strongSelf.bridge callHandler:@"wjjSubmitSuccess" data:data responseCallback:^(id responseData) {
155   - if(TestEnvironment){
156   - NSLog(@"ObjC received response: %@", responseData);
157   - }
158   - }];
159   - }
160   -
161   - }
162   - responseCallback(data);
163   - }];
164   -
165   - // 反馈提交(成功/失败)后隐藏loading
166   - [self.bridge registerHandler:@"wjjSubmitSuccessFinal" handler:^(id data, WVJBResponseCallback responseCallback) {
167   - if(TestEnvironment){
168   - NSLog(@"ObjC Echo called with: %@", data);
169   - }
170   - __strong typeof(weakSelf) strongSelf = weakSelf;
171   - if(strongSelf){
172   - [QMUITips hideAllToastInView:strongSelf.view animated:YES];
173   -
174   - }
175   - responseCallback(data);
176   - }];
177   -
178   - // 帮助与反馈 提交反馈后点击完成
179   - [self.bridge registerHandler:@"wjjFeedbackSuccess" handler:^(id data, WVJBResponseCallback responseCallback) {
180   - if(TestEnvironment){
181   - NSLog(@"ObjC Echo called with: %@", data);
182   - }
183   - __strong typeof(weakSelf) strongSelf = weakSelf;
184   - if(strongSelf){
185   -
186   - }
187   - responseCallback(data);
188   - }];
189   -
190   - // h5主动从客户端获取网络状态
191   - [self.bridge registerHandler:@"wjjJSGetNetStatusFromClient" handler:^(id data, WVJBResponseCallback responseCallback) {
192   - if(TestEnvironment){
193   - NSLog(@"ObjC Echo called with: %@", data);
194   - }
195   - __strong typeof(weakSelf) strongSelf = weakSelf;
196   - if(strongSelf){
197   -
198   - }
199   - responseCallback(data);
200   - }];
201   -
202   - // 原生直播/回放无网络时的提示
203   - [self.bridge registerHandler:@"wjjClickLiveOnLine" handler:^(id data, WVJBResponseCallback responseCallback) {
204   - if(TestEnvironment){
205   - NSLog(@"ObjC Echo called with: %@", data);
206   - }
207   - __strong typeof(weakSelf) strongSelf = weakSelf;
208   - if(strongSelf){
209   - NSDictionary *info = [NSDictionary dictionaryWithDictionary:data];
210   - if ([[info objectForKey:@"onLine"] isEqualToString:@"NONE"]) {
211   - dispatch_async(dispatch_get_main_queue(), ^{
212   - [QMUITips showError:@"网络连接失败" inView:strongSelf.view hideAfterDelay:1.5];
213   - });
214   - }
215   - }
216   - responseCallback(data);
217   - }];
218   -
219   -}
220   -
221   -#pragma mark - 创建导航条
222   -- (void)setupNavigationBar {
223   - UIView *navView = [[UIView alloc] initWithFrame:CGRectMake(0, [UIApplication sharedApplication].statusBarFrame.size.height, [UIScreen mainScreen].bounds.size.width, 44)];
224   - navView.backgroundColor = [UIColor clearColor];
225   - [self.view bringSubviewToFront:navView];
226   - [self.view addSubview:navView];
227   -
228   - UIButton *leftBtn = [UIButton buttonWithType:UIButtonTypeSystem];
229   - leftBtn.frame = CGRectMake(0, 0, 44, 44);
230   - UIImage *leftImage = [self xw_getImageName:@"web_black_back" bundle:@"CNLiveAgreementManager.bundle/CNLiveAgreementManager" targetClass:[CNLiveAgreementWebController class]];
231   - [leftBtn setImage:[leftImage imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal] forState:UIControlStateNormal];
232   - [leftBtn addTarget:self action:@selector(goBack) forControlEvents:UIControlEventTouchUpInside];
233   - [navView addSubview:leftBtn];
234   -
235   - UIButton *closeBtn = [UIButton buttonWithType:UIButtonTypeSystem];
236   - closeBtn.frame = CGRectMake(44, 0, 44, 44);
237   - UIImage *closeImage = [self xw_getImageName:@"web_black_close" bundle:@"CNLiveAgreementManager.bundle/CNLiveAgreementManager" targetClass:[CNLiveAgreementWebController class]];
238   - [closeBtn setImage:[closeImage imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal] forState:UIControlStateNormal];
239   - [closeBtn addTarget:self action:@selector(closeClick) forControlEvents:UIControlEventTouchUpInside];
240   - closeBtn.hidden = !self.isShow;
241   - [navView addSubview:closeBtn];
242   -
243   - UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(([[UIScreen mainScreen] bounds].size.width - 200)/2.0, 0, 200, 44)];
244   - titleLabel.font = [UIFont boldSystemFontOfSize:17];
245   - titleLabel.textColor = [UIColor blackColor];
246   - titleLabel.text = self.name;
247   - titleLabel.textAlignment = NSTextAlignmentCenter;
248   - [navView addSubview:titleLabel];
249   - _titleLabel = titleLabel;
250   -
251   -}
252   -
253   -- (void)setupUI {
254   - WKWebViewConfiguration * configuration = [[WKWebViewConfiguration alloc] init];
255   - configuration.allowsInlineMediaPlayback = YES;
256   - WKPreferences *preferences = [WKPreferences new];
257   - preferences.javaScriptCanOpenWindowsAutomatically = YES;
258   - configuration.preferences = preferences;
259   - self.webView = [[WKWebView alloc] initWithFrame:CGRectMake(0, [UIApplication sharedApplication].statusBarFrame.size.height+44, [[UIScreen mainScreen] bounds].size.width, [[UIScreen mainScreen] bounds].size.height-([UIApplication sharedApplication].statusBarFrame.size.height+44)) configuration:configuration];
260   - _webView.UIDelegate = self;
261   - _webView.navigationDelegate = self;
262   - _webView.contentMode = UIViewContentModeScaleAspectFit;
263   - _webView.scrollView.showsHorizontalScrollIndicator = NO;
264   - _webView.scrollView.showsVerticalScrollIndicator = NO;
265   - _webView.allowsBackForwardNavigationGestures = YES;
266   - _webView.allowsLinkPreview = NO;
267   - [self.view addSubview:self.webView];
268   -
269   - self.processView = [[UIProgressView alloc] initWithFrame:CGRectMake(0, ([UIApplication sharedApplication].statusBarFrame.size.height+44)+0.5, [[UIScreen mainScreen] bounds].size.width, 1)];
270   - _processView.progressTintColor = [UIColor colorWithRed:19/255.0 green:204/255.0 blue:12/255.0 alpha:1.0];
271   - _processView.trackTintColor = [UIColor whiteColor];
272   - [self.view addSubview:self.processView];
273   -
274   -}
275   -
276   -- (void)setupUserAgent {
277   - NSString *customUserAgent = @";app/plat_a";
278   -
279   - if (@available(iOS 12.0, *)) {
280   - UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectZero];
281   - NSString *userAgent = [webView stringByEvaluatingJavaScriptFromString:@"navigator.userAgent"];
282   - NSString *newUserAgent = [userAgent stringByAppendingString:customUserAgent];//自定义需要拼接的字符串
283   - NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:newUserAgent, @"UserAgent", nil];
284   -
285   - [self.webView setCustomUserAgent:newUserAgent];
286   - [[NSUserDefaults standardUserDefaults] registerDefaults:dictionary];
287   - }
288   -
289   - __weak typeof(self) weakSelf = self;
290   - [self.webView evaluateJavaScript:@"navigator.userAgent" completionHandler:^(id result, NSError *error) {
291   - __strong typeof(weakSelf) strongSelf = weakSelf;
292   - NSString *userAgent = result;
293   - NSString *newUserAgent = [userAgent stringByAppendingString:customUserAgent];
294   - NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:newUserAgent, @"UserAgent", nil];
295   - [[NSUserDefaults standardUserDefaults] registerDefaults:dictionary];
296   - if (@available(iOS 9.0, *)) {
297   - [strongSelf.webView setCustomUserAgent:newUserAgent];
298   - }
299   - }];
300   -
301   - [self.webView addObserver:self forKeyPath:@"estimatedProgress" options:NSKeyValueObservingOptionNew context:nil];
302   - if (!self.name) {
303   - [self.webView addObserver:self forKeyPath:@"title" options:NSKeyValueObservingOptionNew context:NULL];
304   - }
305   -}
306   -
307   -#pragma mark - WKNavigationDelegate
308   -// 在发送请求之前,决定是否跳转
309   -- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler{
310   - //允许跳转
311   - decisionHandler(WKNavigationActionPolicyAllow);
312   -
313   -}
314   -
315   -// 页面开始加载时调用
316   -- (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation{
317   -
318   -}
319   -
320   -// 在收到响应后,决定是否跳转
321   -- (void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler{
322   - //允许跳转
323   - decisionHandler(WKNavigationResponsePolicyAllow);
324   - //不允许跳转
325   - //decisionHandler(WKNavigationResponsePolicyCancel);
326   -}
327   -
328   -// 当内容开始返回时调用
329   -- (void)webView:(WKWebView *)webView didCommitNavigation:(WKNavigation *)navigation{
330   -
331   -}
332   -
333   -// 页面加载完成之后调用
334   -- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation{
335   -
336   -}
337   -
338   -// 页面加载失败时调用
339   -- (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(null_unspecified WKNavigation *)navigation withError:(nonnull NSError *)error{
340   - NSLog(@"打印这个error%@",error);
341   -
342   -}
343   -
344   -// 接收到服务器跳转请求之后调用(重定向)
345   -- (void)webView:(WKWebView *)webView didReceiveServerRedirectForProvisionalNavigation:(WKNavigation *)navigation{
346   -
347   -}
348   -
349   -#pragma mark - 响应方法
350   -//回退goBack
351   -- (void)goBack {
352   - if ([self.webView canGoBack]) {
353   - [self.webView goBack];
354   - }
355   - else {
356   - [self closeClick];
357   - }
358   -}
359   -
360   -//关闭pop
361   -- (void)closeClick {
362   - if (self.presentingViewController != nil) {
363   - [self dismissViewControllerAnimated:YES completion:nil];
364   -
365   - }
366   - else {
367   - [self.navigationController popViewControllerAnimated:YES];
368   - }
369   -}
370   -
371   -#pragma mark - KVO
372   -- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context {
373   - if ([keyPath isEqualToString:@"estimatedProgress"]) {
374   - if (object == self.webView) {
375   - [self.processView setAlpha:1.0f];
376   - [self.processView setProgress:self.webView.estimatedProgress animated:YES];
377   -
378   - if(self.webView.estimatedProgress >= 1.0f) {
379   -
380   - [UIView animateWithDuration:0.3 delay:0.5 options:UIViewAnimationOptionCurveEaseOut animations:^{
381   - [self.processView setAlpha:0.0f];
382   -
383   - } completion:^(BOOL finished) {
384   - [self.processView setProgress:0.0f animated:NO];
385   -
386   - }];
387   -
388   - }
389   -
390   - }
391   - else {
392   - [super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
393   - }
394   -
395   - }
396   - else if ([keyPath isEqualToString:@"title"]){
397   - if (object == self.webView) {
398   - if (self.webView.title.length != 0) {
399   - self.name = self.webView.title;
400   -
401   - }
402   - }
403   - else {
404   - [super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
405   - }
406   - }
407   - else {
408   - [super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
409   -
410   - }
411   -}
412   -#pragma mark - 懒加载
413   -- (NSMutableArray *)photos{
414   - if(!_photos){
415   - _photos = [[NSMutableArray alloc]init];
416   - }
417   - return _photos;
418   -}
419   -
420   -#pragma mark - 私有方法
421   -// 清除缓存
422   -- (void)clearWKCache {
423   - NSArray *types = @[WKWebsiteDataTypeDiskCache,WKWebsiteDataTypeOfflineWebApplicationCache,WKWebsiteDataTypeMemoryCache,WKWebsiteDataTypeIndexedDBDatabases,WKWebsiteDataTypeWebSQLDatabases];
424   - NSSet *websiteDataTypes = [NSSet setWithArray:types];
425   - NSDate *dateFrom = [NSDate dateWithTimeIntervalSince1970:0];
426   - [[WKWebsiteDataStore defaultDataStore] removeDataOfTypes:websiteDataTypes modifiedSince:dateFrom completionHandler:^{
427   - if(TestEnvironment){
428   - NSLog(@"CNUserAgreementWebController 缓存清理完毕");
429   - }
430   - }];
431   -
432   -}
433   -
434   -/**
435   - * 创建图片
436   - *
437   - * @param imageName 图片名字
438   - * @param bundlePath 图片所在的bundle名字
439   - * @param targetClass 类和bundle的同级目录
440   - * @return 返回UIImage
441   - */
442   -- (UIImage *)xw_getImageName:(NSString *)imageName bundle:(NSString *)bundlePath targetClass:(Class)targetClass{
443   - NSBundle *bundle = [NSBundle bundleForClass:targetClass];
444   - NSURL *url = [bundle URLForResource:bundlePath withExtension:@"bundle"];
445   - NSBundle *targetBundle = [NSBundle bundleWithURL:url];
446   - UIImage *image = [UIImage imageNamed:imageName inBundle:targetBundle compatibleWithTraitCollection:nil];
447   - return image?image:[UIImage imageNamed:imageName inBundle:[NSBundle mainBundle] compatibleWithTraitCollection:nil];
448   -
449   -}
450   -
451   -#pragma mark - 上传图片到七牛
452   -// 获取图片的token
453   -- (void)getImageToken {
454   - NSDictionary *param = @{@"appId":AppId,
455   - @"verb":@"POST",
456   - @"storageType":@"2",
457   - @"bucket":API_BucketName,
458   - @"timestamp":[self currentTimestamp]
459   - };
460   - [QMUITips showLoading:@"正在提交" inView:self.view];
461   - __weak typeof(self) weakSelf = self;
462   - [CNLiveNetworking setAllowRequestDefaultArgument:NO];
463   - [CNLiveNetworking requestNetworkWithMethod:CNLiveRequestMethodPOST URLString:CNUploadAuthForApp Param:param CacheType:CNLiveNetworkCacheTypeNetworkOnly CompletionBlock:^(NSURLSessionTask *requestTask, id responseObject, NSError *error) {
464   - __strong typeof(weakSelf) strongSelf = weakSelf;
465   - if(!strongSelf) return ;
466   - if ([responseObject isKindOfClass:[NSDictionary class]]) {
467   - NSDictionary *dic = (NSDictionary *)responseObject;
468   - if (!error && dic[@"token"] && ![dic[@"token"] isEqualToString:@""]) {
469   - [self cn_QNStartUploadImageWithToken:dic[@"token"]];
470   - return;
471   - }
472   -
473   - }
474   - [QMUITips hideAllToastInView:strongSelf.view animated:YES];
475   - [QMUITips showError:@"提交失败" inView:strongSelf.view hideAfterDelay:1.5];
476   -
477   - }];
478   -
479   -}
480   -
481   -// 图片开始上传
482   -- (void)cn_QNStartUploadImageWithToken:(NSString *)token {
483   - __weak typeof(self) weakSelf = self;
484   - // 图片视频压缩(LXG)
485   - [_photos enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
486   - if (!weakSelf.photos[idx]) {
487   - [QMUITips hideAllToastInView:weakSelf.view animated:YES];
488   - [QMUITips showError:@"提交失败" inView:weakSelf.view hideAfterDelay:1.5];
489   - return;
490   - }
491   -// NSData *zipData = [UIImage zipNSDataWithImage:weakSelf.photos[idx]];//非原图压缩
492   -// if (zipData.length > kFriendsCircle_limit_photo) {//压缩后大于20M
493   -// [QMUITips hideAllToastInView:weakSelf.view animated:YES];
494   -// [QMUITips showError:@"图片过大" inView:weakSelf.view hideAfterDelay:1.5];
495   -// return;
496   -// }
497   -// else{
498   -// weakSelf.photos[idx] = [UIImage imageWithData:zipData];
499   -// }
500   -
501   - }];
502   -
503   - __block
504   - __block NSMutableArray *keyArr = [NSMutableArray array];
505   - __block NSMutableArray *picArr = [NSMutableArray array];
506   -
507   - for (int i = 0; i < _photos.count; i++) {
508   - @autoreleasepool {
509   - UIImage *image = _photos[i];
510   - __block NSData *imageData = UIImageJPEGRepresentation(image, 1);
511   - NSString *timeTampStr = [self get13tsRandTimeStr];
512   - NSString *qiniuFileName = [NSString stringWithFormat:@"%@/%@.jpg",[self getImageBuketkeyFromServerWithExt], timeTampStr];
513   - QNUploadManager *uploadManager = [QNUploadManager sharedInstanceWithConfiguration:nil];
514   - [uploadManager putData:imageData key:qiniuFileName token:token complete:^(QNResponseInfo *info, NSString *key, NSDictionary *resp) {
515   - __strong typeof(weakSelf) strongSelf = weakSelf;
516   - if(!strongSelf) return ;
517   - if (info.ok) {
518   - [keyArr addObject:key];
519   -
520   - NSString *imageUrl = [NSString stringWithFormat:@"%@%@",API_PhotoUrl,key];
521   - NSMutableDictionary *picDic = [NSMutableDictionary dictionary];
522   - [picDic setObject:imageUrl ? imageUrl : @"" forKey:@"imageUrl"];
523   - [picDic setObject:[NSString stringWithFormat:@"%.0f",image.size.width] forKey:@"imageWidth"];
524   - [picDic setObject:[NSString stringWithFormat:@"%.0f",image.size.height] forKey:@"imageHeight"];
525   - [picArr addObject:picDic];
526   -
527   - if (keyArr.count == strongSelf.photos.count) {
528   - id data = @{ @"images": picArr.copy };
529   - [strongSelf.photos removeAllObjects];
530   - // 帮助与反馈->产品建议App->h5图片urls
531   - [strongSelf.bridge callHandler:@"wjjSubmitSuccess" data:data responseCallback:^(id responseData) {
532   - if(TestEnvironment){
533   - NSLog(@"ObjC received response: %@", responseData);
534   - }
535   - }];
536   - }
537   -
538   - } else if (info.broken) {
539   - [QMUITips hideAllToastInView:strongSelf.view animated:YES];
540   - [QMUITips showError:@"网络连接失败" inView:strongSelf.view hideAfterDelay:1.5];
541   - return ;
542   - } else {
543   - [QMUITips hideAllToastInView:strongSelf.view animated:YES];
544   - [QMUITips showError:info.error.localizedDescription inView:strongSelf.view hideAfterDelay:1.5];
545   - return ;
546   - }
547   -
548   - } option:nil];
549   - }
550   - }
551   -}
552   -
553   -//获取当前时间戳
554   -- (NSString *)currentTimestamp{
555   - NSDate *datenow = [NSDate date];
556   - NSString *timeSp = [NSString stringWithFormat:@"%ld", (long)[datenow timeIntervalSince1970]];
557   - return timeSp;
558   -
559   -}
560   -
561   -- (NSString *)get13tsRandTimeStr {
562   - NSString *str1 = [NSString stringWithFormat:@"%d",arc4random() % 10];
563   - NSString *str2 = [NSString stringWithFormat:@"%d",arc4random() % 10];
564   - NSString *str3 = [NSString stringWithFormat:@"%d",arc4random() % 10];
565   - NSString *str4 = [NSString stringWithFormat:@"%d",arc4random() % 10];
566   - NSString *str5 = [NSString stringWithFormat:@"%d",arc4random() % 10];
567   - NSString *str6 = [NSString stringWithFormat:@"%d",arc4random() % 10];
568   - NSString *str7 = [NSString stringWithFormat:@"%d",arc4random() % 10];
569   - NSString *str8 = [NSString stringWithFormat:@"%d",arc4random() % 10];
570   -
571   - NSString *randTimeStr = [NSString stringWithFormat:@"%@%@%@%@%@%@%@%@%@",[self currentTimestamp],str1,str2,str3,str4,str5,str6,str7,str8];
572   - return randTimeStr;
573   -
574   -}
575   -
576   -- (NSString *)getImageBuketkeyFromServerWithExt{
577   -// NSString *spid = [CNLiveBusinessTools getSpid];
578   -// NSString *imgBucketKey = [NSString stringWithFormat:@"%@/img", spid];
579   -// NSString *yearTime = [CNLiveTimeTools getyyMMdd];
580   -// NSString *bucketKey = [NSString stringWithFormat:@"%@/%@",imgBucketKey,yearTime];
581   -// return bucketKey;
582   - return @"";
583   -
584   -}
585   -
586   -@end
CNLiveUserAgreementManager/Classes/CNLiveAgreementManager.h renamed to CNLiveUserAgreementManager/Classes/CNLiveUserAgreementManager.h
1 1 //
2   -// CNLiveAgreementManager.h
3   -// Test
  2 +// CNLiveUserAgreementManager.h
  3 +// CNLiveUserAgreementManager
4 4 //
5   -// Created by CNLive-zxw on 2019/4/13.
6   -// Copyright © 2019 CNLive. All rights reserved.
  5 +// Created by 153993236@qq.com on 04/13/2019.
  6 +// Copyright (c) 2019 153993236@qq.com. All rights reserved.
7 7 //
8 8  
9 9 #import <Foundation/Foundation.h>
10 10  
11 11 NS_ASSUME_NONNULL_BEGIN
12 12  
13   -typedef NS_ENUM(NSUInteger, CNGetAgreementH5Type) {
14   - CNAgreementUser = 1001,//用户协议
15   - CNAgreementPrivacy = 1002,//隐私政策
16   - CNAgreementHelp = 1003,//帮助与反馈
17   - CNAgreementUnderstand = 1004,//使用手册
18   - CNAgreementIntroduction = 1005,//应用简介
19   - CNAgreementCopyright = 1006,//版权信息
20   - CNAgreementPermission = 1007,//软件许可及服务协议
21   - CNAgreementIntegralRules = 1008,//积分规则
22   - CNAgreementSigninRules = 1009,//签到奖励规则
23   - CNAgreementReviewApply = 1010,//复核申请
24   - CNAgreementCancellation = 1011,//注销协议
25   - CNAgreementEmojiService = 1012,//表情包服务说明
26   - CNAgreementEmojiComplaints = 1013,//表情包投诉说明
27   - CNAgreementEnterpriseQualification = 1014,//企业资质
28   - CNAgreementBuyAudio = 1015 //购买音频协议
  13 +typedef NS_ENUM(NSUInteger, CNLiveGetAgreementH5Type) {
  14 + CNLiveUserAgreementUser = 1001,//用户协议
  15 + CNLiveUserAgreementPrivacy = 1002,//隐私政策
  16 + CNLiveUserAgreementHelp = 1003,//帮助与反馈
  17 + CNLiveUserAgreementUnderstand = 1004,//使用手册
  18 + CNLiveUserAgreementIntroduction = 1005,//应用简介
  19 + CNLiveUserAgreementCopyright = 1006,//版权信息
  20 + CNLiveUserAgreementPermission = 1007,//软件许可及服务协议
  21 + CNLiveUserAgreementIntegralRules = 1008,//积分规则
  22 + CNLiveUserAgreementSigninRules = 1009,//签到奖励规则
  23 + CNLiveUserAgreementReviewApply = 1010,//复核申请
  24 + CNLiveUserAgreementCancellation = 1011,//注销协议
  25 + CNLiveUserAgreementEmojiService = 1012,//表情包服务说明
  26 + CNLiveUserAgreementEmojiComplaints = 1013,//表情包投诉说明
  27 + CNLiveUserAgreementEnterpriseQualification = 1014,//企业资质
  28 + CNLiveUserAgreementBuyAudio = 1015 //购买音频协议
29 29  
30 30 };
31 31  
32 32 typedef void(^SuccessBlock)(NSString *h5, NSString *title, BOOL isShow);
33 33 typedef void(^FailureBlock)(NSError *error);
34 34  
35   -@interface CNLiveAgreementManager : NSObject
  35 +@interface CNLiveUserAgreementManager : NSObject
36 36  
37 37 + (instancetype)manager;
38 38  
... ... @@ -62,7 +62,7 @@ typedef void(^FailureBlock)(NSError *error);
62 62 * 请求协议并跳转
63 63 * @param type 类型
64 64 */
65   -+ (void)jumpToAgreementH5WithType:(CNGetAgreementH5Type)type;
  65 ++ (void)jumpToAgreementH5WithType:(CNLiveGetAgreementH5Type)type;
66 66  
67 67 /**
68 68 * 类方法 请求协议
... ... @@ -70,7 +70,7 @@ typedef void(^FailureBlock)(NSError *error);
70 70 * @param success 请求成功回调
71 71 * @param failure 请求失败回调
72 72 */
73   -+ (void)getAgreementH5WithType:(CNGetAgreementH5Type)type success:(SuccessBlock)success failure:(FailureBlock)failure;
  73 ++ (void)getAgreementH5WithType:(CNLiveGetAgreementH5Type)type success:(SuccessBlock)success failure:(FailureBlock)failure;
74 74  
75 75 /**
76 76 * 对象方法 请求协议
... ... @@ -78,7 +78,7 @@ typedef void(^FailureBlock)(NSError *error);
78 78 * @param success 请求成功回调
79 79 * @param failure 请求失败回调
80 80 */
81   -- (void)getAgreementH5WithType:(CNGetAgreementH5Type)type success:(SuccessBlock)success failure:(FailureBlock)failure;
  81 +- (void)getAgreementH5WithType:(CNLiveGetAgreementH5Type)type success:(SuccessBlock)success failure:(FailureBlock)failure;
82 82  
83 83 @end
84 84  
... ...
CNLiveUserAgreementManager/Classes/CNLiveAgreementManager.m renamed to CNLiveUserAgreementManager/Classes/CNLiveUserAgreementManager.m
1 1 //
2   -// CNLiveAgreementManager.m
3   -// Test
  2 +// CNLiveUserAgreementManager.h
  3 +// CNLiveUserAgreementManager
4 4 //
5   -// Created by CNLive-zxw on 2019/4/13.
6   -// Copyright © 2019 CNLive. All rights reserved.
  5 +// Created by 153993236@qq.com on 04/13/2019.
  6 +// Copyright (c) 2019 153993236@qq.com. All rights reserved.
7 7 //
8   -
9   -#import "CNLiveAgreementManager.h"
  8 +#import "CNLiveUserAgreementManager.h"
10 9 #import <CNLiveRequestBastKit/CNLiveNetworking.h>
11 10 #import "CNLiveEnvironment.h"
12   -#import "CNLiveAgreementWebController.h"
  11 +#import "CNLiveUserAgreementWebController.h"
13 12  
14   -@interface CNLiveAgreementManager()
  13 +@interface CNLiveUserAgreementManager()
15 14  
16 15  
17 16 @end
18 17  
19   -@implementation CNLiveAgreementManager
  18 +@implementation CNLiveUserAgreementManager
20 19  
21   -static CNLiveAgreementManager *_instance = nil;
  20 +static CNLiveUserAgreementManager *_instance = nil;
22 21  
23 22 /**
24 23 * @abstract 单例初始化
... ... @@ -26,7 +25,7 @@ static CNLiveAgreementManager *_instance = nil;
26 25 + (instancetype)manager{
27 26 static dispatch_once_t once;
28 27 dispatch_once(&once, ^{
29   - _instance = [[CNLiveAgreementManager alloc]init];
  28 + _instance = [[CNLiveUserAgreementManager alloc]init];
30 29 });
31 30 return _instance;
32 31 }
... ... @@ -54,7 +53,7 @@ static CNLiveAgreementManager *_instance = nil;
54 53 * @param success 请求成功回调
55 54 * @param failure 请求失败回调
56 55 */
57   -- (void)getAgreementH5WithType:(CNGetAgreementH5Type)type success:(SuccessBlock)success failure:(FailureBlock)failure {
  56 +- (void)getAgreementH5WithType:(CNLiveGetAgreementH5Type)type success:(SuccessBlock)success failure:(FailureBlock)failure {
58 57 [CNLiveNetworking setAllowRequestDefaultArgument:NO];
59 58 [CNLiveNetworking requestNetworkWithMethod:CNLiveRequestMethodGET URLString:CNGetAgreementH5Url Param:@{} CacheType:CNLiveNetworkCacheTypeNetworkOnly CompletionBlock:^(NSURLSessionTask *requestTask, id responseObject, NSError *error) {
60 59 if (error) {
... ... @@ -68,7 +67,7 @@ static CNLiveAgreementManager *_instance = nil;
68 67 for (NSDictionary *dic in responseObject) {
69 68  
70 69 switch (type) {
71   - case CNAgreementUser:
  70 + caseCNLiveUserAgreementUser:
72 71 {
73 72 if ([[NSString stringWithFormat:@"%@",dic[@"type"]] isEqualToString:@"yhxy"]) {
74 73 if (success) {
... ... @@ -78,7 +77,7 @@ static CNLiveAgreementManager *_instance = nil;
78 77 }
79 78 }
80 79 break;
81   - case CNAgreementPrivacy:
  80 + caseCNLiveUserAgreementPrivacy:
82 81 {
83 82 if ([[NSString stringWithFormat:@"%@",dic[@"type"]] isEqualToString:@"yszc"]) {
84 83 if (success) {
... ... @@ -88,7 +87,7 @@ static CNLiveAgreementManager *_instance = nil;
88 87 }
89 88 }
90 89 break;
91   - case CNAgreementHelp:
  90 + caseCNLiveUserAgreementHelp:
92 91 {
93 92 if ([[NSString stringWithFormat:@"%@",dic[@"type"]] isEqualToString:@"bzfk"]) {
94 93 if (success) {
... ... @@ -98,7 +97,7 @@ static CNLiveAgreementManager *_instance = nil;
98 97 }
99 98 }
100 99 break;
101   - case CNAgreementUnderstand:
  100 + caseCNLiveUserAgreementUnderstand:
102 101 {
103 102 if ([[NSString stringWithFormat:@"%@",dic[@"type"]] isEqualToString:@"ljwjj"]) {
104 103 if (success) {
... ... @@ -108,7 +107,7 @@ static CNLiveAgreementManager *_instance = nil;
108 107 }
109 108 }
110 109 break;
111   - case CNAgreementIntroduction:
  110 + caseCNLiveUserAgreementIntroduction:
112 111 {
113 112 if ([[NSString stringWithFormat:@"%@", dic[@"type"]] isEqualToString:@"yyjj"]) {
114 113 if (success) {
... ... @@ -118,7 +117,7 @@ static CNLiveAgreementManager *_instance = nil;
118 117 }
119 118 }
120 119 break;
121   - case CNAgreementCopyright:
  120 + caseCNLiveUserAgreementCopyright:
122 121 {
123 122 if ([[NSString stringWithFormat:@"%@", dic[@"type"]] isEqualToString:@"bqxx"]) {
124 123 if (success) {
... ... @@ -128,7 +127,7 @@ static CNLiveAgreementManager *_instance = nil;
128 127 }
129 128 }
130 129 break;
131   - case CNAgreementPermission:
  130 + caseCNLiveUserAgreementPermission:
132 131 {
133 132 if ([[NSString stringWithFormat:@"%@", dic[@"type"]] isEqualToString:@"rjxkxy"]) {
134 133 if (success) {
... ... @@ -138,7 +137,7 @@ static CNLiveAgreementManager *_instance = nil;
138 137 }
139 138 }
140 139 break;
141   - case CNAgreementIntegralRules:
  140 + caseCNLiveUserAgreementIntegralRules:
142 141 {
143 142 if ([[NSString stringWithFormat:@"%@", dic[@"type"]] isEqualToString:@"jfgz"]) {
144 143 if (success) {
... ... @@ -148,7 +147,7 @@ static CNLiveAgreementManager *_instance = nil;
148 147 }
149 148 }
150 149 break;
151   - case CNAgreementSigninRules:
  150 + caseCNLiveUserAgreementSigninRules:
152 151 {
153 152 if ([[NSString stringWithFormat:@"%@", dic[@"type"]] isEqualToString:@"jfjlgz"]) {
154 153 if (success) {
... ... @@ -158,7 +157,7 @@ static CNLiveAgreementManager *_instance = nil;
158 157 }
159 158 }
160 159 break;
161   - case CNAgreementReviewApply:
  160 + caseCNLiveUserAgreementReviewApply:
162 161 {
163 162 if ([[NSString stringWithFormat:@"%@", dic[@"type"]] isEqualToString:@"shsqxy"]) {
164 163 if (success) {
... ... @@ -168,7 +167,7 @@ static CNLiveAgreementManager *_instance = nil;
168 167 }
169 168 }
170 169 break;
171   - case CNAgreementCancellation:
  170 + caseCNLiveUserAgreementCancellation:
172 171 {
173 172 if ([[NSString stringWithFormat:@"%@", dic[@"type"]] isEqualToString:@"zxxz"]) {
174 173 if (success) {
... ... @@ -178,7 +177,7 @@ static CNLiveAgreementManager *_instance = nil;
178 177 }
179 178 }
180 179 break;
181   - case CNAgreementEmojiService:
  180 + caseCNLiveUserAgreementEmojiService:
182 181 {
183 182 if ([[NSString stringWithFormat:@"%@", dic[@"type"]] isEqualToString:@"fwsm"]) {
184 183 if (success) {
... ... @@ -188,7 +187,7 @@ static CNLiveAgreementManager *_instance = nil;
188 187 }
189 188 }
190 189 break;
191   - case CNAgreementEmojiComplaints:
  190 + caseCNLiveUserAgreementEmojiComplaints:
192 191 {
193 192 if ([[NSString stringWithFormat:@"%@", dic[@"type"]] isEqualToString:@"tssm"]) {
194 193 if (success) {
... ... @@ -198,7 +197,7 @@ static CNLiveAgreementManager *_instance = nil;
198 197 }
199 198 }
200 199 break;
201   - case CNAgreementEnterpriseQualification:
  200 + caseCNLiveUserAgreementEnterpriseQualification:
202 201 {
203 202 if ([[NSString stringWithFormat:@"%@", dic[@"type"]] isEqualToString:@"qyzz"]) {
204 203 if (success) {
... ... @@ -208,7 +207,7 @@ static CNLiveAgreementManager *_instance = nil;
208 207 }
209 208 }
210 209 break;
211   - case CNAgreementBuyAudio:
  210 + caseCNLiveUserAgreementBuyAudio:
212 211 {
213 212 if ([[NSString stringWithFormat:@"%@", dic[@"type"]] isEqualToString:@"ypxy"]) {
214 213 if (success) {
... ... @@ -239,8 +238,8 @@ static CNLiveAgreementManager *_instance = nil;
239 238 * @param success 请求成功回调
240 239 * @param failure 请求失败回调
241 240 */
242   -+ (void)getAgreementH5WithType:(CNGetAgreementH5Type)type success:(SuccessBlock)success failure:(FailureBlock)failure {
243   - [[CNLiveAgreementManager manager] getAgreementH5WithType:type success:^(NSString * _Nonnull h5, NSString * _Nonnull title, BOOL isShow) {
  241 ++ (void)getAgreementH5WithType:(CNLiveGetAgreementH5Type)type success:(SuccessBlock)success failure:(FailureBlock)failure {
  242 + [[CNLiveUserAgreementManager manager] getAgreementH5WithType:type success:^(NSString * _Nonnull h5, NSString * _Nonnull title, BOOL isShow) {
244 243 success?success(h5, title, isShow):@"";
245 244  
246 245 } failure:^(NSError * _Nonnull error) {
... ... @@ -254,9 +253,9 @@ static CNLiveAgreementManager *_instance = nil;
254 253 * 请求协议并跳转
255 254 * @param type 类型
256 255 */
257   -+ (void)jumpToAgreementH5WithType:(CNGetAgreementH5Type)type{
  256 ++ (void)jumpToAgreementH5WithType:(CNLiveGetAgreementH5Type)type{
258 257 __weak typeof(self) weakSelf = self;
259   - [CNLiveAgreementManager getAgreementH5WithType:type success:^(NSString *h5, NSString *title, BOOL isShow) {
  258 + [CNLiveUserAgreementManager getAgreementH5WithType:type success:^(NSString *h5, NSString *title, BOOL isShow) {
260 259 __strong typeof(weakSelf) strongSelf = weakSelf;
261 260 if(!strongSelf) return;
262 261 [strongSelf pushToWebControllerUrl:h5 name:title showCloseBtn:isShow];
... ... @@ -277,7 +276,7 @@ static CNLiveAgreementManager *_instance = nil;
277 276 */
278 277 + (void)jumpToAgreementH5WithString:(NSString *)string {
279 278 __weak typeof(self) weakSelf = self;
280   - [CNLiveAgreementManager getAgreementH5WithString:string success:^(NSString *h5, NSString *title, BOOL isShow) {
  279 + [CNLiveUserAgreementManager getAgreementH5WithString:string success:^(NSString *h5, NSString *title, BOOL isShow) {
281 280 __strong typeof(weakSelf) strongSelf = weakSelf;
282 281 if(!strongSelf) return;
283 282 [strongSelf pushToWebControllerUrl:h5 name:title showCloseBtn:isShow];
... ... @@ -298,7 +297,7 @@ static CNLiveAgreementManager *_instance = nil;
298 297 * @param failure 请求失败回调
299 298 */
300 299 + (void)getAgreementH5WithString:(NSString *)string success:(SuccessBlock)success failure:(FailureBlock)failure{
301   - [[CNLiveAgreementManager manager] getAgreementH5WithString:string success:^(NSString *h5, NSString *title, BOOL isShow) {
  300 + [[CNLiveUserAgreementManager manager] getAgreementH5WithString:string success:^(NSString *h5, NSString *title, BOOL isShow) {
302 301 success?success(h5, title, isShow):@"";
303 302  
304 303 } failure:^(NSError *error) {
... ... @@ -344,7 +343,7 @@ static CNLiveAgreementManager *_instance = nil;
344 343 //跟控制器是Navigation
345 344 if ([root isKindOfClass:[UINavigationController class]]){
346 345 UINavigationController *nav = (UINavigationController *)root;
347   - CNLiveAgreementWebController *vc = [[CNLiveAgreementWebController alloc] initWithUrl:url name:name showCloseBtn:isShow];
  346 + CNLiveUserAgreementWebController *vc = [[CNLiveUserAgreementWebController alloc] initWithUrl:url name:name showCloseBtn:isShow];
348 347 [nav pushViewController:vc animated:YES];
349 348  
350 349 }
... ... @@ -352,11 +351,11 @@ static CNLiveAgreementManager *_instance = nil;
352 351 else if ([root isKindOfClass:[UITabBarController class]]){
353 352 UITabBarController *tab = (UITabBarController *)root;
354 353 UINavigationController *nav = tab.selectedViewController;
355   - CNLiveAgreementWebController *vc = [[CNLiveAgreementWebController alloc] initWithUrl:url name:name showCloseBtn:isShow];
  354 + CNLiveUserAgreementWebController *vc = [[CNLiveUserAgreementWebController alloc] initWithUrl:url name:name showCloseBtn:isShow];
356 355 [nav pushViewController:vc animated:YES];
357 356  
358 357 }else{
359   - CNLiveAgreementWebController *vc = [[CNLiveAgreementWebController alloc] initWithUrl:url name:name showCloseBtn:isShow];
  358 + CNLiveUserAgreementWebController *vc = [[CNLiveUserAgreementWebController alloc] initWithUrl:url name:name showCloseBtn:isShow];
360 359 [root presentViewController:vc animated:YES completion:nil];
361 360  
362 361 }
... ...
CNLiveUserAgreementManager/Classes/CNLiveAgreementWebController.h renamed to CNLiveUserAgreementManager/Classes/CNLiveUserAgreementWebController.h
1 1 //
2   -// CNLiveAgreementWebController.h
3   -// CNLiveServices_Example
  2 +// CNLiveUserAgreementWebController.h
  3 +// CNLiveUserAgreementManager
4 4 //
5   -// Created by CNLive-zxw on 2019/7/30.
6   -// Copyright © 2019 153993236@qq.com. All rights reserved.
  5 +// Created by 153993236@qq.com on 04/13/2019.
  6 +// Copyright (c) 2019 153993236@qq.com. All rights reserved.
7 7 //
8 8  
9 9 #import <UIKit/UIKit.h>
10 10  
11 11 NS_ASSUME_NONNULL_BEGIN
12 12  
13   -@interface CNLiveAgreementWebController : UIViewController
  13 +@interface CNLiveUserAgreementWebController : UIViewController
14 14 /**
15 15 * 对象方法 初始化方法
16 16 * @param url url
... ...
CNLiveUserAgreementManager/Classes/CNLiveUserAgreementWebController.m 0 → 100644
  1 +//
  2 +// CNLiveUserAgreementWebController.h
  3 +// CNLiveUserAgreementManager
  4 +//
  5 +// Created by 153993236@qq.com on 04/13/2019.
  6 +// Copyright (c) 2019 153993236@qq.com. All rights reserved.
  7 +//
  8 +
  9 +#import "CNLiveUserAgreementWebController.h"
  10 +// 七牛
  11 +#import <WebKit/WebKit.h>
  12 +// 环境库
  13 +#import "CNLiveEnvironment.h"
  14 +
  15 +#import <CNLiveRequestBastKit/CNLiveNetworking.h>
  16 +
  17 +@interface CNLiveUserAgreementWebController ()<WKUIDelegate, WKNavigationDelegate>
  18 +@property (nonatomic, copy) NSString *url;
  19 +@property (nonatomic, copy) NSString *name;
  20 +@property (nonatomic, assign) BOOL isShow;
  21 +
  22 +@property (nonatomic, strong) WKWebView *webView;
  23 +@property (nonatomic, strong) UIProgressView *processView;
  24 +@property (nonatomic, weak) UILabel *titleLabel;
  25 +
  26 +@property (nonatomic, strong) NSMutableArray *photos;// 上传图片
  27 +
  28 +@end
  29 +
  30 +@implementation CNLiveUserAgreementWebController
  31 +#pragma mark - 初始化方法
  32 +- (instancetype)initWithUrl:(NSString *)url name:(nullable NSString *)name showCloseBtn:(BOOL)isShow {
  33 + self = [super init];
  34 + if (self) {
  35 + self.url = url;
  36 + self.name = name;
  37 + self.isShow = isShow;
  38 + }
  39 + return self;
  40 +}
  41 +
  42 +- (void)setName:(NSString *)name{
  43 + _name = name;
  44 + _titleLabel.text = name;
  45 +
  46 +}
  47 +
  48 +#pragma mark - 加载数据
  49 +- (void)loadUrl {
  50 + NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:self.url] cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:15.0];
  51 + [self.webView loadRequest:theRequest];
  52 +
  53 +}
  54 +
  55 +#pragma mark - 生命周期
  56 +- (void)viewWillAppear:(BOOL)animated {
  57 + [super viewWillAppear:animated];
  58 + self.navigationController.navigationBarHidden = YES;
  59 +
  60 +}
  61 +
  62 +- (void)viewWillDisappear:(BOOL)animated {
  63 + [super viewWillDisappear:animated];
  64 + self.navigationController.navigationBarHidden = NO;
  65 +
  66 +}
  67 +
  68 +- (void)viewDidLoad {
  69 + [super viewDidLoad];
  70 + self.view.backgroundColor = [UIColor whiteColor];
  71 + if (@available(iOS 11, *)) {
  72 + self.webView.scrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentAutomatic;
  73 + }
  74 + else {
  75 + self.automaticallyAdjustsScrollViewInsets = NO;
  76 + }
  77 + [self setupNavigationBar];
  78 + [self setupUI];
  79 + [self loadUrl];
  80 +
  81 +}
  82 +
  83 +- (void)dealloc {
  84 + if(TestEnvironment){
  85 + NSLog(@"CNUserLiveAgreementWebController dealloc");
  86 + }
  87 + [self.webView stopLoading];
  88 + [self.webView removeObserver:self forKeyPath:@"estimatedProgress"];
  89 + if (!self.name) {
  90 + [self.webView removeObserver:self forKeyPath:@"title"];
  91 + }
  92 + self.webView.UIDelegate = nil;
  93 + self.webView.navigationDelegate = nil;
  94 + self.webView = nil;
  95 + [self clearWKCache];
  96 +
  97 +}
  98 +
  99 +#pragma mark - 创建导航条
  100 +- (void)setupNavigationBar {
  101 + UIView *navView = [[UIView alloc] initWithFrame:CGRectMake(0, [UIApplication sharedApplication].statusBarFrame.size.height, [UIScreen mainScreen].bounds.size.width, 44)];
  102 + navView.backgroundColor = [UIColor clearColor];
  103 + [self.view bringSubviewToFront:navView];
  104 + [self.view addSubview:navView];
  105 +
  106 + UIButton *leftBtn = [UIButton buttonWithType:UIButtonTypeSystem];
  107 + leftBtn.frame = CGRectMake(15, 0, 44, 44);
  108 + UIImage *leftImage = [self xw_getImageName:@"web_black_back" bundleName:@"CNLiveUserAgreementManager" targetClass:[CNLiveUserAgreementWebController class]];
  109 + [leftBtn setImage:[leftImage imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal] forState:UIControlStateNormal];
  110 + [leftBtn addTarget:self action:@selector(goBack) forControlEvents:UIControlEventTouchUpInside];
  111 + [leftBtn setContentHorizontalAlignment:UIControlContentHorizontalAlignmentLeft];
  112 + [navView addSubview:leftBtn];
  113 +
  114 + UIButton *closeBtn = [UIButton buttonWithType:UIButtonTypeSystem];
  115 + closeBtn.frame = CGRectMake(44+15, 0, 44, 44);
  116 + UIImage *closeImage = [self xw_getImageName:@"web_black_close" bundleName:@"CNLiveUserAgreementManager" targetClass:[CNLiveUserAgreementWebController class]];
  117 + [closeBtn setImage:[closeImage imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal] forState:UIControlStateNormal];
  118 + [closeBtn addTarget:self action:@selector(closeClick) forControlEvents:UIControlEventTouchUpInside];
  119 + [closeBtn setContentHorizontalAlignment:UIControlContentHorizontalAlignmentLeft];
  120 + closeBtn.hidden = !self.isShow;
  121 + [navView addSubview:closeBtn];
  122 +
  123 + UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(([[UIScreen mainScreen] bounds].size.width - 200)/2.0, 0, 200, 44)];
  124 + titleLabel.font = [UIFont boldSystemFontOfSize:17];
  125 + titleLabel.textColor = [UIColor blackColor];
  126 + titleLabel.text = self.name;
  127 + titleLabel.textAlignment = NSTextAlignmentCenter;
  128 + [navView addSubview:titleLabel];
  129 + _titleLabel = titleLabel;
  130 +
  131 +}
  132 +
  133 +- (void)setupUI {
  134 + WKWebViewConfiguration * configuration = [[WKWebViewConfiguration alloc] init];
  135 + configuration.allowsInlineMediaPlayback = YES;
  136 + WKPreferences *preferences = [WKPreferences new];
  137 + preferences.javaScriptCanOpenWindowsAutomatically = YES;
  138 + configuration.preferences = preferences;
  139 + self.webView = [[WKWebView alloc] initWithFrame:CGRectMake(0, [UIApplication sharedApplication].statusBarFrame.size.height+44, [[UIScreen mainScreen] bounds].size.width, [[UIScreen mainScreen] bounds].size.height-([UIApplication sharedApplication].statusBarFrame.size.height+44)) configuration:configuration];
  140 + _webView.UIDelegate = self;
  141 + _webView.navigationDelegate = self;
  142 + _webView.contentMode = UIViewContentModeScaleAspectFit;
  143 + _webView.scrollView.showsHorizontalScrollIndicator = NO;
  144 + _webView.scrollView.showsVerticalScrollIndicator = NO;
  145 + _webView.allowsBackForwardNavigationGestures = YES;
  146 + _webView.allowsLinkPreview = NO;
  147 + [self.view addSubview:self.webView];
  148 +
  149 + self.processView = [[UIProgressView alloc] initWithFrame:CGRectMake(0, ([UIApplication sharedApplication].statusBarFrame.size.height+44)+0.5, [[UIScreen mainScreen] bounds].size.width, 1)];
  150 + _processView.progressTintColor = [UIColor colorWithRed:19/255.0 green:204/255.0 blue:12/255.0 alpha:1.0];
  151 + _processView.trackTintColor = [UIColor whiteColor];
  152 + [self.view addSubview:self.processView];
  153 +
  154 + [self.webView addObserver:self forKeyPath:@"estimatedProgress" options:NSKeyValueObservingOptionNew context:nil];
  155 + if (!self.name) {
  156 + [self.webView addObserver:self forKeyPath:@"title" options:NSKeyValueObservingOptionNew context:NULL];
  157 + }
  158 +
  159 +}
  160 +
  161 +
  162 +#pragma mark - WKNavigationDelegate
  163 +// 在发送请求之前,决定是否跳转
  164 +- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler{
  165 + //允许跳转
  166 + decisionHandler(WKNavigationActionPolicyAllow);
  167 +
  168 +}
  169 +
  170 +// 页面开始加载时调用
  171 +- (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation{
  172 +
  173 +}
  174 +
  175 +// 在收到响应后,决定是否跳转
  176 +- (void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler{
  177 + //允许跳转
  178 + decisionHandler(WKNavigationResponsePolicyAllow);
  179 + //不允许跳转
  180 + //decisionHandler(WKNavigationResponsePolicyCancel);
  181 +}
  182 +
  183 +// 当内容开始返回时调用
  184 +- (void)webView:(WKWebView *)webView didCommitNavigation:(WKNavigation *)navigation{
  185 +
  186 +}
  187 +
  188 +// 页面加载完成之后调用
  189 +- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation{
  190 +
  191 +}
  192 +
  193 +// 页面加载失败时调用
  194 +- (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(null_unspecified WKNavigation *)navigation withError:(nonnull NSError *)error{
  195 + NSLog(@"打印这个error%@",error);
  196 +
  197 +}
  198 +
  199 +// 接收到服务器跳转请求之后调用(重定向)
  200 +- (void)webView:(WKWebView *)webView didReceiveServerRedirectForProvisionalNavigation:(WKNavigation *)navigation{
  201 +
  202 +}
  203 +
  204 +#pragma mark - 响应方法
  205 +//回退goBack
  206 +- (void)goBack {
  207 + if ([self.webView canGoBack]) {
  208 + [self.webView goBack];
  209 + }
  210 + else {
  211 + [self closeClick];
  212 + }
  213 +}
  214 +
  215 +//关闭pop
  216 +- (void)closeClick {
  217 + if (self.presentingViewController != nil) {
  218 + [self dismissViewControllerAnimated:YES completion:nil];
  219 +
  220 + }
  221 + else {
  222 + [self.navigationController popViewControllerAnimated:YES];
  223 + }
  224 +}
  225 +
  226 +#pragma mark - KVO
  227 +- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context {
  228 + if ([keyPath isEqualToString:@"estimatedProgress"]) {
  229 + if (object == self.webView) {
  230 + [self.processView setAlpha:1.0f];
  231 + [self.processView setProgress:self.webView.estimatedProgress animated:YES];
  232 +
  233 + if(self.webView.estimatedProgress >= 1.0f) {
  234 +
  235 + [UIView animateWithDuration:0.3 delay:0.5 options:UIViewAnimationOptionCurveEaseOut animations:^{
  236 + [self.processView setAlpha:0.0f];
  237 +
  238 + } completion:^(BOOL finished) {
  239 + [self.processView setProgress:0.0f animated:NO];
  240 +
  241 + }];
  242 +
  243 + }
  244 +
  245 + }
  246 + else {
  247 + [super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
  248 + }
  249 +
  250 + }
  251 + else if ([keyPath isEqualToString:@"title"]){
  252 + if (object == self.webView) {
  253 + if (self.webView.title.length != 0) {
  254 + self.name = self.webView.title;
  255 +
  256 + }
  257 + }
  258 + else {
  259 + [super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
  260 + }
  261 + }
  262 + else {
  263 + [super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
  264 +
  265 + }
  266 +}
  267 +#pragma mark - 懒加载
  268 +#pragma mark - 私有方法
  269 +// 清除缓存
  270 +- (void)clearWKCache {
  271 + NSArray *types = @[WKWebsiteDataTypeDiskCache,WKWebsiteDataTypeOfflineWebApplicationCache,WKWebsiteDataTypeMemoryCache,WKWebsiteDataTypeIndexedDBDatabases,WKWebsiteDataTypeWebSQLDatabases];
  272 + NSSet *websiteDataTypes = [NSSet setWithArray:types];
  273 + NSDate *dateFrom = [NSDate dateWithTimeIntervalSince1970:0];
  274 + [[WKWebsiteDataStore defaultDataStore] removeDataOfTypes:websiteDataTypes modifiedSince:dateFrom completionHandler:^{
  275 + if(TestEnvironment){
  276 + NSLog(@"CNLiveUserAgreementWebController 缓存清理完毕");
  277 + }
  278 + }];
  279 +
  280 +}
  281 +
  282 +/**
  283 + * 创建图片
  284 + *
  285 + * @param imageName 图片名字
  286 + * @param bundleName 图片所在的bundle名字
  287 + * @param targetClass 类和bundle的同级目录
  288 + * @return 返回UIImage
  289 + */
  290 +- (UIImage *)xw_getImageName:(NSString *)imageName bundleName:(NSString *)bundleName targetClass:(Class)targetClass{
  291 + NSBundle *bundle = [NSBundle bundleForClass:targetClass];
  292 + NSURL *url = [bundle URLForResource:bundleName withExtension:@"bundle"];
  293 + NSBundle *targetBundle = [NSBundle bundleWithURL:url];
  294 + UIImage *image = [UIImage imageNamed:imageName inBundle:targetBundle compatibleWithTraitCollection:nil];
  295 + return image?image:[UIImage imageNamed:imageName inBundle:[NSBundle mainBundle] compatibleWithTraitCollection:nil];
  296 +
  297 +}
  298 +
  299 +@end
... ...
Example/CNLiveUserAgreementManager.xcodeproj/project.pbxproj
... ... @@ -61,7 +61,7 @@
61 61 6003F5BB195388D20070C39A /* Tests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Tests.m; sourceTree = "<group>"; };
62 62 606FC2411953D9B200FFA9A0 /* Tests-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Tests-Prefix.pch"; sourceTree = "<group>"; };
63 63 71719F9E1E33DC2100824A3D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
64   - 7A1C126D9A48DA93CC000266 /* CNLiveUserAgreementManager.podspec */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = CNLiveUserAgreementManager.podspec; path = ../CNLiveUserAgreementManager.podspec; sourceTree = "<group>"; };
  64 + 7A1C126D9A48DA93CC000266 /* CNLiveUserAgreementManager.podspec */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = CNLiveUserAgreementManager.podspec; path = ../CNLiveUserAgreementManager.podspec; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };
65 65 873B8AEA1B1F5CCA007FD442 /* Main.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = Main.storyboard; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
66 66 919A11E2C0D5C88E34C935D4 /* Pods_CNLiveUserAgreementManager_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_CNLiveUserAgreementManager_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
67 67 AACA5F9B3491663272E37D89 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = LICENSE; path = ../LICENSE; sourceTree = "<group>"; };
... ... @@ -260,6 +260,7 @@
260 260 developmentRegion = English;
261 261 hasScannedForEncodings = 0;
262 262 knownRegions = (
  263 + English,
263 264 en,
264 265 Base,
265 266 );
... ... @@ -302,31 +303,29 @@
302 303 buildActionMask = 2147483647;
303 304 files = (
304 305 );
305   - inputFileListPaths = (
306   - );
307 306 inputPaths = (
308 307 "${PODS_ROOT}/Target Support Files/Pods-CNLiveUserAgreementManager_Example/Pods-CNLiveUserAgreementManager_Example-frameworks.sh",
309 308 "${BUILT_PRODUCTS_DIR}/AFNetworking/AFNetworking.framework",
  309 + "${BUILT_PRODUCTS_DIR}/CNLiveBeeHive/CNLiveBeeHive.framework",
310 310 "${BUILT_PRODUCTS_DIR}/CNLiveEnvironment/CNLiveEnvironment.framework",
311 311 "${BUILT_PRODUCTS_DIR}/CNLiveRequestBastKit/CNLiveRequestBastKit.framework",
  312 + "${BUILT_PRODUCTS_DIR}/CNLiveTripartiteManagement/CNLiveTripartiteManagement.framework",
312 313 "${BUILT_PRODUCTS_DIR}/CNLiveUserAgreementManager/CNLiveUserAgreementManager.framework",
313   - "${BUILT_PRODUCTS_DIR}/HappyDNS/HappyDNS.framework",
  314 + "${BUILT_PRODUCTS_DIR}/CNLiveUserManagement/CNLiveUserManagement.framework",
  315 + "${BUILT_PRODUCTS_DIR}/MJExtension/MJExtension.framework",
314 316 "${BUILT_PRODUCTS_DIR}/QMUIKit/QMUIKit.framework",
315   - "${BUILT_PRODUCTS_DIR}/Qiniu/Qiniu.framework",
316   - "${BUILT_PRODUCTS_DIR}/WebViewJavascriptBridge/WebViewJavascriptBridge.framework",
317 317 );
318 318 name = "[CP] Embed Pods Frameworks";
319   - outputFileListPaths = (
320   - );
321 319 outputPaths = (
322 320 "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/AFNetworking.framework",
  321 + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/CNLiveBeeHive.framework",
323 322 "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/CNLiveEnvironment.framework",
324 323 "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/CNLiveRequestBastKit.framework",
  324 + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/CNLiveTripartiteManagement.framework",
325 325 "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/CNLiveUserAgreementManager.framework",
326   - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/HappyDNS.framework",
  326 + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/CNLiveUserManagement.framework",
  327 + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MJExtension.framework",
327 328 "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/QMUIKit.framework",
328   - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Qiniu.framework",
329   - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/WebViewJavascriptBridge.framework",
330 329 );
331 330 runOnlyForDeploymentPostprocessing = 0;
332 331 shellPath = /bin/sh;
... ...
Example/CNLiveUserAgreementManager/CNLiveViewController.m
... ... @@ -7,7 +7,7 @@
7 7 //
8 8  
9 9 #import "CNLiveViewController.h"
10   -#import "CNLiveAgreementManager.h"
  10 +#import "CNLiveUserAgreementManager.h"
11 11 #import "CNLiveEnvironment.h"
12 12  
13 13 @interface CNLiveViewController ()
... ... @@ -33,8 +33,8 @@
33 33  
34 34 }
35 35 - (void)testButtonClicked {
36   - [CNLiveAgreementManager jumpToAgreementH5WithType:CNAgreementHelp];
37   -// [CNLiveAgreementManager jumpToAgreementH5WithString:@"yhxy"];
  36 +// [CNLiveUserAgreementManager jumpToAgreementH5WithType:CNLiveUserAgreementHelp];
  37 + [CNLiveUserAgreementManager jumpToAgreementH5WithString:@"yhxy"];
38 38  
39 39 }
40 40  
... ...