JYMineViewController.m 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894
  1. //
  2. // JYMineViewController.m
  3. // JianYuIOS
  4. //
  5. // Created by apple on 2018/11/8.
  6. // Copyright © 2018年 lixianglan. All rights reserved.
  7. //
  8. #import "JYMineViewController.h"
  9. #import "JYTabBarController.h"
  10. @protocol JYMineViewControllerJSExport<JSExport>
  11. JSExportAs(loginByWeixin, -(NSString *)jsLoginByWeixin:(NSString *)str);// 微信登录 openid
  12. JSExportAs(share, -(void)jsShare:(NSString *)type title:(NSString *)title content:(NSString *)content link:(NSString *)link); // 调用分享
  13. JSExportAs(saveUserToken, -(void)jsSaveUserToken:(NSString *)token);// 登录时获取令牌 保存
  14. JSExportAs(getUserToken, -(NSString *)jsGetUserToken:(NSString *)str);// 取本地存的令牌
  15. JSExportAs(removeUserToken, -(void)jsRemoveUserToken:(NSString *)str); // 退出时清空数据
  16. JSExportAs(checkNoticePermission, -(int)jsCheckNoticePermission:(NSString *)str); // 查询手机通知是否打开
  17. JSExportAs(openSystemNotification, -(void)jsOpenSystemNotification:(NSString *)str);// 跳转到系统设置
  18. JSExportAs(getPushRid, -(NSString *)jsGetPushRid:(NSString *)str);// 返回极光id
  19. JSExportAs(getMessageList, -(NSString *)jsGetMessageList:(NSString *)openid);// 按通知接收时间倒排,取前100条
  20. JSExportAs(updateMessageState, -(void)jsUpdateMessageState:(NSString *)lxID state:(NSString *)state);// 更新状态
  21. JSExportAs(deleteMessageById, -(void)jsDeleteMessageById:(NSString *)lxID);// 删除一条消息
  22. JSExportAs(getMessage, -(NSString *)jsGetMessage:(NSString *)lxID);// 取单条数据
  23. JSExportAs(getUnReadMessageCount, -(int)jsGetUnReadMessageCount:(NSString *)openid);// 获取未读消息总数
  24. JSExportAs(updateAllUnReadMessage, -(void)jsUpdateAllUnReadMessage:(NSString *)openid);// 全部置为已读
  25. JSExportAs(lightStatusBar, -(void)jsLightStatusBar:(NSString *)status);// 导航栏文字颜色
  26. JSExportAs(openExternalLink, -(void)jsOpenExternalLink:(NSString *)url title:(NSString *)title);// 打开新控制器 加载新web
  27. JSExportAs(getVersion, -(NSString *)jsGetVersion:(NSString *)str);// 获取当前版本号
  28. JSExportAs(alert, -(void)jsAlert:(NSString *)content);// 弹框
  29. JSExportAs(isInstallWeixin, -(int)jsIsInstallWeixin:(NSString *)str);// 是否安装微信
  30. JSExportAs(changeMessageType, -(void)jsChangeMessageType:(NSString *)link);//已读操作处理
  31. JSExportAs(openActivityPage, -(void)jsOpenActivityPage:(NSString *)url rectype:(NSString *)rectype openid:(NSString *)openid);
  32. JSExportAs(getCipherText, -(NSString *)jsGGetCipherText:(NSString *)phone);
  33. JSExportAs(business, -(NSInteger)jsBusiness:(NSInteger)shooID shopType:(NSInteger )shopType);
  34. //新增
  35. JSExportAs(hiddenBottom, -(void)jsHiddenBottom:(NSString*)hidden);
  36. JSExportAs(loginSuccess, -(void)jsLoginSuccess:(NSString*)status);
  37. JSExportAs(backUrl, -(void)jsBackUrl:(NSString*)str);
  38. @end
  39. @interface JYMineViewController ()<UIWebViewDelegate, JYMineViewControllerJSExport>
  40. {
  41. CGPoint startTouch;
  42. BOOL _isMoving;
  43. }
  44. @property(nonatomic, strong)UIWebView *webView;
  45. @property(nonatomic, assign)BOOL updateNotify;
  46. @property(nonatomic, assign)BOOL afterOpenPushMessage;
  47. @property(nonatomic, strong)NoNetView *noNetView;
  48. @property(nonatomic, strong)NSURLRequest *errRequest;
  49. @property(nonatomic, strong)NSString *signOutContent;
  50. @end
  51. NSString *const kInitVector_3 = @"1389461544135476";
  52. size_t const kKeySize_3 = kCCKeySizeAES128;
  53. NSString *const AesKey_3 = @"mGlAgnIBB8bx2nch";
  54. @implementation JYMineViewController
  55. -(void)viewWillAppear:(BOOL)animated
  56. {
  57. [super viewWillAppear:animated];
  58. [self.navigationController setNavigationBarHidden:YES animated:animated];
  59. }
  60. -(void)viewDidAppear:(BOOL)animated
  61. {
  62. [super viewDidAppear:animated];
  63. // [self.webView reload];
  64. }
  65. - (void)viewDidLoad {
  66. [super viewDidLoad];
  67. self.view.backgroundColor = [UIColor whiteColor];
  68. self.webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, -STATUS_BAR_HEIGHT, WIDTH, HEIGHT-TAB_BAR_HEIGHT+STATUS_BAR_HEIGHT)];
  69. [self.view addSubview: self.webView];
  70. self.webView.scrollView.bounces = NO;
  71. self.webView.delegate = self;
  72. [[LXViewControllerManager shareViewControllerManager] showHudText:nil];
  73. [self webViewFirstRequest];//请求页面数据
  74. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(requestWebView:) name:kRequestWebViewWithUrl object:nil];
  75. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateNotifyState) name:kUpdateNotifyState object:nil];
  76. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(afterReceiveNewMsg) name:kAfterReceiveNewMsg object:nil];
  77. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reloadWebView) name:kReloadWebVIew object:nil];
  78. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(loginOut:) name:kLoginOut object:nil];
  79. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(refreshMine:) name:@"refreshMine" object:nil];
  80. [[AFNetworkReachabilityManager sharedManager] startMonitoring];
  81. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(netReachChanged:) name:AFNetworkingReachabilityDidChangeNotification object:nil];
  82. UIPanGestureRecognizer *recognizer = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(paningGestureReceive:)];
  83. [recognizer delaysTouchesBegan];
  84. [self.view addGestureRecognizer:recognizer];
  85. //手势
  86. [self clearWeb];
  87. }
  88. -(void)moveViewWithX:(float)x
  89. {
  90. CGRect rect = self.view.bounds;
  91. CGFloat width = CGRectGetWidth(rect);
  92. x = x>width?width:x;
  93. x = x<0?0:x;
  94. CGRect frame = self.webView.frame;
  95. frame.origin.x = x;
  96. self.webView.frame = frame;
  97. }
  98. #pragma mark – Gesture Recognizer –
  99. -(void)paningGestureReceive:(UIPanGestureRecognizer *)recoginzer
  100. {
  101. CGRect rect = self.view.bounds;
  102. CGFloat width = CGRectGetWidth(rect);
  103. if (![self.webView canGoBack]) {
  104. NSLog(@"不可返回");
  105. return;
  106. }
  107. NSString *current_url = [self.webView stringByEvaluatingJavaScriptFromString:@"document.location.href"];
  108. NSLog(@"当前页面:%@",current_url);
  109. // NSString *current_url = self.webView.request.URL.absoluteString;
  110. 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/wxkeyset/keyset/index",kHost]]||[current_url isEqualToString:[NSString stringWithFormat:@"%@jyapp/jylab/mainSearch",kHost]]){
  111. return;
  112. }
  113. //https://www.jianyu360.com/jyapp/free/me
  114. //https://www.jianyu360.com/jyapp/jylab/index
  115. //https://www.jianyu360.com/jyapp/wxkeyset/keyset/index
  116. //https://www.jianyu360.com/jyapp/jylab/mainSearch
  117. CGPoint touchPoint = [recoginzer locationInView:[UIApplication sharedApplication].keyWindow];
  118. if (recoginzer.state==UIGestureRecognizerStateBegan) {
  119. _isMoving = YES;
  120. startTouch = touchPoint;
  121. } else if (recoginzer.state==UIGestureRecognizerStateEnded){
  122. if (touchPoint.x - startTouch.x > width*0.125) {
  123. [UIView animateWithDuration:0.3 animations:^{
  124. [self moveViewWithX:width];
  125. [self.webView goBack];
  126. } completion:^(BOOL finished) {
  127. _isMoving = NO;
  128. [self moveViewWithX:0];
  129. }];
  130. } else {
  131. [UIView animateWithDuration:0.3 animations:^{
  132. [self moveViewWithX:0];
  133. } completion:^(BOOL finished) {
  134. _isMoving = NO;
  135. }];
  136. }
  137. return;
  138. } else if (recoginzer.state==UIGestureRecognizerStateCancelled){
  139. [UIView animateWithDuration:0.3 animations:^{
  140. [self moveViewWithX:0];
  141. } completion:^(BOOL finished) {
  142. _isMoving = NO;
  143. }];
  144. return;
  145. }
  146. if (_isMoving) {
  147. [self moveViewWithX:touchPoint.x - startTouch.x];
  148. }
  149. }
  150. // 监控网络状态变化
  151. -(void)netReachChanged:(NSNotification *)notificaition{
  152. NSDictionary *userInfo = notificaition.userInfo;
  153. if ([userInfo[@"AFNetworkingReachabilityNotificationStatusItem"] intValue] == 0 || [userInfo[@"AFNetworkingReachabilityNotificationStatusItem"] intValue] == -1) {
  154. [self addNoNetViews];
  155. }else{
  156. if ([[[NSUserDefaults standardUserDefaults] objectForKey:@"firstLoad"] intValue] == 0) {
  157. [[NSUserDefaults standardUserDefaults] setObject:@"1" forKey:@"firstLoad"];
  158. [self removeNoNetViews];
  159. [self webViewFirstRequest];
  160. }
  161. }
  162. }
  163. // 再次加载页面
  164. -(void)reloadWebView{
  165. [[LXViewControllerManager shareViewControllerManager] showHudText:nil];
  166. if (!self.webView.canGoBack) {
  167. [self webViewFirstRequest];
  168. }else{
  169. [self.webView reload];
  170. }
  171. }
  172. // 首次加载web
  173. -(void)webViewFirstRequest{
  174. NSString *url = [NSString stringWithFormat:@"%@%@", kHost, @"jyapp/free/me"];
  175. // NSString *token = [LXUserDefaults token];
  176. // if (token) {
  177. // url = [url stringByAppendingString:[NSString stringWithFormat:@"?sign=%@&url=/jyapp/jylab/mainSearch&from=restart", token]];
  178. // }
  179. url = [url stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
  180. [self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:url]]];
  181. }
  182. //收到消息退出并重新加载web
  183. -(void)webViewRequestByMsg{
  184. NSString *url = [NSString stringWithFormat:@"%@%@", kHost, @"jyapp/free/kicked"];
  185. url = [url stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
  186. [self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:url]]];
  187. }
  188. -(void)requestWebTime:(NSDictionary *)infoDict
  189. {
  190. NSString * urlStr = [NSString stringWithFormat:@"%@",infoDict[@"url"]];
  191. if([infoDict[@"type"] isEqualToString:@"message"]) {
  192. NSString *url = [NSString stringWithFormat:@"%@",urlStr];
  193. NSArray * array = [url componentsSeparatedByString:@"=="];
  194. url = [array.firstObject stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
  195. [self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:url]]];
  196. [[NSNotificationCenter defaultCenter] postNotificationName:@"kNewWebControllerDismiss" object:nil];
  197. //
  198. }else {
  199. NSString *url = [NSString stringWithFormat:@"%@%@", kHost, urlStr];
  200. url = [url stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
  201. [self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:url]]];
  202. [[NSNotificationCenter defaultCenter] postNotificationName:@"kNewWebControllerDismiss" object:nil];
  203. }
  204. }
  205. //刷新我的
  206. -(void)refreshMine:(NSNotification *)notification{
  207. [self webViewFirstRequest];
  208. }
  209. // 点击通知 跳转到通知内url
  210. -(void)requestWebView:(NSNotification *)notification{
  211. NSDictionary * infoDict = [notification object];
  212. if (!infoDict) {
  213. return;
  214. }
  215. NSString * urlStr = [NSString stringWithFormat:@"%@",infoDict[@"url"]];
  216. if (urlStr) {
  217. if(self.tabBarController.selectedIndex != 3) {
  218. return;
  219. }else {
  220. [self webViewFirstRequest];
  221. }
  222. [[LXViewControllerManager shareViewControllerManager] showHudText:nil];
  223. self.afterOpenPushMessage = YES;
  224. [self performSelector:@selector(requestWebTime:) withObject:infoDict afterDelay:1];
  225. }
  226. }
  227. // 收到通知消息
  228. -(void)afterReceiveNewMsg{
  229. NSLog(@"afterReceiveNewMsg");
  230. JSContext *context = [self.webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
  231. [context evaluateScript:@"afterReceiveNewMsg()"];
  232. }
  233. // 收到退出登录消息
  234. -(void)loginOut:(NSNotification *)notification{
  235. self.signOutContent = notification.object;
  236. if (!self.signOutContent) {
  237. self.signOutContent = @"1";
  238. }
  239. NSString *url = [NSString stringWithFormat:@"%@%@?sign=%@", kHost, @"jyapp/free/signOut", [LXUserDefaults token]];
  240. url = [url stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
  241. UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectZero];
  242. webView.delegate = self;
  243. [self.view addSubview:webView];
  244. [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:url]]];
  245. // [self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:url]]];
  246. [self jsRemoveUserToken:nil];
  247. }
  248. - (void)hideTabBar {
  249. kMainQueue(^{
  250. if (self.tabBarController.tabBar.hidden == YES) {
  251. return;
  252. }
  253. UIView *contentView;
  254. if ( [[self.tabBarController.view.subviews objectAtIndex:0] isKindOfClass:[UITabBar class]] )
  255. contentView = [self.tabBarController.view.subviews objectAtIndex:1];
  256. else
  257. contentView = [self.tabBarController.view.subviews objectAtIndex:0];
  258. 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);
  259. self.tabBarController.tabBar.hidden = YES;
  260. });
  261. }
  262. - (void)showTabBar{
  263. kMainQueue(^{
  264. if (self.tabBarController.tabBar.hidden == NO)
  265. {
  266. return;
  267. }
  268. UIView *contentView;
  269. if ([[self.tabBarController.view.subviews objectAtIndex:0] isKindOfClass:[UITabBar class]])
  270. contentView = [self.tabBarController.view.subviews objectAtIndex:1];
  271. else
  272. contentView = [self.tabBarController.view.subviews objectAtIndex:0];
  273. 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);
  274. self.tabBarController.tabBar.hidden = NO;
  275. });
  276. }
  277. -(void)dealTabBar
  278. {
  279. NSLog(@"刷新第四个页面");
  280. kMainQueue(^{
  281. [self webViewFirstRequest];
  282. });
  283. }
  284. -(void)judgeIsHidden
  285. {
  286. NSString *current_url = [self.webView stringByEvaluatingJavaScriptFromString:@"document.location.href"];
  287. if([current_url isEqualToString:[NSString stringWithFormat:@"%@jyapp/free/me",kHost]]){
  288. [self showTabBar];
  289. self.webView.frame = CGRectMake(0, -STATUS_BAR_HEIGHT, WIDTH, HEIGHT-TAB_BAR_HEIGHT+STATUS_BAR_HEIGHT);
  290. }else {
  291. [self hideTabBar];
  292. self.webView.frame = CGRectMake(0, -STATUS_BAR_HEIGHT, WIDTH, HEIGHT+STATUS_BAR_HEIGHT);
  293. }
  294. }
  295. #pragma mark 捕获js中调用的方法
  296. //捕获js中调用的方法
  297. - (void)webViewDidFinishLoad:(UIWebView *)webView{
  298. [self judgeIsHidden];
  299. [self removeNoNetViews];
  300. [[LXViewControllerManager shareViewControllerManager] hideHud];
  301. JSContext *context = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
  302. // Disable user selection
  303. [webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.style.webkitUserSelect='none';"];
  304. // Disable callout
  305. [webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.style.webkitTouchCallout='none';"];
  306. context[@"JyObj"] = self;
  307. [context evaluateScript:@"afterPageInit()"];
  308. if (self.afterOpenPushMessage) {
  309. self.afterOpenPushMessage = NO;
  310. // [context evaluateScript:@"afterOpenPushMessage()"];
  311. [context evaluateScript:[NSString stringWithFormat:@"afterOpenPushMessage('%d')", [self jsIsCanBack:nil]]];
  312. }
  313. NSString *url = webView.request.URL.absoluteString;
  314. [self doSomeWithLoadUrl:url];
  315. }
  316. -(void)doSomeWithLoadUrl:(NSString *)url{
  317. if (!url) {
  318. return;
  319. }
  320. if ([url containsString:@"signOut"]) { // 收到退出消息后 跳转到登录页面
  321. // [self webViewFirstRequest];
  322. [self webViewRequestByMsg];
  323. }else if ([url containsString:@"/free/login"]){ // 如果通过接收消息 跳转到登录页面 展示消息内容
  324. if (self.signOutContent && ![self.signOutContent isEqualToString:@"1"]) {
  325. [[LXViewControllerManager shareViewControllerManager] showAlertViewWithTitle:@"提示" message:self.signOutContent actions:@[[UIAlertAction actionWithTitle:@"确认" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
  326. self.signOutContent = nil;
  327. }]]];
  328. }else{
  329. self.signOutContent = nil;
  330. }
  331. }
  332. }
  333. -(void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error{
  334. [[LXViewControllerManager shareViewControllerManager] hideHud];
  335. NSString *url = webView.request.URL.absoluteString;
  336. [self doSomeWithLoadUrl:url];
  337. }
  338. -(void)webViewDidStartLoad:(UIWebView *)webView{
  339. // if ([[UIDevice currentDevice].systemVersion floatValue] < 10) {
  340. // [[LXViewControllerManager shareViewControllerManager] hideHud];
  341. // }
  342. }
  343. - (void)didReceiveMemoryWarning {
  344. [super didReceiveMemoryWarning];
  345. [self clearWeb];
  346. // Dispose of any resources that can be recreated.
  347. }
  348. -(void)clearWeb{
  349. NSURLCache * cache = [NSURLCache sharedURLCache];
  350. [cache removeAllCachedResponses];
  351. [cache setDiskCapacity:0];
  352. [cache setMemoryCapacity:0];
  353. }
  354. -(void)addNoNetViews{
  355. kMainQueue(^{
  356. [self removeNoNetViews];
  357. self.noNetView = [NoNetView shareView];
  358. [self.view addSubview:self.noNetView];
  359. });
  360. }
  361. -(void)removeNoNetViews{
  362. if (self.noNetView ) {
  363. [self.noNetView removeFromSuperview];
  364. self.noNetView = nil;
  365. }
  366. }
  367. #pragma mark JS 回调
  368. // 微信登录
  369. -(NSString *)jsLoginByWeixin:(NSString *)str{
  370. if ([LXUserDefaults isInstallWeiXin] != 1) { // 没有安装微信 不走友盟
  371. [[LXViewControllerManager shareViewControllerManager] showHudOnlyText:@"微信登录失败,没有安装微信" delay:1.5];
  372. return nil;
  373. }
  374. kMainQueue(^{
  375. [[UMSocialManager defaultManager] getUserInfoWithPlatform:UMSocialPlatformType_WechatSession currentViewController:self completion:^(id result, NSError *error) {
  376. UMSocialUserInfoResponse *resp = result;
  377. [self dealWXDic:(NSDictionary *)resp.originalResponse];
  378. [[LXViewControllerManager shareViewControllerManager] hideHud];
  379. }];
  380. });
  381. return nil;
  382. }
  383. // 处理微信登录获取到的数据
  384. -(void)dealWXDic:(NSDictionary *)dictionary{
  385. [[LXViewControllerManager shareViewControllerManager] showHudText:nil];
  386. //如果获取到用户信息,即用户点击了“登录”,则进行用户信息获取
  387. if (dictionary.count > 0) {
  388. NSMutableDictionary *dic = [NSMutableDictionary dictionaryWithDictionary:dictionary];
  389. if (dic) {
  390. [dic removeObjectForKey:@"privilege"];
  391. [dic removeObjectForKey:@"language"];
  392. double currDouble = [[NSDate date] timeIntervalSince1970];
  393. [dic setObject:[NSNumber numberWithLong:(long)currDouble] forKey:@"createtime"];
  394. // 拼接标志位
  395. 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"]];
  396. sign = [LXMD5 md532BitLower:sign];
  397. [dic setObject:sign forKey:@"sign"];
  398. NSString *endStr = [[LXViewControllerManager shareViewControllerManager] getJsonStr:dic];
  399. NSData *data = [endStr dataUsingEncoding:NSUTF8StringEncoding];
  400. endStr = [data base64EncodedStringWithOptions:0];
  401. JSContext *context = [self.webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
  402. NSString * textJS1 = [NSString stringWithFormat:@"loginByWeixinCallBack('%@')", endStr];
  403. JSValue *value = [context evaluateScript:textJS1];
  404. NSLog(@"%@", value);
  405. }
  406. }
  407. }
  408. // js 调用分享
  409. -(void)jsShare:(NSString *)type title:(NSString *)title content:(NSString *)content link:(NSString *)link{
  410. UMSocialPlatformType shareType;
  411. if ([type intValue] == 1) { // 微信好友
  412. shareType = UMSocialPlatformType_WechatSession;
  413. }else if ([type intValue] == 2){ /// qq好友
  414. shareType = UMSocialPlatformType_QQ;
  415. }else if ([type intValue] == 3){ // 朋友圈
  416. shareType = UMSocialPlatformType_WechatTimeLine;
  417. }else{
  418. shareType = UMSocialPlatformType_WechatSession;
  419. }
  420. kMainQueue((^{
  421. // 没有安装app 不走分享逻辑
  422. if ([type intValue] == 1 || [type intValue] == 3) {
  423. if ([LXUserDefaults isInstallWeiXin] != 1) {
  424. [[LXViewControllerManager shareViewControllerManager] showHudOnlyText:@"没有安装微信" delay:1.5];
  425. return;
  426. }
  427. }
  428. // 没有安装app 不走分享逻辑
  429. if ([type intValue] == 2) {
  430. if (![[UMSocialManager defaultManager] isInstall:UMSocialPlatformType_QQ]) {
  431. [[LXViewControllerManager shareViewControllerManager] showHudOnlyText:@"没有安装QQ" delay:1.5];
  432. return;
  433. }
  434. }
  435. //创建分享消息对象
  436. UMSocialMessageObject *messageObject = [UMSocialMessageObject messageObject];
  437. //创建网页内容对象
  438. UMShareWebpageObject *shareObject = [UMShareWebpageObject shareObjectWithTitle:title descr:content thumImage:[UIImage imageNamed:@"logo"]];
  439. //设置网页地址
  440. shareObject.webpageUrl = link;
  441. messageObject.shareObject = shareObject;
  442. //调用分享接口
  443. [[UMSocialManager defaultManager] shareToPlatform:shareType messageObject:messageObject currentViewController:self completion:^(id data, NSError *error) {
  444. if (error) {
  445. NSLog(@"22222222%@",error.userInfo);
  446. if (error.userInfo[@"message"] && [error.userInfo[@"message"] containsString:@"Operation is cancel"]) {
  447. [[LXViewControllerManager shareViewControllerManager] showHudOnlyText:@"取消分享" delay:1];
  448. }else{
  449. [[LXViewControllerManager shareViewControllerManager] showHudOnlyText:error.userInfo[@"message"] delay:1];
  450. }
  451. NSString *textJS = [NSString stringWithFormat:@"shareCallBack('%@','%@')",type,@"0"];
  452. JSContext *context = [self.webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
  453. [context evaluateScript:textJS];
  454. }else{
  455. if ([data isKindOfClass:[UMSocialShareResponse class]]) {
  456. UMSocialShareResponse *resp = data;
  457. NSLog(@"33333%@",resp.message);
  458. NSLog(@"44444%@",resp.originalResponse);
  459. NSString *textJS = [NSString stringWithFormat:@"shareCallBack('%@','%@')",type,@"1"];
  460. JSContext *context = [self.webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
  461. [context evaluateScript:textJS];
  462. }else{
  463. UMSocialLogInfo(@"response data is %@",data);
  464. NSLog(@"55555%@",data);
  465. }
  466. }
  467. }];
  468. }));
  469. }
  470. // 登录时获取到令牌 并保存
  471. -(void)jsSaveUserToken:(NSString *)token{
  472. [[LXViewControllerManager shareViewControllerManager] hideHud];
  473. [LXUserDefaults saveToken:token];
  474. }
  475. // 取本地的用户令牌
  476. -(NSString *)jsGetUserToken:(NSString *)str{
  477. return [LXUserDefaults token];
  478. }
  479. // 退出时 清空用户数据
  480. -(void)jsRemoveUserToken:(NSString *)str{
  481. NSLog(@"Mine移除数据");
  482. [LXUserDefaults clearAll];
  483. // [[LXDataBaseManager shareDataBaseManager] clearAll];
  484. }
  485. // 手机通知权限是否打开
  486. -(int)jsCheckNoticePermission:(NSString *)str{
  487. int a = [LXUserDefaults notifyState];
  488. return a;
  489. }
  490. // 跳转到系统设置
  491. -(void)jsOpenSystemNotification:(NSString *)str{
  492. self.updateNotify = YES;
  493. kMainQueue(^{
  494. [[UIApplication sharedApplication]openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
  495. });
  496. }
  497. // 调用js方法 刷新推送权限状态
  498. -(void)updateNotifyState{
  499. if (self.updateNotify) {
  500. self.updateNotify = NO;
  501. JSContext *context = [self.webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
  502. NSString * textJS1 = [NSString stringWithFormat:@"updateNoticeSwitch()"];
  503. [context evaluateScript:textJS1];
  504. }
  505. }
  506. // 获取推送id
  507. -(NSString *)jsGetPushRid:(NSString *)str{
  508. return [LXUserDefaults registrationID];
  509. }
  510. // 按通知取数据
  511. -(NSString *)jsGetMessageList:(NSString *)openid{
  512. NSArray *arr = [[LXDataBaseManager shareDataBaseManager] getMessageWithKey:nil openid:openid fromTable:kNewsTable start:0 length:100];
  513. if (arr.count > 0) {
  514. return [[LXViewControllerManager shareViewControllerManager] getJsonStr:arr];
  515. }
  516. return @"";
  517. }
  518. // 更新消息状态
  519. -(void)jsUpdateMessageState:(NSNumber *)lxID state:(NSNumber *)state{
  520. [[LXDataBaseManager shareDataBaseManager] changeReadedWithID:lxID state:state];
  521. }
  522. // 删除一条数据
  523. -(void)jsDeleteMessageById:(NSNumber *)lxID{
  524. [[LXDataBaseManager shareDataBaseManager] deleteMessage:lxID fromTable:kNewsTable];
  525. }
  526. // 取单条数据
  527. -(NSString *)jsGetMessage:(NSString *)lxID{
  528. return [[LXViewControllerManager shareViewControllerManager] getJsonStr:[[LXDataBaseManager shareDataBaseManager] getMessageWithKey:lxID openid:nil fromTable:kNewsTable start:0 length:0]];
  529. }
  530. // 取未读消息总数
  531. -(int)jsGetUnReadMessageCount:(NSString *)openid{
  532. NSLog(@"openid=%@",openid);
  533. // NSLog(@"%d",[[LXDataBaseManager shareDataBaseManager] getUnReadMessageCount:openid]);
  534. if([[LXDataBaseManager shareDataBaseManager] getUnReadMessageCount:openid] ==0){
  535. //显示
  536. kMainQueue(^{
  537. [self.tabBarController.tabBar hideBadgeOnItemIndex:3];
  538. });
  539. }else {
  540. kMainQueue(^{
  541. [self.tabBarController.tabBar showBadgeOnItemIndex:3];
  542. });
  543. }
  544. return [[LXDataBaseManager shareDataBaseManager] getUnReadMessageCount:openid];
  545. }
  546. // 全部置为已读
  547. -(void)jsUpdateAllUnReadMessage:(NSString *)openid{
  548. [[LXDataBaseManager shareDataBaseManager] updateAllUnReadMessage:openid];
  549. }
  550. // 改变状态栏文字颜色
  551. -(void)jsLightStatusBar:(NSString *)status{
  552. kMainQueue(^{
  553. NSInteger index = 0;
  554. if ([status intValue] == 1) {
  555. index = 1;// hei
  556. }else{
  557. index = 0;// bai
  558. }
  559. [[UIApplication sharedApplication] setStatusBarStyle:index];
  560. });
  561. }
  562. // 打开新页面 加载新web
  563. -(void)jsOpenExternalLink:(NSString *)url title:(NSString *)title{
  564. if (url) {
  565. if ([AFNetworkReachabilityManager sharedManager].networkReachabilityStatus == AFNetworkReachabilityStatusNotReachable || [AFNetworkReachabilityManager sharedManager].networkReachabilityStatus == AFNetworkReachabilityStatusUnknown) {
  566. // [self addNoNetViews];
  567. }
  568. NewWebController *ctr = [[NewWebController alloc] init];
  569. ctr.url = url;
  570. // 有title的话 会显示自定义的导航栏 没有的话不显示导航栏 显示加载进度条
  571. if (!title || [title isEqualToString:@""] || [title isEqualToString:@"undefined"]) {
  572. ctr.titleShow = nil;
  573. }else{
  574. ctr.titleShow = title;
  575. }
  576. kMainQueue(^{
  577. [self presentViewController:ctr animated:NO completion:nil];
  578. });
  579. }
  580. }
  581. // 获取当前版本号
  582. -(NSString *)jsGetVersion:(NSString *)str{
  583. return [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
  584. }
  585. // web是否可退回上页面
  586. -(int)jsIsCanBack:(NSString *)str{
  587. return self.webView.canGoBack ? 1:0;
  588. }
  589. // 弹框
  590. -(void)jsAlert:(NSString *)content{
  591. [[LXViewControllerManager shareViewControllerManager] showAlertViewWithMessage:content];
  592. }
  593. // 是否安装微信
  594. -(int)jsIsInstallWeixin:(NSString *)str{
  595. return [LXUserDefaults isInstallWeiXin];
  596. }
  597. -(void)jsChangeMessageType:(NSString *)link
  598. {
  599. //已读操作处理
  600. NSLog(@"已读操作处理-更改");
  601. [[LXDataBaseManager shareDataBaseManager] changeCatagoryTypeWithURL:link];
  602. }
  603. -(void)jsOpenActivityPage:(NSString *)url rectype:(NSString *)rectype openid:(NSString *)openid
  604. {
  605. NSDictionary * infoDic = @{@"url":url,
  606. @"rectype":rectype,
  607. @"openid":openid,
  608. };
  609. // NSString *textJS = [NSString stringWithFormat:@"messageAccept('%@','%@','%@')",infoDic[@"mid"],infoDic[@"rectype"],infoDic[@"openid"]];
  610. // JSContext *context = [self.webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
  611. // [context evaluateScript:textJS];
  612. //post请求
  613. NSLog(@"%@",[NSString stringWithFormat:@"%@jyapp/free/message/receive",kHost]);
  614. [[LXNetworkManager shareLXNetworkManager]postWithURLStr:[NSString stringWithFormat:@"%@jyapp/free/message/receive",kHost] parameters:infoDic progress:^(NSProgress *progress) {
  615. NSLog(@"成功:%@",progress);
  616. } success:^(id responseObject) {
  617. NSLog(@"responseObject=%@",responseObject);
  618. } failure:^(NSError *error) {
  619. NSLog(@"error=%@",error);
  620. }];
  621. }
  622. -(NSString *)jsGGetCipherText:(NSString *)phone
  623. {
  624. NSDate *date=[NSDate date];
  625. NSDateFormatter *format1=[[NSDateFormatter alloc] init];
  626. [format1 setDateFormat:@"yyyyMMddhhmmss"];
  627. NSString *dateStr;
  628. dateStr=[format1 stringFromDate:date];
  629. NSLog(@"%@",dateStr);
  630. NSString *content = [[NSString stringWithFormat:@"%@_%@",phone,dateStr] stringByAppendingString:[NSString stringWithFormat:@"_%@",[LXMD5 md532BitLower:[NSString stringWithFormat:@"%@&%@",phone,dateStr]]]];
  631. NSData *contentData = [content dataUsingEncoding:NSUTF8StringEncoding];
  632. NSUInteger dataLength = contentData.length;
  633. // 为结束符'\\0' +1
  634. char keyPtr[kKeySize_3 + 1];
  635. memset(keyPtr, 0, sizeof(keyPtr));
  636. [AesKey_3 getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];
  637. // 密文长度 <= 明文长度 + BlockSize
  638. size_t encryptSize = dataLength + kCCBlockSizeAES128;
  639. void *encryptedBytes = malloc(encryptSize);
  640. size_t actualOutSize = 0;
  641. NSData *initVector = [kInitVector_3 dataUsingEncoding:NSUTF8StringEncoding];
  642. CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt,
  643. kCCAlgorithmAES,
  644. kCCOptionPKCS7Padding, // 系统默认使用 CBC,然后指明使用 PKCS7Padding
  645. keyPtr,
  646. kKeySize_3,
  647. initVector.bytes,
  648. contentData.bytes,
  649. dataLength,
  650. encryptedBytes,
  651. encryptSize,
  652. &actualOutSize);
  653. if (cryptStatus == kCCSuccess) {
  654. // 对加密后的数据进行 base64 编码
  655. return [[NSData dataWithBytesNoCopy:encryptedBytes length:actualOutSize] base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithLineFeed];
  656. }
  657. free(encryptedBytes);
  658. return nil;
  659. }
  660. -(void)jsBackUrl:(NSString*)str
  661. {
  662. NSLog(@"Mine返回首页%@",str);
  663. if([str isEqualToString:@"H"]) {
  664. //测试返回首页
  665. kMainQueue(^{
  666. AppDelegate *delegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
  667. JYTabBarController *tab = (JYTabBarController *)delegate.window.rootViewController;
  668. tab.selectedIndex = 0;
  669. [[NSNotificationCenter defaultCenter] postNotificationName:@"changeItems" object:nil userInfo:@{@"item_index":@"0"}];
  670. [self dealTabBar];
  671. });
  672. }
  673. }
  674. -(void)jsLoginSuccess:(NSString*)status
  675. {
  676. NSLog(@"Mine登录成功提示");
  677. if([status isEqualToString:@"S"]) {
  678. kMainQueue(^{
  679. AppDelegate *delegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
  680. JYTabBarController *tab = (JYTabBarController *)delegate.window.rootViewController;
  681. tab.selectedIndex = 0;
  682. [[NSNotificationCenter defaultCenter] postNotificationName:@"changeItems" object:nil userInfo:@{@"item_index":@"5"}];
  683. });
  684. }else {
  685. }
  686. }
  687. -(void)jsHiddenBottom:(NSString *)hidden
  688. {
  689. NSLog(@"让我展示隐藏bottom==%@",hidden);
  690. if([hidden integerValue]==0) {
  691. [self hideTabBar];
  692. kMainQueue(^{
  693. self.webView.frame = CGRectMake(0, -STATUS_BAR_HEIGHT, WIDTH, HEIGHT+STATUS_BAR_HEIGHT);
  694. });
  695. }else {
  696. [self showTabBar];
  697. kMainQueue(^{
  698. self.webView.frame = CGRectMake(0, -STATUS_BAR_HEIGHT, WIDTH, HEIGHT-TAB_BAR_HEIGHT+STATUS_BAR_HEIGHT);
  699. });
  700. }
  701. }
  702. /*
  703. #pragma mark - Navigation
  704. // In a storyboard-based application, you will often want to do a little preparation before navigation
  705. - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
  706. // Get the new view controller using [segue destinationViewController].
  707. // Pass the selected object to the new view controller.
  708. }
  709. */
  710. @end