BGUMengShareManager.m 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343
  1. //
  2. // BGUMengShareManager.m
  3. // BuguLive
  4. //
  5. // Created by xfg on 2017/3/13.
  6. // Copyright © 2017年 xfg. All rights reserved.
  7. //
  8. #import "BGUMengShareManager.h"
  9. #import "GlobalVariables.h"
  10. @interface BGUMengShareManager()<UMSocialShareMenuViewDelegate>
  11. {
  12. UIViewController *_showController;
  13. NSMutableArray *_umengSnsArray;
  14. }
  15. @end
  16. @implementation BGUMengShareManager
  17. BogoSingletonM(Instance);
  18. - (id)init
  19. {
  20. @synchronized (self)
  21. {
  22. self = [super init];
  23. if (self)
  24. {
  25. _umengSnsArray = [NSMutableArray array];
  26. if (self.BuguLive.appModel.wx_app_api == 1)
  27. {
  28. [_umengSnsArray addObject:@(UMSocialPlatformType_WechatSession)];
  29. [_umengSnsArray addObject:@(UMSocialPlatformType_WechatTimeLine)];
  30. }
  31. if (self.BuguLive.appModel.qq_app_api == 1)
  32. {
  33. [_umengSnsArray addObject:@(UMSocialPlatformType_QQ)];
  34. [_umengSnsArray addObject:@(UMSocialPlatformType_Qzone)];
  35. }
  36. if (self.BuguLive.appModel.sina_app_api == 1)
  37. {
  38. [_umengSnsArray addObject:@(UMSocialPlatformType_Sina)];
  39. }
  40. if(self.BuguLive.appModel.fb_app_api == 1)
  41. {
  42. [_umengSnsArray addObject:@(UMSocialPlatformType_Facebook)];
  43. }
  44. if ([_umengSnsArray count])
  45. {
  46. [UMSocialUIManager setPreDefinePlatforms:_umengSnsArray];
  47. //设置分享面板的显示和隐藏的代理回调
  48. [UMSocialUIManager setShareMenuViewDelegate:self];
  49. }
  50. }
  51. return self;
  52. }
  53. }
  54. /**
  55. * 分享
  56. * 多图分享,items里面直接放图片
  57. * 分享链接
  58. * NSString *textToShare = @"mq分享";
  59. * UIImage *imageToShare = [UIImage imageNamed:@"imageName"];
  60. * NSURL *urlToShare = [NSURL URLWithString:@"https:www.baidu.com"];
  61. * NSArray *items = @[urlToShare,textToShare,imageToShare];
  62. */
  63. - (void)yoShare:(NSArray *)items success:(CommonBlock)successBlock fail:(CommonBlock)failBlock{
  64. if (0 == items.count) {
  65. return;
  66. }
  67. UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:items applicationActivities:nil];
  68. if (@available(iOS 11.0, *)) {
  69. //UIActivityTypeMarkupAsPDF是在iOS 11.0 之后才有的
  70. activityVC.excludedActivityTypes = @[UIActivityTypeMessage, UIActivityTypeMail, UIActivityTypeOpenInIBooks, UIActivityTypeMarkupAsPDF];
  71. }else if (@available(iOS 9.0, *)){
  72. //UIActivityTypeOpenInIBooks是在iOS 9.0 之后才有的
  73. activityVC.excludedActivityTypes = @[UIActivityTypeMessage, UIActivityTypeMail, UIActivityTypeOpenInIBooks];
  74. }else{
  75. activityVC.excludedActivityTypes = @[UIActivityTypeMessage, UIActivityTypeMail];
  76. }
  77. activityVC.completionWithItemsHandler = ^(UIActivityType _Nullable activityType, BOOL completed, NSArray * _Nullable returnedItems, NSError * _Nullable activityError) {
  78. if (completed) {
  79. if (successBlock) {
  80. // NSNumber *codeNum = [NSNumber numberWithInteger:YoErrorCodeSuccess];
  81. // NSDictionary *result = @{RCODEKEY:codeNum, RMSGKEY:SuccessMsg, METHODKEY:SysShareMethod};
  82. // successBlock(result);
  83. }
  84. }else{
  85. // if (failBlock) {
  86. // NSNumber *codeNum = [NSNumber numberWithInteger:YoErrorCodeShareFail];
  87. // NSDictionary *result = @{RCODEKEY:codeNum, RMSGKEY:ShareFailMsg, METHODKEY:SysShareMethod};
  88. // failBlock(result);
  89. // }
  90. }
  91. };
  92. //这儿一定要做iPhone与iPad的判断,因为这儿只有iPhone可以present,iPad需pop,所以这儿actVC.popoverPresentationController.sourceView = self.view;在iPad下必须有,不然iPad会crash,self.view你可以换成任何view,你可以理解为弹出的窗需要找个依托。
  93. UIViewController *vc = [UIApplication sharedApplication].keyWindow.rootViewController;
  94. if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
  95. activityVC.popoverPresentationController.sourceView = vc.view;
  96. activityVC.popoverPresentationController.sourceRect = CGRectMake([UIScreen mainScreen].bounds.size.width/2, [UIScreen mainScreen].bounds.size.height, 0, 0);
  97. [vc presentViewController:activityVC animated:YES completion:nil];
  98. }else{
  99. [vc presentViewController:activityVC animated:YES completion:nil];
  100. }
  101. }
  102. #pragma mark 弹出分享面板
  103. - (void)showShareViewInControllr:(UIViewController *)vc shareModel:(ShareModel *)shareModel succ:(FWUMengSuccBlock)succ failed:(FWErrorBlock)failed
  104. {
  105. [[BGHUDHelper sharedInstance] syncLoading];
  106. //改为自带分享
  107. NSString *textToShare = [NSString stringWithFormat:@"%@ %@",shareModel.share_title,shareModel.share_url];
  108. UIImage *imageToShare = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:shareModel.share_imageUrl]]];
  109. // NSURL *urlToShare = [NSURL URLWithString:@"https:www.baidu.com"];
  110. //imageToShare
  111. if(imageToShare == nil)
  112. {
  113. imageToShare = [UIImage new];
  114. }
  115. NSArray *items = @[textToShare,imageToShare];
  116. [self yoShare:items success:^(id selfPtr) {
  117. } fail:^(id selfPtr) {
  118. }];
  119. [[BGHUDHelper sharedInstance] syncStopLoading];
  120. // //设置文本
  121. // messageObject.text = [NSString stringWithFormat:@"%@,%@",shareModel.share_title,shareModel.share_url];
  122. //
  123. //创建图片内容对象
  124. // UMShareImageObject *shareObject = [[UMShareImageObject alloc] init];
  125. // //如果有缩略图,则设置缩略图
  126. // shareObject.thumbImage = shareModel.share_imageUrl;
  127. // [shareObject setShareImage:shareModel.share_imageUrl];
  128. //
  129. // //分享消息对象设置分享内容对象
  130. // messageObject.shareObject = shareObject;
  131. return;
  132. if ([_umengSnsArray count] == 0)
  133. {
  134. if (failed)
  135. {
  136. failed(FWCode_Normal_Error, ASLocalizedString(@"分享失败"));
  137. }
  138. return;
  139. }
  140. _showController = vc;
  141. [UMSocialShareUIConfig shareInstance].sharePageGroupViewConfig.sharePageGroupViewPostionType = UMSocialSharePageGroupViewPositionType_Bottom;
  142. [UMSocialShareUIConfig shareInstance].sharePageScrollViewConfig.shareScrollViewPageItemStyleType = UMSocialPlatformItemViewBackgroudType_None;
  143. __weak typeof(self) ws = self;
  144. [UMSocialUIManager showShareMenuViewInWindowWithPlatformSelectionBlock:^(UMSocialPlatformType platformType, NSDictionary *userInfo) {
  145. //在回调里面获得点击的
  146. if (platformType == UMSocialPlatformType_UserDefine_Begin+2)
  147. {
  148. NSLog(ASLocalizedString(@"点击演示添加Icon后该做的操作"));
  149. }
  150. else
  151. {
  152. [ws shareTo:vc platformType:platformType shareModel:shareModel succ:succ failed:failed];
  153. }
  154. }];
  155. }
  156. #pragma mark 根据分享类型进行分享
  157. - (void)shareTo:(UIViewController *)vc platformType:(UMSocialPlatformType)platformType shareModel:(ShareModel *)shareModel succ:(FWUMengSuccBlock)succ failed:(FWErrorBlock)failed
  158. {
  159. if ([_umengSnsArray count] == 0)
  160. {
  161. if (failed)
  162. {
  163. failed(FWCode_Normal_Error, ASLocalizedString(@"分享失败"));
  164. }
  165. return;
  166. }
  167. //创建分享消息对象
  168. UMSocialMessageObject *messageObject = [UMSocialMessageObject messageObject];
  169. if (UMSocialPlatformType_Sina == platformType)
  170. {
  171. //设置文本
  172. messageObject.text = [NSString stringWithFormat:@"%@,%@",shareModel.share_title,shareModel.share_url];
  173. //创建图片内容对象
  174. UMShareImageObject *shareObject = [[UMShareImageObject alloc] init];
  175. //如果有缩略图,则设置缩略图
  176. shareObject.thumbImage = shareModel.share_imageUrl;
  177. [shareObject setShareImage:shareModel.share_imageUrl];
  178. //分享消息对象设置分享内容对象
  179. messageObject.shareObject = shareObject;
  180. }
  181. else
  182. {
  183. //创建网页内容对象
  184. UMShareWebpageObject *shareObject = [UMShareWebpageObject shareObjectWithTitle:shareModel.share_title descr:shareModel.share_content thumImage:shareModel.share_imageUrl];
  185. //设置网页地址
  186. shareObject.webpageUrl = shareModel.share_url;
  187. shareObject.thumbImage = shareModel.share_imageUrl;
  188. //分享消息对象设置分享内容对象
  189. messageObject.shareObject = shareObject;
  190. }
  191. __weak typeof(self) ws = self;
  192. //调用分享接口
  193. [[UMSocialManager defaultManager] shareToPlatform:platformType messageObject:messageObject currentViewController:vc completion:^(id data, NSError *error) {
  194. if (error) {
  195. [BGHUDHelper alert:error.description];
  196. UMSocialLogInfo(@"************Share fail with error %@*********",error);
  197. if (failed)
  198. {
  199. failed(FWCode_Normal_Error, ASLocalizedString(@"分享失败"));
  200. }
  201. }
  202. else
  203. {
  204. if ([data isKindOfClass:[UMSocialShareResponse class]])
  205. {
  206. UMSocialShareResponse *resp = data;
  207. //分享结果消息
  208. UMSocialLogInfo(@"response message is %@",resp.message);
  209. //第三方原始返回的数据
  210. UMSocialLogInfo(@"response originalResponse data is %@",resp.originalResponse);
  211. if (shareModel.isNotifiService)
  212. {
  213. [ws didFinishGetUMSocialDataInViewController:resp shareModel:shareModel];
  214. }
  215. if (succ)
  216. {
  217. succ(resp);
  218. }
  219. }
  220. else
  221. {
  222. UMSocialLogInfo(@"response data is %@",data);
  223. if (failed)
  224. {
  225. failed(FWCode_Normal_Error, ASLocalizedString(@"分享失败"));
  226. }
  227. }
  228. }
  229. }];
  230. }
  231. #pragma mark 分享成功后通知服务端
  232. - (void)didFinishGetUMSocialDataInViewController:(UMSocialShareResponse *)response shareModel:(ShareModel *)shareModel
  233. {
  234. NSInteger platformName = response.platformType;
  235. NSString *platformNameStr;
  236. NSMutableDictionary *mDict = [NSMutableDictionary dictionary];
  237. [mDict setObject:@"user" forKey:@"ctl"];
  238. [mDict setObject:@"share" forKey:@"act"];
  239. if (platformName == UMSocialPlatformType_WechatSession)
  240. { //微信好友
  241. [mDict setObject:@"WEIXIN" forKey:@"type"];
  242. platformNameStr = ASLocalizedString(@"微信");
  243. }
  244. else if (platformName == UMSocialPlatformType_WechatTimeLine)
  245. { //朋友圈
  246. [mDict setObject:@"WEIXIN_CIRCLE" forKey:@"type"];
  247. platformNameStr = ASLocalizedString(@"微信朋友圈");
  248. }
  249. else if (platformName == UMSocialPlatformType_QQ)
  250. { //QQ
  251. [mDict setObject:@"QQ" forKey:@"type"];
  252. platformNameStr = @"QQ";
  253. }
  254. else if (platformName == UMSocialPlatformType_Qzone)
  255. { //QQ空间
  256. [mDict setObject:@"QZONE" forKey:@"type"];
  257. platformNameStr = ASLocalizedString(@"QQ空间");
  258. }
  259. else if (platformName == UMSocialPlatformType_Sina)
  260. { //新浪微博
  261. [mDict setObject:@"SINA" forKey:@"type"];
  262. platformNameStr = ASLocalizedString(@"新浪微博");
  263. }
  264. [mDict setObject:shareModel.roomIDStr forKey:@"room_id"];
  265. NSString *livingMessage = [NSString stringWithFormat:ASLocalizedString(@"%@ 分享了直播"), [[IMAPlatform sharedInstance].host imUserName]];
  266. SendCustomMsgModel *sendCustomMsgModel = [[SendCustomMsgModel alloc] init];
  267. sendCustomMsgModel.msgType = MSG_LIVING_MESSAGE;
  268. sendCustomMsgModel.msg = livingMessage;
  269. sendCustomMsgModel.chatGroupID = shareModel.imChatIDStr;
  270. [[BGIMMsgHandler sharedInstance] sendCustomGroupMsg:sendCustomMsgModel succ:nil fail:nil];
  271. [[NetHttpsManager manager] POSTWithParameters:mDict SuccessBlock:^(NSDictionary *responseJson)
  272. {
  273. if ([responseJson toInt:@"status"] == 1)
  274. {
  275. if ([responseJson toInt:@"share_award"] > 0)
  276. {
  277. [FanweMessage alertHUD:[responseJson toString:@"share_award_info"]];
  278. }
  279. }
  280. } FailureBlock:^(NSError *error) {
  281. }];
  282. }
  283. #pragma mark - UMSocialShareMenuViewDelegate
  284. - (void)UMSocialShareMenuViewDidAppear
  285. {
  286. NSLog(@"UMSocialShareMenuViewDidAppear");
  287. }
  288. - (void)UMSocialShareMenuViewDidDisappear
  289. {
  290. NSLog(@"UMSocialShareMenuViewDidDisappear");
  291. }
  292. - (UIView*)UMSocialParentView:(UIView*)defaultSuperView
  293. {
  294. return _showController.view;
  295. }
  296. @end