BGIMLoginManager.m 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404
  1. //
  2. // BGIMLoginManager.m
  3. // BuguLive
  4. //
  5. // Created by xfg on 2017/1/11.
  6. // Copyright © 2017年 xfg. All rights reserved.
  7. //
  8. #import "BGIMLoginManager.h"
  9. #import <TIMPush/TIMPush.h>
  10. @implementation BGIMLoginManager
  11. BogoSingletonM(Instance);
  12. - (id)init
  13. {
  14. @synchronized (self)
  15. {
  16. self = [super init];
  17. if (self)
  18. {
  19. BOOL isAutoLogin = [IMAPlatform isAutoLogin];
  20. if (!_loginParam && isAutoLogin)
  21. {
  22. _loginParam = [IMALoginParam loadFromLocal];
  23. }
  24. else
  25. {
  26. _loginParam = [[IMALoginParam alloc] init];
  27. }
  28. }
  29. return self;
  30. }
  31. }
  32. /**
  33. 获取UserSig
  34. @param succ 成功回调
  35. @param failed 失败回调
  36. */
  37. - (void)getUserSig:(FWVoidBlock)succ failed:(FWErrorBlock)failed
  38. {
  39. NSMutableDictionary *mDict = [NSMutableDictionary dictionary];
  40. [mDict setObject:@"user" forKey:@"ctl"];
  41. [mDict setObject:@"usersig" forKey:@"act"];
  42. FWWeakify(self)
  43. [self.httpsManager POSTWithParameters:mDict SuccessBlock:^(NSDictionary *responseJson) {
  44. FWStrongify(self)
  45. self.loginParam.userSig = [responseJson objectForKey:@"usersig"];
  46. self.loginParam.tokenTime = [[NSDate date] timeIntervalSince1970];
  47. if (![BGUtils isBlankString:self.loginParam.userSig])
  48. {
  49. [self loginImSDK:NO succ:^{
  50. if (succ)
  51. {
  52. succ();
  53. }
  54. } failed:^(int errId, NSString *errMsg) {
  55. if (failed)
  56. {
  57. failed(FWCode_Normal_Error, ASLocalizedString(@"登录IMSDK失败"));
  58. }
  59. }];
  60. }
  61. else
  62. {
  63. [FanweMessage alert:ASLocalizedString(@"获取签名为空")];
  64. if (failed)
  65. {
  66. failed(FWCode_Normal_Error, ASLocalizedString(@"获取签名为空"));
  67. }
  68. }
  69. } FailureBlock:^(NSError *error) {
  70. [FanweMessage alert:ASLocalizedString(@"获取签名失败,请稍后尝试")];
  71. if (failed)
  72. {
  73. failed(FWCode_Normal_Error, ASLocalizedString(@"请求网络失败"));
  74. }
  75. }];
  76. }
  77. #pragma mark - 登录IMSDK
  78. - (void)loginImSDK:(BOOL)isShowHud succ:(FWVoidBlock)succ failed:(FWErrorBlock)failed
  79. {
  80. BOOL isAutoLogin = [IMAPlatform isAutoLogin];
  81. if (!_loginParam && isAutoLogin)
  82. {
  83. _loginParam = [IMALoginParam loadFromLocal];
  84. }
  85. [IMAPlatform configWith:_loginParam.config];
  86. if ([_loginParam isVailed])
  87. {
  88. dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
  89. [self doLogin:isShowHud succ:succ failed:failed];
  90. });
  91. }
  92. }
  93. #pragma mark 登录IMSDK
  94. - (void)doLogin:(BOOL)isShowHud succ:(FWVoidBlock)succ failed:(FWErrorBlock)failed
  95. {
  96. if ([_loginParam isExpired])
  97. {
  98. [[AppDelegate sharedAppDelegate] enterLoginUI];
  99. if (failed)
  100. {
  101. failed(1, ASLocalizedString(@"过期,重新登录"));
  102. }
  103. return;
  104. }
  105. if (_isIMSDKOK || _isLogingIMSDK)
  106. {
  107. if (failed)
  108. {
  109. failed(0, ASLocalizedString(@"已经登录或者正在登录"));
  110. }
  111. return;
  112. }
  113. _isLogingIMSDK = YES;
  114. if (isShowHud)
  115. {
  116. [self showMyHud];
  117. [self performSelector:@selector(hideMyHud) withObject:nil afterDelay:5];
  118. }
  119. FWWeakify(self)
  120. // __weak IMAPlatform *ws = self;
  121. [[V2TIMManager sharedInstance] login:_loginParam.identifier userSig:_loginParam.userSig succ:^{
  122. FWStrongify(self)
  123. fwwo.isLogingIMSDK = NO;
  124. fwwo.isIMSDKOK = YES;
  125. [fwwo.loginParam saveToLocal];
  126. [[IMAPlatform sharedInstance] configOnEnterMainUIWith:_loginParam];
  127. [IMAPlatform setAutoLogin:YES];
  128. [BogoNetwork shareInstance].uid = _loginParam.identifier;
  129. [AppViewModel userStateChange:@"Login"];
  130. [AppViewModel updateApnsCode];
  131. [fwwo enterBigGroup];
  132. [fwwo hideMyHud];
  133. [TIMPushManager registerPush:TXSDKAppID appKey:TXSDKAppIDKey succ:^(NSData * _Nonnull deviceToken) {
  134. NSLog(@"pushdeviceToken%@",deviceToken);
  135. } fail:^(int code, NSString * _Nonnull desc) {
  136. }];
  137. [TIMPushManager disablePostNotificationInForeground:YES];
  138. // GlobalVariables *BuguLive = [GlobalVariables sharedInstance];
  139. // [self onReportToken:BuguLive.new_deviceToken];
  140. if (succ)
  141. {
  142. succ();
  143. }
  144. } fail:^(int code3, NSString *desc3) {
  145. // DebugLog(@"TIMLogin Failed: code=%d err=%@", code, desc);
  146. // if (code == kEachKickErrorCode)
  147. // {
  148. // // 互踢重联
  149. // // 重新再登录一次
  150. // [ws offlineKicked:param succ:succ fail:fail];
  151. // }
  152. // else
  153. // {
  154. FWStrongify(self)
  155. fwwo.isLogingIMSDK = NO;
  156. [fwwo hideMyHud];
  157. [FanweMessage alert:[NSString stringWithFormat:ASLocalizedString(@"登录IMSDK错误码: %d %@"),code3,desc3]];
  158. if (failed)
  159. {
  160. failed(code3, desc3);
  161. }
  162. // }
  163. }];
  164. // [[IMAPlatform sharedInstance] login:_loginParam succ:^{
  165. //
  166. // FWStrongify(self)
  167. //
  168. // self.isLogingIMSDK = NO;
  169. // self.isIMSDKOK = YES;
  170. //
  171. // [self.loginParam saveToLocal];
  172. // [[IMAPlatform sharedInstance] configOnEnterMainUIWith:self.loginParam];
  173. //
  174. // [AppViewModel userStateChange:@"Login"];
  175. // [AppViewModel updateApnsCode];
  176. // [self enterBigGroup];
  177. //
  178. // [self hideMyHud];
  179. //
  180. // if (succ)
  181. // {
  182. // succ();
  183. // }
  184. //
  185. // } fail:^(int code, NSString *msg) {
  186. //
  187. // FWStrongify(self)
  188. //
  189. // self.isLogingIMSDK = NO;
  190. //
  191. // [self hideMyHud];
  192. //
  193. // if (failed)
  194. // {
  195. // failed(code, msg);
  196. // }
  197. //
  198. //#ifdef DEBUG
  199. // [FanweMessage alert:[NSString stringWithFormat:ASLocalizedString(@"登录IMSDK错误码: %d %@"),code,msg]];
  200. //#endif
  201. //
  202. // }];
  203. }
  204. //点击通知栏消息回调
  205. - (void)onNotificationClicked:(NSString *)ext{
  206. }
  207. - (void)onReportToken:(NSData *)deviceToken
  208. {
  209. if (deviceToken) {
  210. V2TIMAPNSConfig *confg = [[V2TIMAPNSConfig alloc] init];
  211. // 企业证书 ID
  212. // 用户自己到苹果注册开发者证书,在开发者账号中下载并生成证书(p12 文件),将生成的 p12 文件传到腾讯证书管理控制台,
  213. // 控制台会自动生成一个证书 ID,将证书 ID 传入一下 busiId 参数中。
  214. confg.businessID = 16705;// self.apnsCertificateID;
  215. confg.token = deviceToken;
  216. confg.isTPNSToken = NO;
  217. [[V2TIMManager sharedInstance] setAPNS:confg succ:^{
  218. NSLog(@"%s, succ", __func__);
  219. } fail:^(int code, NSString *msg) {
  220. NSLog(@"%s, fail, %d, %@", __func__, code, msg);
  221. }];
  222. }
  223. }
  224. #pragma mark 加入大群
  225. - (void)enterBigGroup
  226. {
  227. if (![BGUtils isBlankString:self.BuguLive.appModel.full_group_id])
  228. {
  229. FWWeakify(self)
  230. [[V2TIMManager sharedInstance] joinGroup:self.BuguLive.appModel.full_group_id msg:nil succ:^{
  231. NSLog(ASLocalizedString(@"加入全员广播大群成功"));
  232. FWStrongify(self)
  233. [self obtainAesKeyFromFullGroup:nil error:nil];
  234. } fail:^(int code, NSString *desc) {
  235. // NSLog(ASLocalizedString(@"加入全员广播大群失败,错误码:%d,错误原因:%@"),code,msg);
  236. }];
  237. // [[TIMGroupManager sharedInstance] joinGroup:self.BuguLive.appModel.full_group_id msg:nil succ:^{
  238. // NSLog(ASLocalizedString(@"加入全员广播大群成功"));
  239. //
  240. // FWStrongify(self)
  241. // [self obtainAesKeyFromFullGroup:nil error:nil];
  242. //
  243. // } fail:^(int code, NSString *msg) {
  244. // NSLog(ASLocalizedString(@"加入全员广播大群失败,错误码:%d,错误原因:%@"),code,msg);
  245. // }];
  246. }
  247. }
  248. - (void)obtainAesKeyFromFullGroup:(FWVoidBlock)succBlock error:(FWErrorBlock)errorBlock
  249. {
  250. if (!self.isIMSDKOK)
  251. {
  252. if (errorBlock)
  253. {
  254. errorBlock(FWCode_Normal_Error, ASLocalizedString(@"IM还未登录成功"));
  255. }
  256. return;
  257. }
  258. if ([BGUtils isBlankString:self.BuguLive.appModel.full_group_id])
  259. {
  260. if (errorBlock)
  261. {
  262. errorBlock(FWCode_Normal_Error, ASLocalizedString(@"还未获取到全员广播大群ID"));
  263. }
  264. return;
  265. }
  266. if (_isObtainAESKeyIng)
  267. {
  268. if (errorBlock)
  269. {
  270. errorBlock(FWCode_Normal_Error, ASLocalizedString(@"请求中。。。"));
  271. }
  272. return;
  273. }
  274. else
  275. {
  276. _isObtainAESKeyIng = YES;
  277. [self showMyHud];
  278. }
  279. TIMGroupManager *groupManager = [TIMGroupManager sharedInstance];
  280. [self performSelector:@selector(hideMyHud) withObject:nil afterDelay:5];
  281. FWWeakify(self)
  282. [groupManager getGroupInfo:@[self.BuguLive.appModel.full_group_id] succ:^(NSArray *arr) {
  283. FWStrongify(self)
  284. self.isObtainAESKeyIng = NO;
  285. TIMGroupInfo *tmpGroupInfo = [arr firstObject];
  286. NSString *introduction = tmpGroupInfo.introduction;
  287. if (![BGUtils isBlankString:introduction])
  288. {
  289. if (![introduction isEqualToString:[GlobalVariables sharedInstance].aesKeyStr])
  290. {
  291. [[GlobalVariables sharedInstance] storageAppAESKey:introduction];
  292. [[NSNotificationCenter defaultCenter] postNotificationName:kRefreshHome object:nil userInfo:nil];
  293. }
  294. }
  295. [self hideMyHud];
  296. if (succBlock)
  297. {
  298. succBlock();
  299. }
  300. } fail:^(int code, NSString *msg) {
  301. FWStrongify(self)
  302. self.isObtainAESKeyIng = NO;
  303. [self hideMyHud];
  304. if (errorBlock)
  305. {
  306. errorBlock(FWCode_Normal_Error, ASLocalizedString(@"获取到全员广播大群信息失败"));
  307. }
  308. }];
  309. }
  310. #pragma mark
  311. - (MBProgressHUD *)proHud
  312. {
  313. if (!_proHud)
  314. {
  315. _proHud = [MBProgressHUD showHUDAddedTo:[AppDelegate sharedAppDelegate].window animated:YES];
  316. _proHud.mode = MBProgressHUDModeIndeterminate;
  317. }
  318. return _proHud;
  319. }
  320. - (void)hideMyHud
  321. {
  322. if (_proHud)
  323. {
  324. [_proHud hideAnimated:YES];
  325. _proHud = nil;
  326. }
  327. }
  328. - (void)showMyHud
  329. {
  330. // [self.proHud showAnimated:YES];
  331. }
  332. @end