JYNewSearchViewController.m 83 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062
  1. //
  2. // JYNewSearchViewController.m
  3. // JianYuIOS
  4. //
  5. // Created by apple on 2020/6/5.
  6. // Copyright © 2020 lixianglan. All rights reserved.
  7. //
  8. #import "JYNewSearchViewController.h"
  9. #import <WebKit/WebKit.h>
  10. #import "JYTabBarController.h"
  11. #import <CoreLocation/CoreLocation.h>
  12. #import <GRPCClient/GRPCCall+ChannelArg.h>
  13. #import <GRPCClient/GRPCCall+Tests.h>
  14. @interface JYNewSearchViewController ()<WKNavigationDelegate,WKUIDelegate,WKScriptMessageHandler,CLLocationManagerDelegate,UINavigationControllerDelegate,UIImagePickerControllerDelegate,CLLocationManagerDelegate,SKProductsRequestDelegate,SKPaymentTransactionObserver,ZKClipboardViewDelegate,UIDocumentPickerDelegate>
  15. {
  16. NSInteger pushIndex;//第几个模块过来的
  17. BOOL isLoadRedDot;
  18. CGPoint startTouch;
  19. BOOL _isMoving;
  20. BOOL isExistNoNewWork;
  21. }
  22. @property (nonatomic, strong) UIProgressView *progressView;
  23. @property (nonatomic, strong) WKWebView *webView;
  24. @property(nonatomic,strong)CLLocationManager *locaationManager;
  25. @property(nonatomic,strong)NSString *placeAdr;
  26. @property(nonatomic,strong)NSString *placeLli;
  27. @property(nonatomic,assign)BOOL isLocation;
  28. @property(nonatomic, strong)NoNetView *noNetView;
  29. @property(nonatomic, strong)NoNetView *failNetView;
  30. @property(nonatomic, strong)UIPanGestureRecognizer *recognizer;
  31. @property(nonatomic, strong)ZKClipboardView *clipboardView;
  32. @property(nonatomic, strong)ZKFaceVerifyMsgView *verifyMsgView;
  33. //进度条是否加载中
  34. @property(nonatomic, assign)BOOL isRuningLoad;
  35. @end
  36. NSString *const new_kInitVector_1 = @"1389461544135476";
  37. size_t const new_kKeySize_1 = kCCKeySizeAES128;
  38. NSString *const new_AesKey_1 = @"mGlAgnIBB8bx2nch";
  39. @implementation JYNewSearchViewController
  40. -(void)viewWillAppear:(BOOL)animated
  41. {
  42. [super viewWillAppear:animated];
  43. [self.navigationController setNavigationBarHidden:YES animated:animated];
  44. if ([GlobalData shareInstance].isClickNotiStatus) {
  45. [GlobalData shareInstance].searchIsRed = NO;
  46. [GlobalData shareInstance].isClickNotiStatus = NO;
  47. }else {
  48. if([GlobalData shareInstance].searchIsRed) {
  49. [GlobalData shareInstance].searchIsRed = NO;
  50. [self webViewFirstRequest];
  51. }
  52. }
  53. }
  54. //弹框
  55. -(ZKFaceVerifyMsgView *)verifyMsgView
  56. {
  57. if(!_verifyMsgView) {
  58. _verifyMsgView = [[ZKFaceVerifyMsgView alloc]initWithFrame:CGRectMake(0, 0, WIDTH*0.8, 150)];
  59. _verifyMsgView.titleName = @"温馨提示";
  60. }
  61. return _verifyMsgView;
  62. }
  63. //弹框
  64. -(ZKClipboardView *)clipboardView{
  65. if(!_clipboardView) {
  66. _clipboardView = [[ZKClipboardView alloc]initWithFrame:CGRectMake(0, 0, WIDTH*0.8, 180+90)];
  67. _clipboardView.delegate = self;
  68. }
  69. return _clipboardView;
  70. }
  71. //进 条
  72. - (UIProgressView *)progressView
  73. {
  74. if (_progressView == nil) {
  75. _progressView = [[UIProgressView alloc] initWithFrame:CGRectMake(0,STATUS_BAR_HEIGHT - 2,WIDTH,2)];
  76. _progressView.tintColor = [UIColor blueColor];
  77. _progressView.trackTintColor = [UIColor whiteColor];
  78. }
  79. return _progressView;
  80. }
  81. //懒加载
  82. - (WKWebView *)webView
  83. {
  84. if(_webView == nil) {
  85. WKWebViewConfiguration *config = [[WKWebViewConfiguration alloc] init];
  86. config.preferences = [[WKPreferences alloc] init];
  87. config.preferences.minimumFontSize = 0;
  88. config.allowsInlineMediaPlayback = YES;
  89. config.preferences.javaScriptEnabled = YES;
  90. config.preferences.javaScriptCanOpenWindowsAutomatically = YES;
  91. //添加消息处理,注意:self指代的是需要遵守WKScriptMessageHandler协议,结束时需要移除
  92. config.userContentController = [[WKUserContentController alloc] init];
  93. //声明协议
  94. NSArray *jsArr = @[@"loginByWeixin",
  95. @"share",
  96. @"saveUserToken",
  97. @"removeUserToken",
  98. @"openSystemNotification",
  99. @"openExternalLink",
  100. @"alert",
  101. @"hiddenBottom",
  102. @"checkLab",
  103. @"loginSuccess",
  104. @"backUrl",
  105. @"clearPushMessage",
  106. @"hideRedSpotOnMenu",
  107. @"showRedSpotOnMenu",
  108. @"wxPay",
  109. @"aliPay",
  110. @"chooseTab",
  111. @"skipCameraWithParam",
  112. @"skipAlbumWithParam",
  113. @"openActivityPage",
  114. @"callPhone",
  115. @"openOtherAppLinks",
  116. @"inPurchasingVip",
  117. @"wirteRight",
  118. @"clearRight",
  119. @"savePic",
  120. @"ocrVerifyService",
  121. @"faceVerifyService",
  122. @"skipAppointTab",
  123. @"refreshAppointTab",
  124. @"sendMsgCount",
  125. @"downLoadFile"
  126. ];
  127. for (NSString*jsName in jsArr) {
  128. [config.userContentController addScriptMessageHandler:self name:jsName];
  129. }
  130. //高端的自定义配置创建WKWebView
  131. if (iPhoneX) {
  132. _webView = [[WKWebView alloc] initWithFrame:CGRectMake(0, 0, WIDTH, HEIGHT-TAB_BAR_HEIGHT) configuration:config];
  133. if (@available(iOS 11.0, *)) {
  134. _webView.scrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
  135. }
  136. }else {
  137. _webView = [[WKWebView alloc] initWithFrame:CGRectMake(0, -STATUS_BAR_HEIGHT, WIDTH, HEIGHT-TAB_BAR_HEIGHT+STATUS_BAR_HEIGHT) configuration:config];
  138. }
  139. _webView.scrollView.bounces = NO;
  140. _webView.UIDelegate = self;
  141. _webView.navigationDelegate = self;
  142. _webView.userInteractionEnabled = YES;
  143. [_webView addObserver:self forKeyPath:@"estimatedProgress" options:NSKeyValueObservingOptionNew context:nil];
  144. }
  145. return _webView;
  146. }
  147. -(void)webViewFirstRequest
  148. {
  149. //去时间戳-拼接
  150. NSString *tmpUrl = @"";
  151. if ([LXUserDefaults isExistToken]) {
  152. NSString *token = [LXUserDefaults token];
  153. tmpUrl = [[NSString stringWithFormat:@"%@%@", kHost, @"jyapp/free/login"] stringByAppendingString:[NSString stringWithFormat:@"?sign=%@&url=/jyapp/jylab/mainSearch&from=restart", token]];
  154. }else {
  155. tmpUrl = [[NSString stringWithFormat:@"%@%@", kHost, @"jyapp/free/index"] stringByAppendingString:[NSString stringWithFormat:@"?deviceid=%@", [LXUserDefaults getDeviceID]]];
  156. }
  157. NSLog(@"111 :第一次加载:%@",tmpUrl);
  158. tmpUrl = [tmpUrl stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
  159. kMainQueue(^{
  160. [self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:tmpUrl]]];
  161. })
  162. }
  163. #pragma mark - event response
  164. // 计算wkWebView进度条
  165. - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
  166. // NSLog(@"进度条加载中...");
  167. if (!self.isRuningLoad) {
  168. self.isRuningLoad = YES;
  169. }
  170. if (object == self.webView && [keyPath isEqualToString:@"estimatedProgress"]) {
  171. CGFloat newprogress = [[change objectForKey:NSKeyValueChangeNewKey] doubleValue];
  172. self.progressView.alpha = 1.0f;
  173. [self.progressView setProgress:newprogress animated:YES];
  174. if (newprogress >= 1.0f) {
  175. NSLog(@"进度条加载完毕...");
  176. self.isRuningLoad = NO;
  177. self.recognizer.enabled = YES;
  178. [UIView animateWithDuration:0.3f
  179. delay:0.3f
  180. options:UIViewAnimationOptionCurveEaseOut
  181. animations:^{
  182. self.progressView.alpha = 0.0f;
  183. }
  184. completion:^(BOOL finished) {
  185. [self.progressView setProgress:0 animated:NO];
  186. }];
  187. }
  188. } else {
  189. [super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
  190. }
  191. }
  192. -(void)initNotification {
  193. //加载通知
  194. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(openPushUrlOtherMethods:) name:OpenPushUrlOtherMethods object:nil];
  195. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(openPushLinkUrlMethods:) name:OpenPushLinkUrlMethods object:nil];
  196. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(openPushUrlMethodsOne:) name:OpenPushUrlMethodsOne object:nil];
  197. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(jyReceiveNewsRedPoint:) name:JYReceiveNewsRedPoint object:nil];
  198. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(jyRefreshMenusView:) name:JYRefreshMenusView object:nil];
  199. //支付状态通知
  200. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(alipayWXpayStatus:) name:AlipayWXpayStatus object:nil];
  201. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(notNetReloadWebVIew:) name:NotNetReloadWebVIew object:nil];
  202. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(popWebView:) name:PopWebView object:nil];
  203. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(loginOut:) name:kLoginOut object:nil];
  204. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(netReachChanged:) name:AFNetworkingReachabilityDidChangeNotification object:nil];
  205. //前往登录通知-tabbar
  206. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(isLoginTabBar:) name:LoginIndexTabBar object:nil];
  207. //展示底部红的通知
  208. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(jyReceiveNewsRedPoint:) name:JYReceiveNewsRedPoint object:nil];
  209. //接收全新通知
  210. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(refreshNonCurVC:) name:RefreshNonCurVC object:nil];
  211. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(refreshAllVC:) name:RefreshAllVC object:nil];
  212. //粘贴板-
  213. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateClipboard:) name:UpdateClipboard object:nil];
  214. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(openTheClipboard:) name:OpenTheClipboard object:nil];
  215. }
  216. #pragma mark – Gesture Recognizer –
  217. -(void)paningGestureReceive:(UIPanGestureRecognizer *)recoginzer
  218. {
  219. NSString *current_url = [self stringByEvaluatingJavaScriptFromString:@"document.location.href"];
  220. NSLog(@"%@",current_url);
  221. CGRect rect = self.view.bounds;
  222. CGFloat width = CGRectGetWidth(rect);
  223. if (![self.webView canGoBack] || ([current_url containsString:@"jyapp/free/login"])) {
  224. NSLog(@"不可返回");
  225. return;
  226. }
  227. if([current_url isEqualToString:[NSString stringWithFormat:@"%@jyapp/free/me",kHost]]||[current_url isEqualToString:[NSString stringWithFormat:@"%@jyapp/jylab/index",kHost]]||[current_url isEqualToString:[NSString stringWithFormat:@"%@jyapp/swordfish/historypush",kHost]]||[current_url isEqualToString:[NSString stringWithFormat:@"%@jyapp/jylab/mainSearch",kHost]]||[current_url isEqualToString:[NSString stringWithFormat:@"%@jyapp/frontPage/messageCenter/sess/index",kHost]]){
  228. return;
  229. }
  230. CGPoint touchPoint = [recoginzer locationInView:[UIApplication sharedApplication].keyWindow];
  231. if (recoginzer.state==UIGestureRecognizerStateBegan) {
  232. _isMoving = YES;
  233. startTouch = touchPoint;
  234. } else if (recoginzer.state==UIGestureRecognizerStateEnded||(recoginzer.state==UIGestureRecognizerStatePossible)){
  235. if (touchPoint.x - startTouch.x > width*0.125) {
  236. [UIView animateWithDuration:0.3 animations:^{
  237. if (recoginzer.state==UIGestureRecognizerStateEnded) {
  238. [self moveViewWithX:width];
  239. if ([current_url containsString:@"jyapp/jylab/mainSearch#"]) {
  240. [self isExitCallToJS:@"afterClickBack()" withMethodName:@"afterClickBack"];
  241. }
  242. [self.webView goBack];
  243. }
  244. } completion:^(BOOL finished) {
  245. _isMoving = NO;
  246. [self moveViewWithX:0];
  247. }];
  248. } else {
  249. [UIView animateWithDuration:0.3 animations:^{
  250. [self moveViewWithX:0];
  251. } completion:^(BOOL finished) {
  252. _isMoving = NO;
  253. }];
  254. }
  255. return;
  256. } else if (recoginzer.state==UIGestureRecognizerStateCancelled){
  257. [UIView animateWithDuration:0.3 animations:^{
  258. [self moveViewWithX:0];
  259. } completion:^(BOOL finished) {
  260. _isMoving = NO;
  261. }];
  262. return;
  263. }else {
  264. }
  265. if (_isMoving) {
  266. [self moveViewWithX:touchPoint.x - startTouch.x];
  267. }
  268. }
  269. -(void)moveViewWithX:(float)x
  270. {
  271. CGRect rect = self.view.bounds;
  272. CGFloat width = CGRectGetWidth(rect);
  273. x = x>width?width:x;
  274. x = x<0?0:x;
  275. CGRect frame = self.webView.frame;
  276. frame.origin.x = x;
  277. self.webView.frame = frame;
  278. }
  279. - (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message{
  280. // message.body -- Allowed types are NSNumber, NSString, NSDate, NSArray,NSDictionary, and NSNull.
  281. NSLog(@"原生收到了js发送过来的消息message.name = %@ message.body = %@",message.name,message.body);
  282. if ([message.name isEqualToString:@"loginByWeixin"]) {
  283. [self jsLoginByWeixin:message.body];
  284. }else if ([message.name isEqualToString:@"share"]) {
  285. [self jsShare:message.body];
  286. }else if ([message.name isEqualToString:@"saveUserToken"]) {
  287. [self jsSaveUserToken:message.body];
  288. }else if ([message.name isEqualToString:@"removeUserToken"]) {
  289. [self jsRemoveUserToken:message.body];
  290. }else if ([message.name isEqualToString:@"openSystemNotification"]) {
  291. [self jsOpenSystemNotification:message.body];
  292. }else if ([message.name isEqualToString:@"openExternalLink"]) {
  293. [self JsOpenExternalLink:message.body];
  294. }else if ([message.name isEqualToString:@"alert"]) {
  295. [self jsAlert:message.body];
  296. }else if ([message.name isEqualToString:@"hiddenBottom"]) {
  297. [self jsHiddenBottom:message.body];
  298. }else if ([message.name isEqualToString:@"checkLab"]) {
  299. [self jsCheckLab:message.body];
  300. }else if ([message.name isEqualToString:@"loginSuccess"]) {
  301. [self jsLoginSuccess:message.body];
  302. }else if ([message.name isEqualToString:@"backUrl"]) {
  303. [self jsBackUrl:message.body];
  304. }else if ([message.name isEqualToString:@"clearPushMessage"]) {
  305. [self jsClearPushMessage:message.body];
  306. }else if ([message.name isEqualToString:@"hideRedSpotOnMenu"]) {
  307. [self jsHideRedSpotOnMenu:message.body];
  308. }else if ([message.name isEqualToString:@"showRedSpotOnMenu"]) {
  309. [self jsShowRedSpotOnMenu:message.body];
  310. }else if ([message.name isEqualToString:@"wxPay"]) {
  311. [self jsWxPay:message.body];
  312. }else if ([message.name isEqualToString:@"aliPay"]) {
  313. [self jsAliPay:message.body];
  314. }else if ([message.name isEqualToString:@"chooseTab"]) {
  315. [self jsChooseTab:message.body];
  316. }else if ([message.name isEqualToString:@"skipCameraWithParam"]) {
  317. [self jsSkipCameraWithParam:message.body];
  318. }else if ([message.name isEqualToString:@"skipAlbumWithParam"]) {
  319. [self jsSkipAlbumWithParam:message.body];
  320. }else if ([message.name isEqualToString:@"openActivityPage"]) {
  321. [self jsOpenActivityPage:message.body];
  322. }else if ([message.name isEqualToString:@"callPhone"]) {
  323. [self jsCallPhone:message.body];
  324. }else if ([message.name isEqualToString:@"openOtherAppLinks"]) {
  325. [self jsOpenOtherAppLinks:message.body];
  326. }else if ([message.name isEqualToString:@"inPurchasingVip"]) {
  327. [self jsInPurchasingVip:message.body];
  328. }else if ([message.name isEqualToString:@"wirteRight"]) {
  329. [self jsWirteRight:message.body];
  330. }else if ([message.name isEqualToString:@"clearRight"]) {
  331. [self jsClearRight:message.body];
  332. }else if ([message.name isEqualToString:@"savePic"]) {
  333. [self jsSavePic:message.body];
  334. }else if ([message.name isEqualToString:@"skipAppointTab"]) {
  335. [self jsSkipAppointTab:message.body];
  336. }else if ([message.name isEqualToString:@"refreshAppointTab"]) {
  337. [self jsRefreshAppointTab:message.body];
  338. }else if ([message.name isEqualToString:@"sendMsgCount"]) {
  339. [self jsSendMsgCount:message.body];
  340. }else if ([message.name isEqualToString:@"downLoadFile"]) {
  341. [self jsDownLoadFile:message.body];
  342. }else {
  343. }
  344. }
  345. #pragma mark - WKUIDelegate
  346. - (void)webView:(WKWebView *)webView runJavaScriptTextInputPanelWithPrompt:(NSString *)prompt defaultText:(nullable NSString *)defaultText initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(NSString * _Nullable result))completionHandler
  347. {
  348. NSError *err = nil;
  349. NSData *dataFromString = [prompt dataUsingEncoding:NSUTF8StringEncoding];
  350. NSDictionary *paramdict = [NSJSONSerialization JSONObjectWithData:dataFromString options:NSJSONReadingMutableContainers error:&err];
  351. // NSLog(@"拦截prompt:%@",paramdict);
  352. if (!err){
  353. NSString *type = [paramdict objectForKey:@"jsName"];
  354. if (type && [type isEqualToString:@"getUserToken"]) {
  355. NSDictionary *dict = @{@"type":@"string",
  356. @"value":[self jsGetUserToken:paramdict]};
  357. completionHandler([self convertToJsonData:dict]);
  358. }else if (type && [type isEqualToString:@"getVersion"]) {
  359. NSDictionary *dict = @{@"type":@"string",
  360. @"value":[self jsGetVersion:paramdict]};
  361. completionHandler([self convertToJsonData:dict]);
  362. }else if (type && [type isEqualToString:@"checkNoticePermission"]) {
  363. NSDictionary *dict = @{@"type":@"int",
  364. @"value":[NSString stringWithFormat:@"%d",[self jsCheckNoticePermission:paramdict]]};
  365. completionHandler([self convertToJsonData:dict]);
  366. }else if (type && [type isEqualToString:@"getPushRid"]) {
  367. NSDictionary *dict = @{@"type":@"string",@"value":[self jsGetPushRid:paramdict]};
  368. completionHandler([self convertToJsonData:dict]);
  369. }else if (type && [type isEqualToString:@"isInstallWeixin"]) {
  370. NSDictionary *dict = @{@"type":@"int",
  371. @"value":[NSString stringWithFormat:@"%d",[self jsIsInstallWeixin:paramdict]]};
  372. completionHandler([self convertToJsonData:dict]);
  373. }else if (type && [type isEqualToString:@"getCipherText"]) {
  374. NSDictionary *dict = @{@"type":@"string",
  375. @"value":[self jsGetCipherText:paramdict]};
  376. completionHandler([self convertToJsonData:dict]);
  377. }
  378. else if (type && [type isEqualToString:@"getOtherPushRid"]) {
  379. NSDictionary *dict = @{@"type":@"string",@"value":[self jsGetOtherPushRid:paramdict]};
  380. completionHandler([self convertToJsonData:dict]);
  381. }else if (type && [type isEqualToString:@"getPhoneBrand"]) {
  382. NSDictionary *dict = @{@"type":@"string",
  383. @"value":[self jsGetPhoneBrand:paramdict]};
  384. completionHandler([self convertToJsonData:dict]);
  385. }else if (type && [type isEqualToString:@"getLocation"]) {
  386. NSDictionary *dict = @{@"type":@"string",
  387. @"value":[self jsGetLocation:paramdict]};
  388. completionHandler([self convertToJsonData:dict]);
  389. }else if (type && [type isEqualToString:@"getLLitude"]) {
  390. NSDictionary *dict = @{@"type":@"string",
  391. @"value":[self jsGetLLitude:paramdict]};
  392. completionHandler([self convertToJsonData:dict]);
  393. }else if (type && [type isEqualToString:@"readRight"]) {
  394. NSDictionary *dict = @{@"type":@"string",
  395. @"value":[self jsReadRight:paramdict]};
  396. completionHandler([self convertToJsonData:dict]);
  397. }else if (type && [type isEqualToString:@"checkLocationPermission"]) {
  398. NSDictionary *dict = @{@"type":@"int",
  399. @"value":[NSString stringWithFormat:@"%d",[self jsCheckLocationPermission:paramdict]]
  400. };
  401. completionHandler([self convertToJsonData:dict]);
  402. }else {
  403. completionHandler(@"");
  404. }
  405. }
  406. }
  407. // 在发送请求之前,决定是否跳转
  408. - (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler {
  409. //如果当前页面是三级页面-
  410. NSString *curUrl = [webView.URL absoluteString];
  411. if ([curUrl containsString:@"jyapp/article/content"]) {
  412. //当前页面是三级页面--判断待跳转页面是否符合内置跳转
  413. NSString *nextUrl = [navigationAction.request.URL absoluteString];
  414. if ([nextUrl containsString:@"jianyu360.com"]||[nextUrl containsString:@"jianyu360.cn"]||[nextUrl containsString:@"qmx.top"]) {
  415. // 允许跳转
  416. decisionHandler(WKNavigationActionPolicyAllow);
  417. }else {
  418. NSLog(@"不允许内部跳转:-%@",nextUrl);
  419. //筛选拦截-压缩包等格式不允许跳转
  420. if ([nextUrl hasSuffix:@".rar"]||[nextUrl hasSuffix:@".zip"]||[nextUrl hasSuffix:@".7z"]||[nextUrl hasSuffix:@".CAB"]||[nextUrl hasSuffix:@".ARJ"]||[nextUrl hasSuffix:@".LZH"]||[nextUrl hasSuffix:@".TAR"]||[nextUrl hasSuffix:@".GZ"]||[nextUrl hasSuffix:@".ACE"]||[nextUrl hasSuffix:@".UUE"]||[nextUrl hasSuffix:@".BZ2"]||[nextUrl hasSuffix:@".JAR"]||[nextUrl hasSuffix:@".ISO"]) {
  421. // 不允许跳转
  422. decisionHandler(WKNavigationActionPolicyCancel);
  423. }else {
  424. JYWKNewWebController *ctr = [[JYWKNewWebController alloc] init];
  425. ctr.url = nextUrl;
  426. ctr.titleShow = @"公告信息";
  427. kMainQueue(^{
  428. [self presentViewController:ctr animated:YES completion:nil];
  429. });
  430. // 不允许跳转-并跳转新页面
  431. decisionHandler(WKNavigationActionPolicyCancel);
  432. }
  433. }
  434. }else if ([curUrl containsString:@"apps.apple.com"]&&[curUrl containsString:@"1354897149"]){
  435. [[UIApplication sharedApplication] openURL:[NSURL URLWithString: curUrl]];
  436. decisionHandler(WKNavigationActionPolicyCancel);
  437. }else {
  438. // 允许跳转
  439. decisionHandler(WKNavigationActionPolicyAllow);
  440. }
  441. }
  442. #pragma mark ****WKUIDelegate
  443. //通过js alert 显示一个警告面板,调用原生会走此方法。
  444. - (void)webView:(WKWebView *)webView runJavaScriptAlertPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(void))completionHandler
  445. {
  446. // NSLog(@"显示一个JavaScript警告面板, message = %@",message);
  447. UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"温馨提示" message:message preferredStyle:UIAlertControllerStyleAlert];
  448. [alertController addAction:[UIAlertAction actionWithTitle:@"确认" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
  449. completionHandler();
  450. }]];
  451. [self presentViewController:alertController animated:YES completion:nil];
  452. }
  453. //通过 js confirm 显示一个确认面板,调用原生会走此方法。
  454. - (void)webView:(WKWebView *)webView runJavaScriptConfirmPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(BOOL result))completionHandler
  455. {
  456. // NSLog(@"运行JavaScript确认面板, message = %@", message);
  457. UIAlertController *action = [UIAlertController alertControllerWithTitle:@"温馨提示" message:message preferredStyle:UIAlertControllerStyleAlert];
  458. [action addAction:[UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
  459. completionHandler(NO);
  460. }] ];
  461. [action addAction:[UIAlertAction actionWithTitle:@"确认" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
  462. completionHandler(YES);
  463. }]];
  464. [self presentViewController:action animated:YES completion:nil];
  465. }
  466. #pragma mark - OC调JS交互
  467. -(void)isExitCallToJS:(NSString *)jsStr withMethodName:(NSString *)name{
  468. NSString *jsName = [NSString stringWithFormat:@"function exist(){return !window['%@']};exist()",name];
  469. dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.15 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
  470. WeakSelf;
  471. [_webView evaluateJavaScript:jsName completionHandler:^(id _Nullable result, NSError * _Nullable error) {
  472. // NSLog(@"是否存在 result:%@,error:%@",result,error);
  473. if ([result intValue]==0) {
  474. [weakSelf executeCallJS:jsStr];
  475. }else {
  476. NSLog(@"不存在-不存在-不存在-%@",jsStr);
  477. }
  478. }];
  479. });
  480. }
  481. -(void)executeCallJS:(NSString *)jsStr {
  482. dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.15 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
  483. [_webView evaluateJavaScript:jsStr completionHandler:^(id _Nullable result, NSError * _Nullable error) {
  484. if (error!=nil) {
  485. }
  486. }];
  487. });
  488. }
  489. - (void)viewDidLoad {
  490. [super viewDidLoad];
  491. // Do any additional setup after loading the view.
  492. NSLog(@"首页初始化");
  493. self.placeAdr = [NSString new];
  494. self.placeLli = [NSString new];
  495. self.view.backgroundColor = [UIColor whiteColor];
  496. [self.view addSubview:self.webView];
  497. [self.view addSubview:self.progressView];
  498. [self webViewFirstRequest];
  499. [[AFNetworkReachabilityManager sharedManager] startMonitoring];
  500. [self initNotification];
  501. self.recognizer = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(paningGestureReceive:)];
  502. [self.recognizer delaysTouchesBegan];
  503. [self.view addGestureRecognizer:self.recognizer];
  504. //定时器-检测错误数据是否超过10个 发送
  505. // [NSTimer scheduledTimerWithTimeInterval:180 target:self selector:@selector(errorLogListening) userInfo:nil repeats:YES];
  506. //监听底部栏
  507. [NSTimer scheduledTimerWithTimeInterval:3 target:self selector:@selector(bottomOneListening) userInfo:nil repeats:YES];
  508. //监听购买结果
  509. [[SKPaymentQueue defaultQueue] addTransactionObserver:self];
  510. UIButton *testBtn = [ZKControl createButtonWithFrame:CGRectMake(100, 50, 100, 100) title:@"模拟按钮" imageName:@"" bgImageName:@"" target:self method:@selector(testBtnClick)];
  511. [self.webView addSubview:testBtn];
  512. }
  513. -(void)testBtnClick {
  514. LoadDocViewController *load = [[LoadDocViewController alloc] init];
  515. //构建数据
  516. JhtFileModel *fileModel = [[JhtFileModel alloc] init];
  517. fileModel.fileName = @"aaabbb";
  518. fileModel.fileName = [fileModel.fileName stringByRemovingPercentEncoding];
  519. fileModel.fileName=[fileModel.fileName stringByReplacingOccurrencesOfString:@"/" withString:@""];
  520. fileModel.viewFileType = Type_Unknow;
  521. fileModel.url = @"https://jy-datafile.oss-cn-beijing.aliyuncs.com/be2344c786e054e93b6cf476f99d4f287dbd3670e4d7f51995af4ce4b5c69928.doc";
  522. fileModel.fileSize = @"";
  523. load.titleStr = fileModel.fileName;
  524. load.currentFileModel = fileModel;
  525. kMainQueue(^{
  526. [self presentViewController:load animated:YES completion:nil];
  527. });
  528. }
  529. -(void)bottomOneListening {
  530. if(self.tabBarController.selectedIndex == 0) {
  531. [self judgeIsHiddenBottom];
  532. }
  533. }
  534. - (BOOL)isTheCurrentPeriod{
  535. NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
  536. NSDate *now = [NSDate date];
  537. NSDateComponents *comps = [[NSDateComponents alloc] init];
  538. NSInteger unitFlags = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitWeekday |NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond;
  539. comps = [calendar components:unitFlags fromDate:now];
  540. long hour = (long)[comps hour];
  541. if (hour>=12&&hour<14) {
  542. return YES;
  543. }
  544. if (hour>=17&&hour<=23) {
  545. return YES;
  546. }
  547. if (hour>=0&&hour<7) {
  548. return YES;
  549. }
  550. return NO;
  551. }
  552. - (NSString *)toJsonStrWithArray:(NSArray *)arr {
  553. if ([arr isKindOfClass:[NSString class]]) {
  554. return (NSString *)arr;
  555. }
  556. NSError *parseError = nil;
  557. NSData *data = [NSJSONSerialization dataWithJSONObject:arr options:NSJSONWritingPrettyPrinted error:nil];
  558. NSString *jsonStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
  559. jsonStr = [jsonStr stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
  560. jsonStr = [jsonStr stringByReplacingOccurrencesOfString:@" " withString:@""];
  561. jsonStr = [jsonStr stringByReplacingOccurrencesOfString:@"\n" withString:@""];
  562. if (parseError) {
  563. jsonStr = @"";
  564. }
  565. return jsonStr;
  566. }
  567. -(void)errorLogListening {
  568. if ([self isTheCurrentPeriod]) {
  569. if ([[GlobalData shareInstance] getPlistCount]>=50) {
  570. NSMutableDictionary *dict =[[GlobalData shareInstance] getPlistAllData];
  571. [[LXNetworkManager shareLXNetworkManager]postWithURLStr:[NSString stringWithFormat:@"%@jyapp/errLogs/Receive",kHost] parameters:@{@"jsonData":[self toJsonStrWithArray:dict[@"jsonData"]]} progress:^(NSProgress *progress) {
  572. NSLog(@"%@",progress);
  573. } success:^(id responseObject) {
  574. NSLog(@"responseObject=%@",responseObject);
  575. [[GlobalData shareInstance] clearPlistData];
  576. } failure:^(NSError *error) {
  577. NSLog(@"error=%@",error);
  578. }];
  579. }
  580. }else {
  581. }
  582. }
  583. -(void)haveRedPoint
  584. {
  585. NSLog(@"http请求-------小红点");
  586. NSString *token = [LXUserDefaults token];
  587. if ([LXUserDefaults isExistToken]) {
  588. [[LXNetworkManager shareLXNetworkManager]postWithURLStr:[NSString stringWithFormat:@"%@jyapp/free/showRedSpotOnMenu",kHost] parameters:@{@"token":token} progress:^(NSProgress *progress) {
  589. // NSLog(@"%@",progress);
  590. } success:^(id responseObject) {
  591. // NSLog(@"responseObject=%@",responseObject);
  592. if([responseObject[@"subscribe"] integerValue]>=1) {
  593. //显示
  594. [GlobalData shareInstance].subIsRed = YES;
  595. kMainQueue(^{
  596. [self.tabBarController.tabBar showBadgeOnItemIndex:1];
  597. });
  598. }else {
  599. [GlobalData shareInstance].subIsRed = NO;
  600. kMainQueue(^{
  601. [self.tabBarController.tabBar hideBadgeOnItemIndex:1];
  602. });
  603. }
  604. if([responseObject[@"my"] integerValue]>=1) {
  605. //显示
  606. [GlobalData shareInstance].mineIsRed = YES;
  607. kMainQueue(^{
  608. [self.tabBarController.tabBar showBadgeOnItemIndex:4];
  609. });
  610. }else {
  611. [GlobalData shareInstance].mineIsRed = NO;
  612. kMainQueue(^{
  613. [self.tabBarController.tabBar hideBadgeOnItemIndex:4];
  614. });
  615. }
  616. } failure:^(NSError *error) {
  617. NSLog(@"error=%@",error);
  618. }];
  619. }
  620. }
  621. #pragma mark - WKNavigationDelegate
  622. /* 页面加载完成 */
  623. - (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation{
  624. NSLog(@"-----页面加载完成%@",webView.URL.absoluteString);
  625. if (![GlobalData shareInstance].isSearchToLoad) {
  626. [GlobalData shareInstance].isSearchToLoad = YES;
  627. }
  628. //第一次加载小红点
  629. if(!isLoadRedDot) {
  630. isLoadRedDot = true;
  631. [self haveRedPoint];
  632. }
  633. [self.webView evaluateJavaScript:@"document.documentElement.style.webkitTouchCallout='none';" completionHandler:nil];
  634. [self.webView evaluateJavaScript:@"document.documentElement.style.webkitUserSelect='none';"completionHandler:nil];
  635. [self judgeIsHiddenBottom];//是否隐藏
  636. [self removeNoNetViews];
  637. [self removeFailNetViews];
  638. [[LXViewControllerManager shareViewControllerManager] hideHud];
  639. //写数据
  640. // [self writeWKWebData:webView.URL];
  641. if (![GlobalData shareInstance].isOpen) {//第一次打开
  642. [GlobalData shareInstance].isOpen = YES;
  643. [self performSelector:@selector(pasteboard) withObject:nil afterDelay:1.5];
  644. }
  645. }
  646. -(void)pasteboard {
  647. NSString *content = [UIPasteboard generalPasteboard].string;
  648. if ([content containsString:@"剑鱼标讯"]) {//第一次打开页面时候
  649. [[NSNotificationCenter defaultCenter] postNotificationName:UpdateClipboard object:nil userInfo:@{@"content":content}];
  650. }
  651. }
  652. -(void)writeWKWebData:(NSURL *)url {
  653. //得到NSData 数据
  654. NSData *dataContent = [NSData dataWithContentsOfURL:url];
  655. //NSURLCache 实例化
  656. NSURLCache *cache = [NSURLCache sharedURLCache];
  657. //得到相应
  658. NSURLResponse *response = [[NSURLResponse alloc]initWithURL:url MIMEType:nil expectedContentLength:0 textEncodingName:@"UTF-8"];
  659. //得到CacheURLResponse
  660. NSCachedURLResponse *cacheResponse = [[NSCachedURLResponse alloc]initWithResponse:response data:dataContent];
  661. //进行存储
  662. [cache storeCachedResponse:cacheResponse forRequest:[NSURLRequest requestWithURL:url]];
  663. }
  664. // 页面开始加载时调用
  665. - (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation{
  666. self.recognizer.enabled = NO;
  667. }
  668. // 当内容开始返回时调用
  669. - (void)webView:(WKWebView *)webView didCommitNavigation:(WKNavigation *)navigation{
  670. }
  671. // 页面加载失败时调用
  672. - (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(WKNavigation *)navigation withError:(nonnull NSError *)error{
  673. //加载失败 有网络-弹出页面 , 无网络-记录标记
  674. if ([ZKMethod judegeNetworkIsAvailable]) {
  675. //弹出页面
  676. NSLog(@"页面加载失败-有网络");
  677. if (!self.isRuningLoad) {
  678. [self addFailNetViews];
  679. }
  680. }else {
  681. //记录标记
  682. NSLog(@"页面加载失败-无网络");
  683. isExistNoNewWork = YES;
  684. }
  685. self.recognizer.enabled = YES;
  686. }
  687. #pragma mark *****JS与OC交互
  688. #pragma mark - WKScriptMessageHandler JS调OC交互
  689. -(void)jsLoginByWeixin:(NSDictionary *)dict {
  690. if ([LXUserDefaults isInstallWeiXin] != 1) { // 没有安装微信 不走友盟
  691. [[LXViewControllerManager shareViewControllerManager] showHudOnlyText:@"微信登录失败,没有安装微信" delay:1.5];
  692. return;
  693. }
  694. [[UMSocialManager defaultManager] getUserInfoWithPlatform:UMSocialPlatformType_WechatSession currentViewController:self completion:^(id result, NSError *error) {
  695. UMSocialUserInfoResponse *resp = result;
  696. [self dealWXDic:(NSDictionary *)resp.originalResponse];
  697. }];
  698. }
  699. // 处理微信登录获取到的数据
  700. -(void)dealWXDic:(NSDictionary *)dictionary{
  701. //如果获取到用户信息,即用户点击了“登录”,则进行用户信息获取
  702. if (dictionary.count > 0) {
  703. NSMutableDictionary *dic = [NSMutableDictionary dictionaryWithDictionary:dictionary];
  704. if (dic) {
  705. [dic removeObjectForKey:@"privilege"];
  706. [dic removeObjectForKey:@"language"];
  707. double currDouble = [[NSDate date] timeIntervalSince1970];
  708. [dic setObject:[NSNumber numberWithLong:(long)currDouble] forKey:@"createtime"];
  709. // 拼接标志位
  710. NSString *sign = [NSString stringWithFormat:@"city=%@&country=%@&createtime=%@&headimgurl=%@&nickname=%@&openid=%@&province=%@&sex=%@&unionid=%@", dic[@"city"], dic[@"country"], dic[@"createtime"], dic[@"headimgurl"], dic[@"nickname"], dic[@"openid"], dic[@"province"],dic[@"sex"],dic[@"unionid"]];
  711. sign = [LXMD5 md532BitLower:sign];
  712. [dic setObject:sign forKey:@"sign"];
  713. NSString *endStr = [[LXViewControllerManager shareViewControllerManager] getJsonStr:dic];
  714. NSData *data = [endStr dataUsingEncoding:NSUTF8StringEncoding];
  715. endStr = [data base64EncodedStringWithOptions:0];
  716. [self isExitCallToJS:[NSString stringWithFormat:@"loginByWeixinCallBack('%@')", endStr] withMethodName:@"loginByWeixinCallBack"];
  717. }
  718. }
  719. }
  720. -(void)jsShare:(NSDictionary *)dict {
  721. NSString *type = [NSString stringWithFormat:@"%@",dict[@"type"]];
  722. NSString *title = [NSString stringWithFormat:@"%@",dict[@"title"]];
  723. NSString *content = [NSString stringWithFormat:@"%@",dict[@"content"]];
  724. NSString *link = [NSString stringWithFormat:@"%@",dict[@"link"]];
  725. UMSocialPlatformType shareType;
  726. if ([type intValue] == 1) { // 微信好友
  727. shareType = UMSocialPlatformType_WechatSession;
  728. }else if ([type intValue] == 2){ /// qq好友
  729. shareType = UMSocialPlatformType_QQ;
  730. }else if ([type intValue] == 3){ // 朋友圈
  731. shareType = UMSocialPlatformType_WechatTimeLine;
  732. }else{
  733. shareType = UMSocialPlatformType_WechatSession;
  734. }
  735. if ([type intValue] == 1 || [type intValue] == 3) {
  736. if ([LXUserDefaults isInstallWeiXin] != 1) {
  737. [[LXViewControllerManager shareViewControllerManager] showHudOnlyText:@"没有安装微信" delay:1.5];
  738. return;
  739. }
  740. }
  741. if ([type intValue] == 2) {
  742. if (![[UMSocialManager defaultManager] isInstall:UMSocialPlatformType_QQ]) {
  743. [[LXViewControllerManager shareViewControllerManager] showHudOnlyText:@"没有安装QQ" delay:1.5];
  744. return;
  745. }
  746. }
  747. //创建分享消息对象
  748. UMSocialMessageObject *messageObject = [UMSocialMessageObject messageObject];
  749. //创建网页内容对象
  750. UMShareWebpageObject *shareObject = [UMShareWebpageObject shareObjectWithTitle:title descr:content thumImage:[UIImage imageNamed:@"logo"]];
  751. //设置网页地址
  752. shareObject.webpageUrl = link;
  753. messageObject.shareObject = shareObject;
  754. //调用分享接口
  755. [[UMSocialManager defaultManager] shareToPlatform:shareType messageObject:messageObject currentViewController:self completion:^(id data, NSError *error) {
  756. if (error) {
  757. if (error.userInfo[@"message"] && [error.userInfo[@"message"] containsString:@"Operation is cancel"]) {
  758. [[LXViewControllerManager shareViewControllerManager] showHudOnlyText:@"取消分享" delay:1];
  759. }else{
  760. [[LXViewControllerManager shareViewControllerManager] showHudOnlyText:error.userInfo[@"message"] delay:1];
  761. }
  762. [self isExitCallToJS:[NSString stringWithFormat:@"shareCallBack('%@','%@')",type,@"0"] withMethodName:@"shareCallBack"];
  763. }else{
  764. if ([data isKindOfClass:[UMSocialShareResponse class]]) {
  765. [self isExitCallToJS:[NSString stringWithFormat:@"shareCallBack('%@','%@')",type,@"1"] withMethodName:@"shareCallBack"];
  766. }else{
  767. UMSocialLogInfo(@"response data is %@",data);
  768. }
  769. }
  770. }];
  771. }
  772. -(void)jsSaveUserToken:(NSDictionary *)dict{
  773. [LXUserDefaults saveToken:[NSString stringWithFormat:@"%@",dict[@"token"]]];
  774. }
  775. -(NSString *)jsGetUserToken:(NSDictionary *)dict{
  776. return [LXUserDefaults token];
  777. }
  778. -(void)jsRemoveUserToken:(NSDictionary *)dict{
  779. [LXUserDefaults clearAll];
  780. }
  781. -(int)jsCheckNoticePermission:(NSDictionary *)dict{
  782. if ([[UIApplication sharedApplication] currentUserNotificationSettings].types != UIUserNotificationTypeNone) {
  783. return 1;
  784. }
  785. return 0;
  786. }
  787. // 跳转到系统设置
  788. -(void)jsOpenSystemNotification:(NSDictionary *)dict{
  789. [[UIApplication sharedApplication]openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
  790. }
  791. // 获取推送id
  792. -(NSString *)jsGetPushRid:(NSDictionary *)dict{
  793. return [LXUserDefaults grpcPushID];
  794. }
  795. // 打开新页面 加载新web
  796. -(void)JsOpenExternalLink:(NSDictionary *)dict{
  797. NSString *url = [NSString stringWithFormat:@"%@",dict[@"url"]];
  798. NSString *title = [NSString stringWithFormat:@"%@",dict[@"title"]];
  799. if (url) {
  800. if ([AFNetworkReachabilityManager sharedManager].networkReachabilityStatus == AFNetworkReachabilityStatusNotReachable || [AFNetworkReachabilityManager sharedManager].networkReachabilityStatus == AFNetworkReachabilityStatusUnknown) {
  801. }
  802. JYWKNewWebController *ctr = [[JYWKNewWebController alloc] init];
  803. ctr.url = url;
  804. if (!title || [title isEqualToString:@""] || [title isEqualToString:@"undefined"]) {
  805. ctr.titleShow = nil;
  806. }else{
  807. ctr.titleShow = title;
  808. }
  809. kMainQueue(^{
  810. [self presentViewController:ctr animated:YES completion:nil];
  811. });
  812. }
  813. }
  814. // 获取当前版本号
  815. -(NSString *)jsGetVersion:(NSDictionary *)dict{
  816. return [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
  817. }
  818. -(void)jsAlert:(NSDictionary *)dict{
  819. [[LXViewControllerManager shareViewControllerManager] showAlertViewWithMessage:[NSString stringWithFormat:@"%@",dict[@"content"]]];
  820. }
  821. -(int)jsIsInstallWeixin:(NSDictionary *)dict{
  822. return [LXUserDefaults isInstallWeiXin];
  823. }
  824. -(NSString *)jsGetCipherText:(NSDictionary *)dict{
  825. NSDictionary *objDict = [NSDictionary dictionaryWithDictionary:dict[@"arguments"]];
  826. NSString *phone = [NSString stringWithFormat:@"%@",objDict[@"phone"]];
  827. NSDate *date=[NSDate date];
  828. NSDateFormatter *format1=[[NSDateFormatter alloc] init];
  829. [format1 setDateFormat:@"yyyyMMddhhmmss"];
  830. NSString *dateStr;
  831. dateStr=[format1 stringFromDate:date];
  832. NSLog(@"%@",dateStr);
  833. NSString *content = [[NSString stringWithFormat:@"%@_%@",phone,dateStr] stringByAppendingString:[NSString stringWithFormat:@"_%@",[LXMD5 md532BitLower:[NSString stringWithFormat:@"%@&%@",phone,dateStr]]]];
  834. NSData *contentData = [content dataUsingEncoding:NSUTF8StringEncoding];
  835. NSUInteger dataLength = contentData.length;
  836. // 为结束符'\\0' +1
  837. char keyPtr[new_kKeySize_1 + 1];
  838. memset(keyPtr, 0, sizeof(keyPtr));
  839. [new_AesKey_1 getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];
  840. // 密文长度 <= 明文长度 + BlockSize
  841. size_t encryptSize = dataLength + kCCBlockSizeAES128;
  842. void *encryptedBytes = malloc(encryptSize);
  843. size_t actualOutSize = 0;
  844. NSData *initVector = [new_kInitVector_1 dataUsingEncoding:NSUTF8StringEncoding];
  845. CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt,
  846. kCCAlgorithmAES,
  847. kCCOptionPKCS7Padding, // 系统默认使用 CBC,然后指明使用 PKCS7Padding
  848. keyPtr,
  849. new_kKeySize_1,
  850. initVector.bytes,
  851. contentData.bytes,
  852. dataLength,
  853. encryptedBytes,
  854. encryptSize,
  855. &actualOutSize);
  856. if (cryptStatus == kCCSuccess) {
  857. // 对加密后的数据进行 base64 编码
  858. return [[NSData dataWithBytesNoCopy:encryptedBytes length:actualOutSize] base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithLineFeed];
  859. }
  860. free(encryptedBytes);
  861. return nil;
  862. }
  863. -(void)jsHiddenBottom:(NSDictionary *)dict{
  864. if(self.tabBarController.selectedIndex == 0) {
  865. if([[NSString stringWithFormat:@"%@",dict[@"hidden"]] integerValue]==0) {
  866. [self hideTabBar];
  867. [self hiddenMethodTabBar];
  868. }else {
  869. [self showTabBar];
  870. [self showMethodTabBar];
  871. }
  872. }
  873. }
  874. -(void)jsCheckLab:(NSDictionary *)dict {
  875. [[NSNotificationCenter defaultCenter] postNotificationName:RefreshNonCurVC object:nil userInfo:nil];
  876. }
  877. //js方法登录成功
  878. -(void)jsLoginSuccess:(NSDictionary *)dict {
  879. NSLog(@"search登录成功提示:%@",dict);
  880. NSString *status = [NSString stringWithFormat:@"%@",dict[@"status"]];
  881. [GlobalData shareInstance].isReLogin = YES;
  882. if([status isEqualToString:@"S"]) {
  883. if(pushIndex!=0) {
  884. kMainQueue((^{
  885. [[NSNotificationCenter defaultCenter] postNotificationName:RefreshAllVC object:nil userInfo:nil];
  886. AppDelegate *delegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
  887. JYTabBarController *tab = (JYTabBarController *)delegate.window.rootViewController;
  888. tab.selectedIndex = pushIndex;
  889. pushIndex = 0;
  890. }));
  891. }else {
  892. [self webViewFirstRequest];
  893. }
  894. }else if ([status isEqualToString:@""]) {
  895. //不刷新订阅-首页,刷新其他
  896. [[NSNotificationCenter defaultCenter] postNotificationName:RefreshExpAndMine object:nil userInfo:nil];
  897. }else {
  898. }
  899. //弹出页面
  900. if ([GlobalData shareInstance].isPasteLogin) {
  901. [GlobalData shareInstance].isPasteLogin = NO;
  902. NSString *content = [UIPasteboard generalPasteboard].string;
  903. [self popPasteVIew:content];
  904. }
  905. }
  906. -(void)jsBackUrl:(NSDictionary *)dict {
  907. NSString *status = [NSString stringWithFormat:@"%@",dict[@"status"]];
  908. if([status isEqualToString:@"H"]) {
  909. pushIndex = 0;
  910. [self webViewFirstRequest];
  911. }
  912. }
  913. -(void)jsClearPushMessage:(NSDictionary *)dict {
  914. kMainQueue(^{
  915. [[UIApplication sharedApplication] setApplicationIconBadgeNumber:1];
  916. [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];
  917. });
  918. }
  919. -(void)jsHideRedSpotOnMenu:(NSDictionary *)dict {
  920. NSString *menu = [NSString stringWithFormat:@"%@",dict[@"menu"]];
  921. if([menu isEqualToString:@"subscribe"]) {
  922. kMainQueue(^{
  923. [self.tabBarController.tabBar hideBadgeOnItemIndex:1];
  924. });
  925. }
  926. if([menu isEqualToString:@"my"]) {
  927. kMainQueue(^{
  928. [self.tabBarController.tabBar hideBadgeOnItemIndex:4];
  929. });
  930. }
  931. }
  932. -(void)jsShowRedSpotOnMenu:(NSDictionary *)dict {
  933. NSString *menu = [NSString stringWithFormat:@"%@",dict[@"menu"]];
  934. if([menu isEqualToString:@"subscribe"]) {
  935. kMainQueue(^{
  936. [self.tabBarController.tabBar showBadgeOnItemIndex:1];
  937. });
  938. }
  939. if([menu isEqualToString:@"my"]) {
  940. kMainQueue(^{
  941. [self.tabBarController.tabBar showBadgeOnItemIndex:4];
  942. });
  943. }
  944. }
  945. -(void)jsWxPay:(NSDictionary *)dict {
  946. if (![LXUserDefaults isInstallWeiXin]) { [[LXViewControllerManager shareViewControllerManager] showHudOnlyText:@"请先安装微信再进行支付!" delay:1.5];
  947. return;
  948. }
  949. NSString *jsonString = [NSString stringWithFormat:@"%@",dict[@"order"]];
  950. NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
  951. NSError *err;
  952. NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&err];
  953. if(err) {
  954. NSLog(@"json解析失败:%@",err);
  955. return;
  956. }
  957. //吊起微信
  958. PayReq *request = [[PayReq alloc] init] ;
  959. request.openID = dic[@"Appid"];
  960. request.partnerId = dic[@"Partnerid"];
  961. request.prepayId= dic[@"Prepayid"];
  962. request.package = @"Sign=WXPay";
  963. request.nonceStr= dic[@"Noncestr"];
  964. request.timeStamp= [dic[@"Timestamp"] intValue];
  965. request.sign= dic[@"Sign"];
  966. kMainQueue(^{
  967. [WXApi sendReq:request completion:^(BOOL success) {
  968. }];
  969. });
  970. }
  971. -(void)jsAliPay:(NSDictionary *)dict {
  972. if (![LXUserDefaults isInstallAli]) {
  973. [[LXViewControllerManager shareViewControllerManager] showHudOnlyText:@"请先安装支付宝再进行支付!" delay:1.5];
  974. return;
  975. }
  976. NSString *order = [NSString stringWithFormat:@"%@",dict[@"order"]];
  977. kMainQueue(^{
  978. [[AlipaySDK defaultService] payOrder:order fromScheme:@"jianyuiosapp" callback:nil];
  979. });
  980. }
  981. -(NSString *)jsGetOtherPushRid:(NSDictionary *)dict {
  982. return [LXUserDefaults deviceToken];
  983. }
  984. -(NSString *)jsGetPhoneBrand:(NSDictionary *)dict {
  985. UIDevice *device = [UIDevice currentDevice];
  986. return device.platformString;
  987. }
  988. -(NSString *)jsGetLocation:(NSDictionary *)dict {
  989. NSLog(@"------开始调用获取位置:%@",self.placeAdr);
  990. if (!self.isLocation) {
  991. // 1.检查定位服务是否开启
  992. if ([self checkLocationServiceIsEnabled]) {
  993. // 2.创建定位管理器:
  994. NSLog(@"定位可用");
  995. [self createCLManager];
  996. self.isLocation = YES; //只请求一次
  997. }else{
  998. NSLog(@"定位不可用");
  999. self.isLocation = NO;
  1000. }
  1001. //NSLog(@"即将返回城市信息-%@",self.placeAdr);
  1002. }
  1003. NSLog(@"即将返回城市信息-%@",self.placeAdr);
  1004. //防止null nil情况
  1005. if ([@"" isNotNULL:self.placeAdr]&&self.placeAdr.length>0&&[self.placeAdr isKindOfClass:[NSString class]]) {
  1006. }else {
  1007. self.placeAdr = @"";
  1008. }
  1009. return self.placeAdr;
  1010. }
  1011. -(NSString *)jsGetLLitude:(NSDictionary *)dict {
  1012. NSLog(@"------开始调用获取经纬度:%@",self.placeLli);
  1013. if (!self.isLocation) {
  1014. if ([self checkLocationServiceIsEnabled]) {
  1015. [self createCLManager];
  1016. self.isLocation = YES; //只请求一次
  1017. }else{
  1018. NSLog(@"定位不可用");
  1019. self.isLocation = NO;
  1020. }
  1021. }
  1022. NSLog(@"即将返回经纬度信息-%@",self.placeLli);
  1023. if ([@"" isNotNULL:self.placeLli]&&self.placeLli.length>0&&[self.placeLli isKindOfClass:[NSString class]]) {
  1024. }else {
  1025. self.placeLli = @"";
  1026. }
  1027. return self.placeLli;
  1028. }
  1029. -(void)jsChooseTab:(NSDictionary *)dict {
  1030. NSInteger indexTab = [dict[@"indexTab"] integerValue];
  1031. kMainQueue((^{
  1032. AppDelegate *delegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
  1033. JYTabBarController *tab = (JYTabBarController *)delegate.window.rootViewController;
  1034. tab.selectedIndex = indexTab;
  1035. pushIndex = indexTab;
  1036. }));
  1037. }
  1038. //拍照上传图片
  1039. -(void)jsSkipCameraWithParam:(NSDictionary *)dict {
  1040. [GlobalData shareInstance].isSkipPath = [NSString stringWithFormat:@"%@",dict[@"type"]];
  1041. UIImagePickerController *picker = [[UIImagePickerController alloc] init];
  1042. picker.delegate = self;
  1043. picker.allowsEditing = YES;
  1044. picker.sourceType = UIImagePickerControllerSourceTypeCamera;
  1045. dispatch_async(dispatch_get_main_queue(), ^{
  1046. [self presentViewController:picker animated:YES completion:nil];
  1047. });
  1048. }
  1049. //相册选择照片
  1050. -(void)jsSkipAlbumWithParam:(NSDictionary *)dict {
  1051. [GlobalData shareInstance].isSkipPath = [NSString stringWithFormat:@"%@",dict[@"type"]];
  1052. UIImagePickerController *picker = [[UIImagePickerController alloc] init];
  1053. picker.delegate = self;
  1054. picker.allowsEditing = YES;
  1055. picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
  1056. dispatch_async(dispatch_get_main_queue(), ^{
  1057. [self presentViewController:picker animated:YES completion:nil];
  1058. });
  1059. }
  1060. //统计点击推送
  1061. -(void)jsOpenActivityPage:(NSDictionary *)dict {
  1062. NSDictionary * infoDic = @{@"url":[NSString stringWithFormat:@"%@",dict[@"url"]],
  1063. @"rectype":[NSString stringWithFormat:@"%@",dict[@"rectype"]],
  1064. @"openid":[NSString stringWithFormat:@"%@",dict[@"openid"]],
  1065. };
  1066. //post请求
  1067. NSLog(@"%@",[NSString stringWithFormat:@"%@jyapp/free/message/receive",kHost]);
  1068. [[LXNetworkManager shareLXNetworkManager]postWithURLStr:[NSString stringWithFormat:@"%@jyapp/free/message/receive",kHost] parameters:infoDic progress:^(NSProgress *progress) {
  1069. NSLog(@"成功:%@",progress);
  1070. } success:^(id responseObject) {
  1071. NSLog(@"responseObject=%@",responseObject);
  1072. } failure:^(NSError *error) {
  1073. NSLog(@"error=%@",error);
  1074. }];
  1075. }
  1076. //拨打电话
  1077. -(void)jsCallPhone:(NSDictionary *)dict {
  1078. NSString *phone = [NSString stringWithFormat:@"%@",dict[@"phone"]];
  1079. NSMutableString *tel = [[NSMutableString alloc]initWithFormat:@"telprompt://%@",phone];
  1080. if (@available(iOS 10.0, *)) {
  1081. [[UIApplication sharedApplication] openURL:[NSURL URLWithString:tel] options:@{} completionHandler:^(BOOL success) {
  1082. }];
  1083. } else {
  1084. // Fallback on earlier versions
  1085. [[UIApplication sharedApplication] openURL:[NSURL URLWithString:tel]];
  1086. }
  1087. }
  1088. //打开其他app 抖音+快手
  1089. -(void)jsOpenOtherAppLinks:(NSDictionary *)dict {
  1090. //测试跳转抖音--快手 @"gifshow://" @"snssdk1128://"
  1091. NSString *appLink = [NSString stringWithFormat:@"%@",dict[@"appLink"]];
  1092. NSString *appName = [NSString stringWithFormat:@"%@",dict[@"appName"]];
  1093. NSLog(@"appName:%@",appName);
  1094. NSURL *url = [NSURL URLWithString:appLink];
  1095. if ([[UIApplication sharedApplication] canOpenURL:url]) {
  1096. if ([[UIApplication sharedApplication] respondsToSelector:@selector(openURL:options:completionHandler:)]) {
  1097. //iOS 10.0+
  1098. NSLog(@"iOS 10+");
  1099. if (@available(iOS 10.0, *)) {
  1100. [[UIApplication sharedApplication] openURL:url options:@{} completionHandler:^(BOOL success) {
  1101. if (!success) {
  1102. [[LXViewControllerManager shareViewControllerManager] showHudOnlyText:appName delay:2];
  1103. }
  1104. }];
  1105. } else {
  1106. // Fallback on earlier versions
  1107. [[UIApplication sharedApplication] openURL:url];
  1108. }
  1109. }else{
  1110. NSLog(@"iOS 2~10");
  1111. //iOS 2~10
  1112. [[UIApplication sharedApplication] openURL:url];
  1113. }
  1114. }else{
  1115. //一般是没有安装
  1116. NSLog(@"跳转下载app链接");
  1117. [[LXViewControllerManager shareViewControllerManager] showHudOnlyText:appName delay:2];
  1118. }
  1119. }
  1120. //保存图片到相册
  1121. #pragma mark 保存图片
  1122. -(void)jsSavePic:(NSDictionary *)dict {
  1123. NSString *base64ImgData = [NSString stringWithFormat:@"%@",dict[@"imgbase64"]];
  1124. base64ImgData = [base64ImgData stringByReplacingOccurrencesOfString:@"data:image/png;base64," withString:@""];
  1125. NSData *data = [[NSData alloc]initWithBase64EncodedString:base64ImgData options:NSDataBase64DecodingIgnoreUnknownCharacters];
  1126. UIImage *saveImg = [UIImage imageWithData:data];
  1127. UIImageWriteToSavedPhotosAlbum(saveImg, self, @selector(image:didFinishSavingWithError:contextInfo:), NULL);
  1128. }
  1129. #pragma mark 系统的完成保存图片的方法
  1130. - (void)image: (UIImage *) image didFinishSavingWithError: (NSError *) error contextInfo: (void *) contextInfo
  1131. {
  1132. NSString *msg = nil ;
  1133. if (error != NULL) {
  1134. msg = @"保存图片失败" ;
  1135. } else {
  1136. msg = @"保存图片成功" ;
  1137. }
  1138. [[LXViewControllerManager shareViewControllerManager] showHudOnlyText:msg delay:1];
  1139. }
  1140. #pragma mark 粘贴板
  1141. -(void)jsWirteRight:(NSDictionary *)dict {
  1142. NSString *txt = [NSString stringWithFormat:@"%@",dict[@"txt"]];
  1143. [[UIPasteboard generalPasteboard]setString:txt];
  1144. }
  1145. -(void)jsClearRight:(NSDictionary *)dict {
  1146. //清粘贴板数据
  1147. [[UIPasteboard generalPasteboard]setString:@""];
  1148. }
  1149. -(NSString *)jsReadRight:(NSDictionary *)dict {
  1150. NSString *content = [UIPasteboard generalPasteboard].string;
  1151. return content;
  1152. }
  1153. //返回定位可用信息
  1154. -(int)jsCheckLocationPermission:(NSDictionary *)dict {
  1155. if ([CLLocationManager locationServicesEnabled]) {
  1156. if ([CLLocationManager authorizationStatus]!= kCLAuthorizationStatusDenied) {
  1157. if ([CLLocationManager authorizationStatus]==kCLAuthorizationStatusNotDetermined) {
  1158. return -1;
  1159. }
  1160. return 1;
  1161. }
  1162. }
  1163. return 0;
  1164. }
  1165. //内购VIP
  1166. -(void)jsInPurchasingVip:(NSDictionary *)dict {
  1167. NSString *productid = [NSString stringWithFormat:@"%@",dict[@"productid"]];
  1168. //产品id
  1169. if ([productid isEqualToString:@""]) {
  1170. NSLog(@"订单号 有问题");
  1171. [[LXViewControllerManager shareViewControllerManager] showHudOnlyText:@"订单号异常,请重试" delay:1];
  1172. return;
  1173. }
  1174. [[LXViewControllerManager shareViewControllerManager] showHudText:@"苹果验证中,请稍候"];
  1175. //监听购买结果
  1176. if([SKPaymentQueue canMakePayments]){
  1177. [self requestProductData:productid];
  1178. }else{
  1179. NSLog(@"不允许程序内付费");
  1180. [[LXViewControllerManager shareViewControllerManager] hideHud];
  1181. }
  1182. }
  1183. //去苹果服务器请求商品
  1184. - (void)requestProductData:(NSString *)type {
  1185. NSArray *product = [[NSArray alloc] initWithObjects:type,nil];
  1186. NSSet *nsset = [NSSet setWithArray:product];
  1187. SKProductsRequest *request = [[SKProductsRequest alloc] initWithProductIdentifiers:nsset];
  1188. request.delegate = self;
  1189. [request start];
  1190. }
  1191. - (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response {
  1192. NSArray *myProduct = response.products;
  1193. if (myProduct.count == 0) {
  1194. NSLog(@"无法获取产品信息,购买失败。");
  1195. [[LXViewControllerManager shareViewControllerManager]showHudOnlyText:@"暂时未获取到产品信息,请重试" delay:1];
  1196. return;
  1197. }
  1198. SKPayment * payment = [SKPayment paymentWithProduct:myProduct[0]];
  1199. [[SKPaymentQueue defaultQueue] addPayment:payment];
  1200. }
  1201. //监听购买结果
  1202. - (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions {
  1203. NSLog(@"收到支付回调");
  1204. for (SKPaymentTransaction *transaction in transactions) {
  1205. switch (transaction.transactionState) {
  1206. case SKPaymentTransactionStatePurchased://交易完成
  1207. NSLog(@"购买成功transactionIdentifier = %@", transaction.transactionIdentifier);
  1208. [self completeTransaction:transaction];
  1209. break;
  1210. case SKPaymentTransactionStateFailed://交易失败
  1211. [self failedTransaction:transaction];
  1212. break;
  1213. case SKPaymentTransactionStateRestored://已经购买过该商品
  1214. [self restoreTransaction:transaction];
  1215. break;
  1216. case SKPaymentTransactionStatePurchasing://商品添加进列表
  1217. NSLog(@"商品添加进列表");
  1218. break;
  1219. default:
  1220. break;
  1221. }
  1222. }
  1223. }
  1224. - (void)completeTransaction:(SKPaymentTransaction *)transaction {
  1225. // Your application should implement these two methods.
  1226. [[LXViewControllerManager shareViewControllerManager] hideHud];
  1227. NSString * productIdentifier = transaction.payment.productIdentifier;
  1228. NSURLRequest *urlRequest = [NSURLRequest requestWithURL:[[NSBundle mainBundle] appStoreReceiptURL]];
  1229. NSData *receiptData;
  1230. NSError *error = nil;
  1231. receiptData = [NSURLConnection sendSynchronousRequest:urlRequest returningResponse:nil error:&error];
  1232. NSString *receipt = [receiptData base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithLineFeed];
  1233. if ([productIdentifier length] > 0) {
  1234. // 向自己的服务器验证购买凭证
  1235. if(self.tabBarController.selectedIndex == 0) {
  1236. [self isExitCallToJS:[NSString stringWithFormat:@"getReceipt('%@')", receipt] withMethodName:@"getReceipt"];
  1237. }else {
  1238. [[NSNotificationCenter defaultCenter] postNotificationName:@"receiptData" object:nil userInfo:@{@"receipt":receipt}];
  1239. }
  1240. }
  1241. // Remove the transaction from the payment queue.
  1242. [[SKPaymentQueue defaultQueue] finishTransaction: transaction];
  1243. }
  1244. - (void)failedTransaction:(SKPaymentTransaction *)transaction {
  1245. [[LXViewControllerManager shareViewControllerManager] hideHud];
  1246. if(transaction.error.code != SKErrorPaymentCancelled) {
  1247. NSLog(@"购买失败");
  1248. [[LXViewControllerManager shareViewControllerManager]showHudOnlyText:@"购买失败,请重新尝试。" delay:1];
  1249. } else {
  1250. NSLog(@"用户取消交易");
  1251. [[LXViewControllerManager shareViewControllerManager]showHudOnlyText:@"取消交易" delay:1];
  1252. }
  1253. [[SKPaymentQueue defaultQueue] finishTransaction: transaction];
  1254. }
  1255. - (void)restoreTransaction:(SKPaymentTransaction *)transaction {
  1256. // 对于已购商品,处理恢复购买的逻辑
  1257. NSLog(@"对于已购商品,处理恢复购买的逻辑");
  1258. [[LXViewControllerManager shareViewControllerManager] hideHud];
  1259. [[SKPaymentQueue defaultQueue] finishTransaction: transaction];
  1260. }
  1261. //切换模块
  1262. -(void)jsSkipAppointTab:(NSDictionary *)dict {
  1263. if(self.tabBarController.selectedIndex == 0) {
  1264. AppDelegate *delegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
  1265. JYTabBarController *tab = (JYTabBarController *)delegate.window.rootViewController;
  1266. NSString *name = [NSString stringWithFormat:@"%@",dict[@"name"]];
  1267. if ([name isEqualToString:@"search"]) {
  1268. tab.selectedIndex = 0;//切换底部栏
  1269. }else if ([name isEqualToString:@"subscribe"]) {
  1270. tab.selectedIndex = 1;//切换底部栏
  1271. }else if ([name isEqualToString:@"message"]) {
  1272. tab.selectedIndex = 2;//切换底部栏
  1273. }else if ([name isEqualToString:@"box"]) {
  1274. tab.selectedIndex = 3;//切换底部栏
  1275. }else if ([name isEqualToString:@"me"]) {
  1276. tab.selectedIndex = 4;//切换底部栏
  1277. }else {
  1278. }
  1279. }
  1280. }
  1281. //刷新模块页面
  1282. -(void)jsRefreshAppointTab:(NSDictionary *)dict {
  1283. if(self.tabBarController.selectedIndex == 0) {
  1284. [[NSNotificationCenter defaultCenter] postNotificationName:JYRefreshMenusView object:nil userInfo:dict];
  1285. }
  1286. }
  1287. //展示消息模块红点数量
  1288. -(void)jsSendMsgCount:(NSDictionary *)dict {
  1289. NSString *count = [NSString stringWithFormat:@"%@",dict[@"num"]];
  1290. if(self.tabBarController.selectedIndex == 0) {
  1291. [self.tabBarController.tabBar showBadgeOnItemIndex:2 withCount:[count intValue]];
  1292. }
  1293. }
  1294. -(void)jsDownLoadFile:(NSDictionary *)dict {
  1295. NSString *filename = [NSString stringWithFormat:@"%@",dict[@"filename"]];
  1296. NSString *filetype = [NSString stringWithFormat:@"%@",dict[@"filetype"]];
  1297. NSString *fileurl = [NSString stringWithFormat:@"%@",dict[@"fileurl"]];
  1298. NSString *filesize = [NSString stringWithFormat:@"%@",dict[@"filesize"]];
  1299. NSString *new_filename = [NSString stringWithFormat:@"%@.%@",[filename stringByRemovingPercentEncoding],filetype];
  1300. new_filename=[new_filename stringByReplacingOccurrencesOfString:@"/" withString:@""];
  1301. LoadDocViewController *load = [[LoadDocViewController alloc] init];
  1302. JhtFileModel *fileModel = [[JhtFileModel alloc] init];
  1303. fileModel.fileName = new_filename;
  1304. if ([filetype isEqualToString:@"doc"] || [filetype isEqualToString:@"word"]||[filetype isEqualToString:@"docx"]) {
  1305. fileModel.viewFileType =Type_Docx;
  1306. }else if([filetype isEqualToString:@"excel"]||[filetype isEqualToString:@"xls"]||[filetype isEqualToString:@"xlsx"]) {
  1307. fileModel.viewFileType =Type_Xlsx;
  1308. }else if([filetype isEqualToString:@"ppt"]||[filetype isEqualToString:@"pptx"]) {
  1309. fileModel.viewFileType =Type_Pptx;
  1310. }else if([filetype isEqualToString:@"pdf"]) {
  1311. fileModel.viewFileType =Type_Pdf;
  1312. }else if([filetype isEqualToString:@"txt"]) {
  1313. fileModel.viewFileType =Type_Txt;
  1314. }else if([filetype isEqualToString:@"jpg"]||[filetype isEqualToString:@"JPG"]||[filetype isEqualToString:@"jpeg"]) {
  1315. fileModel.viewFileType =Type_Jpg;
  1316. }else if([filetype isEqualToString:@"png"]||[filetype isEqualToString:@"PNG"]) {
  1317. fileModel.viewFileType =Type_Png;
  1318. }else {
  1319. fileModel.viewFileType =Type_Unknow;
  1320. }
  1321. fileModel.url = fileurl;
  1322. fileModel.fileSize = filesize;
  1323. load.titleStr = fileModel.fileName;
  1324. load.currentFileModel = fileModel;
  1325. kMainQueue(^{
  1326. [self presentViewController:load animated:YES completion:nil];
  1327. });
  1328. }
  1329. #pragma mark *****其他方法
  1330. -(void)judgeIsHiddenBottom {
  1331. if(self.tabBarController.selectedIndex == 0) {
  1332. NSString *current_url = [self stringByEvaluatingJavaScriptFromString:@"document.location.href"];
  1333. NSArray *array = [current_url componentsSeparatedByString:@"?"];
  1334. current_url = [NSString stringWithFormat:@"%@",array.firstObject];
  1335. if([current_url isEqualToString:[NSString stringWithFormat:@"%@jyapp/jylab/mainSearch",kHost]]){
  1336. [self showTabBar];
  1337. [self showMethodTabBar];
  1338. }else {
  1339. [self hideTabBar];
  1340. [self hiddenMethodTabBar];
  1341. }
  1342. }
  1343. }
  1344. - (void)hideTabBar {
  1345. kMainQueue(^{
  1346. if (self.tabBarController.tabBar.hidden == YES) {
  1347. return;
  1348. }
  1349. UIView *contentView;
  1350. if ( [[self.tabBarController.view.subviews objectAtIndex:0] isKindOfClass:[UITabBar class]] )
  1351. contentView = [self.tabBarController.view.subviews objectAtIndex:1];
  1352. else
  1353. contentView = [self.tabBarController.view.subviews objectAtIndex:0];
  1354. contentView.frame = CGRectMake(contentView.bounds.origin.x, contentView.bounds.origin.y, contentView.bounds.size.width, contentView.bounds.size.height + self.tabBarController.tabBar.frame.size.height);
  1355. self.tabBarController.tabBar.hidden = YES;
  1356. });
  1357. }
  1358. - (void)showTabBar{
  1359. kMainQueue(^{
  1360. if (self.tabBarController.tabBar.hidden == NO){
  1361. return;
  1362. }
  1363. UIView *contentView;
  1364. if ([[self.tabBarController.view.subviews objectAtIndex:0] isKindOfClass:[UITabBar class]])
  1365. contentView = [self.tabBarController.view.subviews objectAtIndex:1];
  1366. else
  1367. contentView = [self.tabBarController.view.subviews objectAtIndex:0];
  1368. contentView.frame = CGRectMake(contentView.bounds.origin.x, contentView.bounds.origin.y, contentView.bounds.size.width, contentView.bounds.size.height - self.tabBarController.tabBar.frame.size.height);
  1369. self.tabBarController.tabBar.hidden = NO;
  1370. });
  1371. }
  1372. - (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script
  1373. {
  1374. __block NSString *resultString = nil;
  1375. __block BOOL finished = NO;
  1376. [self.webView evaluateJavaScript:script completionHandler:^(id result, NSError *error) {
  1377. if (error == nil) {
  1378. if (result != nil) {
  1379. resultString = [NSString stringWithFormat:@"%@", result];
  1380. }
  1381. } else {
  1382. NSLog(@"evaluateJavaScript error : %@", error.localizedDescription);
  1383. }
  1384. finished = YES;
  1385. }];
  1386. while (!finished) {
  1387. [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
  1388. }
  1389. return resultString;
  1390. }
  1391. -(void)hiddenMethodTabBar
  1392. {
  1393. kMainQueue(^{
  1394. if (iPhoneX) {
  1395. if (@available(iOS 11.0, *)) {
  1396. self.webView.frame = CGRectMake(0, 0, WIDTH, HEIGHT);
  1397. }
  1398. }else {
  1399. self.webView.frame = CGRectMake(0, -STATUS_BAR_HEIGHT, WIDTH, HEIGHT+STATUS_BAR_HEIGHT);
  1400. }
  1401. });
  1402. }
  1403. -(void)showMethodTabBar
  1404. {
  1405. kMainQueue(^{
  1406. if (iPhoneX) {
  1407. if (@available(iOS 11.0, *)) {
  1408. self.webView.frame = CGRectMake(0, 0, WIDTH, HEIGHT-TAB_BAR_HEIGHT);
  1409. }
  1410. }else {
  1411. self.webView.frame = CGRectMake(0, -STATUS_BAR_HEIGHT, WIDTH, HEIGHT-TAB_BAR_HEIGHT+STATUS_BAR_HEIGHT);
  1412. }
  1413. });
  1414. }
  1415. //取消获取照片
  1416. - (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
  1417. {
  1418. dispatch_async(dispatch_get_main_queue(), ^{
  1419. [picker dismissViewControllerAnimated:YES completion:^{
  1420. [self uploadUrl:@""];
  1421. }];
  1422. });
  1423. }
  1424. //上传图片
  1425. -(void)uploadPic:(NSData *)data
  1426. {
  1427. NSString *isPath = @"courseFile";
  1428. if (![[GlobalData shareInstance].isSkipPath isEqualToString:@""]) {
  1429. isPath = [GlobalData shareInstance].isSkipPath;
  1430. }
  1431. NSDictionary * body = @{@"type":isPath};
  1432. AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
  1433. //ContentType设置
  1434. manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/html",@"image/jpeg",@"image/png",@"application/octet-stream",@"text/json",@"text/plain",nil];
  1435. manager.responseSerializer= [AFHTTPResponseSerializer serializer];
  1436. manager.requestSerializer = [AFHTTPRequestSerializer serializer];
  1437. manager.requestSerializer.timeoutInterval = 15.0f;
  1438. [manager POST:[NSString stringWithFormat:@"%@jyapp/filemanage/upload",kHost] parameters:body constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
  1439. //上传的参数(上传图片,以文件流的格式)
  1440. [formData appendPartWithFileData:data
  1441. name:isPath
  1442. fileName:[isPath stringByAppendingFormat:@".jpeg"]
  1443. mimeType:@"image/jpeg"];
  1444. } progress:^(NSProgress * _Nonnull uploadProgress) {
  1445. CGFloat progress = 100.0 * uploadProgress.completedUnitCount / uploadProgress.totalUnitCount;
  1446. NSLog(@"%.2lf%%", progress);
  1447. } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
  1448. //请求成功的block回调
  1449. NSDictionary * dic = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingAllowFragments error:nil];
  1450. NSLog(@"上传成功%@",dic);
  1451. if ([dic[@"msg"] isEqualToString:@"ssss"]) {
  1452. [self uploadUrl:dic[@"url"]];
  1453. }else{
  1454. [self uploadUrl:@""];
  1455. }
  1456. } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
  1457. NSLog(@"上传失败%@",error);
  1458. [self uploadUrl:@""];
  1459. }];
  1460. }
  1461. -(void)uploadUrl:(NSString *)url {
  1462. NSString *textJS = [NSString new];
  1463. NSString *methodJS = [NSString new];
  1464. if ([url isEqualToString:@""]) {
  1465. textJS = @"hiddenLoading()";
  1466. methodJS =@"hiddenLoading";
  1467. }else{
  1468. textJS = [NSString stringWithFormat:@"uploadImg('%@')",url];
  1469. methodJS = @"uploadImg";
  1470. }
  1471. if ([url isEqualToString:@""]||[textJS isEqualToString:@""]) {
  1472. NSLog(@"空的情况");
  1473. textJS = @"hiddenLoading()";
  1474. methodJS = @"hiddenLoading";
  1475. }
  1476. NSDictionary *dict = @{@"jsStr":textJS,@"name":methodJS};
  1477. [self performSelector:@selector(uploadJS:) withObject:dict afterDelay:1];
  1478. }
  1479. //获取到图片
  1480. - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
  1481. {
  1482. dispatch_async(dispatch_get_main_queue(), ^{
  1483. [picker dismissViewControllerAnimated:YES completion:^{
  1484. UIImage * img=[info objectForKey:UIImagePickerControllerEditedImage];
  1485. NSData *data = UIImageJPEGRepresentation(img, 0.5);
  1486. if (data!=nil) {
  1487. [self uploadPic:data];
  1488. }else{
  1489. NSLog(@"data == nil");
  1490. [self uploadUrl:@""];
  1491. }
  1492. }];
  1493. });
  1494. }
  1495. -(void)uploadJS:(NSDictionary *)dict {
  1496. [self isExitCallToJS:dict[@"jsStr"] withMethodName:dict[@"name"]];
  1497. }
  1498. - (BOOL)checkLocationServiceIsEnabled{
  1499. // 该方法是类方法,和我们创建的管理器没有关系
  1500. if ([CLLocationManager locationServicesEnabled]) {
  1501. return YES;
  1502. }
  1503. return NO;
  1504. }
  1505. - (void)createCLManager{
  1506. // 创建CoreLocation管理对象
  1507. self.locaationManager = [[CLLocationManager alloc]init];
  1508. // 设定定位精准度
  1509. [self.locaationManager setDesiredAccuracy:kCLLocationAccuracyBest];
  1510. // 设定DistanceFilter可以在用户移动指定距离之后触发更新事件(100米更新一次)
  1511. [self.locaationManager setDistanceFilter:1.f];
  1512. // 设置代理
  1513. self.locaationManager.delegate = self;
  1514. // 开始更新定位
  1515. [self.locaationManager startUpdatingLocation];
  1516. }
  1517. // 代理方法,更新位置
  1518. - (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations{
  1519. CLLocation * newLocation = [locations lastObject];
  1520. // 判空处理
  1521. if (newLocation.horizontalAccuracy < 0) {
  1522. return;
  1523. }
  1524. self.placeLli = [NSString stringWithFormat:@"%f_%f",newLocation.coordinate.longitude,newLocation.coordinate.latitude];
  1525. NSLog(@"回调经纬度:%@",self.placeLli);
  1526. CLGeocoder *geocoder = [[CLGeocoder alloc] init];
  1527. [geocoder reverseGeocodeLocation:newLocation completionHandler:^(NSArray *placemarks, NSError *error) {
  1528. for (CLPlacemark *placeMark in placemarks) {
  1529. //NSLog(@"位置:%@", placeMark.name);
  1530. //NSLog(@"街道:%@", placeMark.thoroughfare);
  1531. //NSLog(@"子街道:%@", placeMark.subThoroughfare);
  1532. //NSLog(@"区\\县:%@", placeMark.subLocality);
  1533. //NSLog(@"市:%@", placeMark.locality);
  1534. //NSLog(@"行政区:%@", placeMark.administrativeArea);
  1535. //NSLog(@"国家:%@", placeMark.country);
  1536. self.placeAdr = [placeMark.administrativeArea stringByAppendingString:[NSString stringWithFormat:@"-%@",placeMark.locality]];
  1537. }
  1538. }];
  1539. }
  1540. // 代理方法,定位权限检查
  1541. -(void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status{
  1542. switch (status) {
  1543. case kCLAuthorizationStatusNotDetermined:{
  1544. NSLog(@"用户还未决定授权");
  1545. // 主动获得授权
  1546. [self.locaationManager requestWhenInUseAuthorization];
  1547. break;
  1548. }
  1549. case kCLAuthorizationStatusRestricted:
  1550. {
  1551. NSLog(@"访问受限");
  1552. // 主动获得授权
  1553. [self.locaationManager requestWhenInUseAuthorization];
  1554. break;
  1555. }
  1556. case kCLAuthorizationStatusDenied:{
  1557. // 此时使用主动获取方法也不能申请定位权限
  1558. // 类方法,判断是否开启定位服务
  1559. if ([CLLocationManager locationServicesEnabled]) {
  1560. NSLog(@"定位服务开启,被拒绝");
  1561. } else {
  1562. NSLog(@"定位服务关闭,不可用");
  1563. }
  1564. break;
  1565. }
  1566. case kCLAuthorizationStatusAuthorizedAlways:{
  1567. NSLog(@"获得前后台授权");
  1568. break;
  1569. }
  1570. case kCLAuthorizationStatusAuthorizedWhenInUse:{
  1571. NSLog(@"获得前台授权");
  1572. break;
  1573. }
  1574. default:
  1575. break;
  1576. }
  1577. }
  1578. -(NSString *)convertToJsonData:(NSDictionary *)dict {
  1579. NSError *error;
  1580. NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dict options:NSJSONWritingPrettyPrinted error:&error];
  1581. NSString *jsonString;
  1582. if (!jsonData) {
  1583. NSLog(@"%@",error);
  1584. }else{
  1585. jsonString = [[NSString alloc]initWithData:jsonData encoding:NSUTF8StringEncoding];
  1586. }
  1587. NSMutableString *mutStr = [NSMutableString stringWithString:jsonString];
  1588. NSRange range = {0,jsonString.length};
  1589. //去掉字符串中的空格
  1590. [mutStr replaceOccurrencesOfString:@" " withString:@"" options:NSLiteralSearch range:range];
  1591. NSRange range2 = {0,mutStr.length};
  1592. //去掉字符串中的换行符
  1593. [mutStr replaceOccurrencesOfString:@"\n" withString:@"" options:NSLiteralSearch range:range2];
  1594. return mutStr;
  1595. }
  1596. -(void)addNoNetViews{
  1597. kMainQueue(^{
  1598. self.recognizer.enabled = NO;
  1599. [self removeNoNetViews];
  1600. //about:blank
  1601. self.noNetView = [NoNetView shareView];
  1602. [self.view addSubview:self.noNetView];
  1603. });
  1604. }
  1605. -(void)removeNoNetViews{
  1606. if (self.noNetView ) {
  1607. self.recognizer.enabled = YES;
  1608. [self.noNetView removeFromSuperview];
  1609. self.noNetView = nil;
  1610. }
  1611. }
  1612. -(void)addFailNetViews{
  1613. kMainQueue(^{
  1614. self.recognizer.enabled = NO;
  1615. [self removeFailNetViews];
  1616. self.failNetView = [NoNetView shareView];
  1617. [self.view addSubview:self.failNetView];
  1618. });
  1619. }
  1620. -(void)removeFailNetViews{
  1621. if (self.failNetView ) {
  1622. self.recognizer.enabled = YES;
  1623. [self.failNetView removeFromSuperview];
  1624. self.failNetView = nil;
  1625. }
  1626. }
  1627. #pragma mark **** 通知相关方法
  1628. -(void)openPushUrlOtherMethods:(NSNotification *)notification{
  1629. if(self.tabBarController.selectedIndex == 0) {
  1630. NSDictionary *infoDict = notification.userInfo;
  1631. if (!infoDict) {return;}
  1632. NSString * urlStr = [NSString stringWithFormat:@"%@",infoDict[@"url"]];
  1633. if ([urlStr isEqualToString:kHost]) {return;}
  1634. [self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:urlStr]]];
  1635. }
  1636. }
  1637. -(void)openPushUrlMethodsOne:(NSNotification *)notification{
  1638. NSDictionary *infoDict = notification.userInfo;
  1639. NSLog(@"%@",infoDict);
  1640. if (!infoDict) {return;}
  1641. NSString * urlStr = [NSString stringWithFormat:@"%@",infoDict[@"url"]];
  1642. if ([urlStr isEqualToString:kHost]||![LXUserDefaults token]) {return;}
  1643. [self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:urlStr]]];
  1644. }
  1645. -(void)openPushLinkUrlMethods:(NSNotification *)notification{
  1646. NSDictionary *infoDict = notification.userInfo;
  1647. NSLog(@"%@",infoDict);
  1648. if (!infoDict) {return;}
  1649. NSString * urlStr = [NSString stringWithFormat:@"%@",infoDict[@"url"]];
  1650. if ([urlStr isEqualToString:kHost]) {return;}
  1651. if (self.tabBarController.selectedIndex == 0) {
  1652. [self JsOpenExternalLink:@{@"url":urlStr,@"title":@"消息通知"}];
  1653. }
  1654. }
  1655. -(void)alipayWXpayStatus:(NSNotification *)notification{
  1656. if(self.tabBarController.selectedIndex == 0) {
  1657. NSString * status = [notification object];
  1658. [self performSelector:@selector(payStatus:) withObject:status afterDelay:2];
  1659. }
  1660. }
  1661. -(void)payStatus:(NSString *)status {
  1662. NSLog(@"支付状态:%@",status);//目前延时两秒
  1663. if(self.tabBarController.selectedIndex == 0) {
  1664. [self isExitCallToJS:[NSString stringWithFormat:@"payCallBack('%@')", status] withMethodName:@"payCallBack"];
  1665. }
  1666. }
  1667. // 再次加载页面
  1668. -(void)notNetReloadWebVIew:(NSNotification *)notification{
  1669. if(self.tabBarController.selectedIndex == 0) {
  1670. if (![self.webView canGoBack]) {
  1671. [self webViewFirstRequest];
  1672. }else{
  1673. [self.webView reload];
  1674. }
  1675. }
  1676. }
  1677. // 返回上一页面- 防止
  1678. -(void)popWebView:(NSNotification *)notification{
  1679. if(self.tabBarController.selectedIndex == 0) {
  1680. if ([self.webView canGoBack]) {
  1681. [self.webView goBack];
  1682. }
  1683. [self removeNoNetViews];
  1684. [self removeFailNetViews];
  1685. }
  1686. }
  1687. // 收到退出登录消息
  1688. -(void)loginOut:(NSNotification *)notification{
  1689. if([notification.userInfo[@"item_index"] integerValue]!=0) {
  1690. return;
  1691. }
  1692. NSString *url = [NSString stringWithFormat:@"%@%@", kHost, @"jyapp/free/login?back=index&isios=t&flag=kicked"];
  1693. url = [url stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
  1694. [self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:url]]];
  1695. }
  1696. // 监控网络状态变化
  1697. -(void)netReachChanged:(NSNotification *)notificaition{
  1698. NSDictionary *userInfo = notificaition.userInfo;
  1699. if ([userInfo[@"AFNetworkingReachabilityNotificationStatusItem"] intValue] == 0 || [userInfo[@"AFNetworkingReachabilityNotificationStatusItem"] intValue] == -1) {
  1700. // NSLog(@"检测无网络");
  1701. [self addNoNetViews];
  1702. }else{
  1703. [self removeNoNetViews];
  1704. if (isExistNoNewWork) {
  1705. isExistNoNewWork = NO;
  1706. [self notNetReloadWebVIew:nil];
  1707. }
  1708. }
  1709. }
  1710. //前往登录页面
  1711. -(void)isLoginTabBar:(NSNotification *)notification
  1712. {
  1713. NSDictionary *dict = notification.userInfo;
  1714. NSLog(@"我从第几个页面过来:%@",dict[@"item_index"]);
  1715. pushIndex = [dict[@"item_index"] integerValue];
  1716. NSString *url = [NSString stringWithFormat:@"%@%@", kHost, @"jyapp/free/login"];
  1717. url = [url stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
  1718. [self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:url]]];
  1719. }
  1720. -(void)jyReceiveNewsRedPoint:(NSNotification *)notificaition {
  1721. NSDictionary *dict = notificaition.userInfo;
  1722. NSLog(@"收到消息处理:%@",dict);
  1723. if (![dict[@"index"] isEqualToString:@""]) { //展示红点-
  1724. int index = [dict[@"index"] intValue];
  1725. kMainQueue(^{
  1726. [self.tabBarController.tabBar showBadgeOnItemIndex:index];
  1727. });
  1728. }
  1729. if(self.tabBarController.selectedIndex == 0) {
  1730. NSString *textJS = [NSString stringWithFormat:@"afterReceivePushMessage('%@','%@')",dict[@"typeMsg"],dict[@"url"]];
  1731. [self isExitCallToJS:textJS withMethodName:@"afterReceivePushMessage"];
  1732. }
  1733. }
  1734. -(void)jyRefreshMenusView:(NSNotification *)notificaition {
  1735. NSDictionary *dict = notificaition.userInfo;
  1736. NSString *name = [NSString stringWithFormat:@"%@",dict[@"name"]];
  1737. NSString *type = [NSString stringWithFormat:@"%@",dict[@"type"]];
  1738. if ([name isEqualToString:@"search"]) {
  1739. if ([type isEqualToString:@"0"]) {
  1740. [self.webView reload];
  1741. }else {
  1742. [self webViewFirstRequest];
  1743. }
  1744. }
  1745. }
  1746. //刷新页面相关
  1747. -(void)refreshNonCurVC:(NSNotification *)notificaition{
  1748. if(self.tabBarController.selectedIndex != 0) {
  1749. [self webViewFirstRequest];
  1750. }
  1751. }
  1752. -(void)refreshAllVC:(NSNotification *)notificaition{
  1753. [self webViewFirstRequest];
  1754. }
  1755. #pragma mark ****粘贴板相关-梳理
  1756. -(void)updateClipboard:(NSNotification *)notificaition{
  1757. if(self.tabBarController.selectedIndex == 0) {
  1758. NSString *current_url = [self stringByEvaluatingJavaScriptFromString:@"document.location.href"];
  1759. NSDictionary *dict = notificaition.userInfo;
  1760. NSString *content = [NSString stringWithFormat:@"%@",dict[@"content"]];
  1761. if ([current_url containsString:@"jyapp/free/login"]) {
  1762. [GlobalData shareInstance].isPasteLogin = YES;
  1763. }else {
  1764. [self popPasteVIew:content];
  1765. }
  1766. }
  1767. }
  1768. -(void)openTheClipboard:(NSNotification *)notificaition{
  1769. if(self.tabBarController.selectedIndex == 0) {
  1770. NSLog(@"菜单一打开指定粘贴板url");
  1771. NSDictionary *dict = notificaition.userInfo;
  1772. NSString *tmpUrl = [NSString stringWithFormat:@"%@%@", kHost, dict[@"url"]];
  1773. tmpUrl = [tmpUrl stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
  1774. kMainQueue(^{
  1775. [self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:tmpUrl]]];
  1776. })
  1777. }
  1778. }
  1779. //弹出粘贴板框
  1780. -(void)popPasteVIew:(NSString *)content {
  1781. [[LXNetworkManager shareLXNetworkManager]postWithURLStr:[NSString stringWithFormat:@"%@distribution/share/getWordInfo",kHost] parameters:@{@"copyTxt":content} progress:^(NSProgress *progress) {
  1782. NSLog(@"%@",progress);
  1783. } success:^(id responseObject) {
  1784. NSLog(@"responseObject=%@",responseObject);
  1785. if ([responseObject objectForKey:@"data"]) {
  1786. NSDictionary *dict = [[NSDictionary alloc]initWithDictionary:responseObject[@"data"]];
  1787. if ([dict objectForKey:@"title"]) {
  1788. self.clipboardView.title =dict[@"title"];
  1789. self.clipboardView.subTitle =dict[@"subTitle"];
  1790. self.clipboardView.imgUrl =dict[@"imgUrl"];
  1791. self.clipboardView.appUrl =dict[@"appUrl"];
  1792. self.clipboardView.butTxt =dict[@"butTxt"];
  1793. self.clipboardView.bottomTxt =dict[@"bottomTxt"];
  1794. [self.clipboardView show];
  1795. }
  1796. }
  1797. } failure:^(NSError *error) {
  1798. NSLog(@"error=%@",error);
  1799. }];
  1800. }
  1801. #pragma mark **** 代理方法
  1802. -(void)clipboardClick:(NSString *)url {
  1803. //发送通知打开粘贴板-url
  1804. [[NSNotificationCenter defaultCenter] postNotificationName:OpenTheClipboard object:nil userInfo:@{@"url":url}];
  1805. }
  1806. /*
  1807. #pragma mark - Navigation
  1808. // In a storyboard-based application, you will often want to do a little preparation before navigation
  1809. - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
  1810. // Get the new view controller using [segue destinationViewController].
  1811. // Pass the selected object to the new view controller.
  1812. }
  1813. */
  1814. @end