KSUMShareManager.m 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321
  1. //
  2. // KSUMShareManager.m
  3. // KulexiuForTeacher
  4. //
  5. // Created by 王智 on 2022/6/14.
  6. //
  7. #import "KSUMShareManager.h"
  8. #import <UMShare/UMShare.h>
  9. #import <UShareUI/UShareUI.h>
  10. #import "TZImageManager.h"
  11. #import "KSImageShareViewController.h"
  12. @interface KSUMShareManager ()<UMSocialShareMenuViewDelegate>
  13. @property (nonatomic, copy) KSShareActionCallback callback;
  14. @property (nonatomic, strong) NSString *shareTitle;
  15. @property (nonatomic, strong) NSString *shareMessage;
  16. @property (nonatomic, strong) NSString *shareUrl;
  17. @property (nonatomic, strong) UIImage *shareImage;
  18. @property (nonatomic, strong) UIViewController *displayCtrl;
  19. @property (nonatomic, assign) KSSHARETYPE shareType;
  20. @property (nonatomic, strong) NSString *saveLinkUrl;
  21. @property (nonatomic, strong) id thumImage;
  22. @end
  23. @implementation KSUMShareManager
  24. + (instancetype)shareInstance {
  25. KSUMShareManager *manager = [[self alloc] init];
  26. return manager;
  27. }
  28. + (instancetype)shareInstanceWithImage:(UIImage *)image url:(NSString *)url shareTitle:(NSString *)shareTitle descMessage:(NSString *)descMessage shareType:(KSSHARETYPE)type showInView:(nonnull UIViewController *)ctrl callback:(KSShareActionCallback)callback {
  29. KSUMShareManager *manager = [[self alloc] init];
  30. manager.shareType = type;
  31. manager.shareImage = image;
  32. manager.shareUrl = url;
  33. manager.shareTitle = shareTitle;
  34. manager.shareMessage = descMessage;
  35. manager.displayCtrl = ctrl;
  36. if (callback) {
  37. manager.callback = callback;
  38. }
  39. [UMSocialUIManager removeCustomPlatformWithoutFilted:UMSocialPlatformType_UserDefine_Begin+2];
  40. [manager openShareView];
  41. return manager;
  42. }
  43. + (instancetype)shareInstanceShowWithImage:(UIImage *)image showSaveLink:(BOOL)showSaveLink saveLinkUrl:(NSString *)saveLinkUrl url:(NSString *)url shareTitle:(NSString *)shareTitle descMessage:(NSString *)descMessage shareType:(KSSHARETYPE)type showInView:(UIViewController *)ctrl callback:(KSShareActionCallback)callback {
  44. KSUMShareManager *manager = [[self alloc] init];
  45. manager.shareType = type;
  46. manager.shareImage = image;
  47. manager.shareUrl = url;
  48. manager.shareTitle = shareTitle;
  49. manager.displayCtrl = ctrl;
  50. manager.shareMessage = descMessage;
  51. if (callback) {
  52. manager.callback = callback;
  53. }
  54. manager.saveLinkUrl = saveLinkUrl;
  55. if (showSaveLink) {
  56. [UMSocialUIManager addCustomPlatformWithoutFilted:UMSocialPlatformType_UserDefine_Begin+2 withPlatformIcon:[UIImage imageNamed:@"share_saveLink"] withPlatformName:@"复制链接"];
  57. }
  58. else {
  59. [UMSocialUIManager removeCustomPlatformWithoutFilted:UMSocialPlatformType_UserDefine_Begin+2];
  60. }
  61. [manager openShareView];
  62. return manager;
  63. }
  64. - (void)openShareView {
  65. MJWeakSelf;
  66. [UMSocialUIManager setShareMenuViewDelegate:self];
  67. [UMSocialUIManager showShareMenuViewInWindowWithPlatformSelectionBlock:^(UMSocialPlatformType platformType, NSDictionary *userInfo) {
  68. if (platformType == UMSocialPlatformType_UserDefine_Begin+1) { // 分享到群组
  69. if (weakSelf.shareType == KSSHARETYPE_IMAGE) {
  70. KSImageShareViewController *shareGroupCtrl = [[KSImageShareViewController alloc] init];
  71. shareGroupCtrl.shareImage = self.shareImage;
  72. [shareGroupCtrl shareGroupCallback:^(BOOL isSuccess, NSString *descMsg) {
  73. if (weakSelf.callback) {
  74. weakSelf.callback(isSuccess,descMsg);
  75. [LOADING_MANAGER MBShowAUTOHidingInWindow:descMsg];
  76. }
  77. }];
  78. [weakSelf.displayCtrl.navigationController pushViewController:shareGroupCtrl animated:YES];
  79. }
  80. else {
  81. if (weakSelf.callback) {
  82. weakSelf.callback(NO,@"仅支持图片分享到群组");
  83. [LOADING_MANAGER MBShowAUTOHidingInWindow:@"仅支持图片分享到群组"];
  84. }
  85. }
  86. }
  87. else if (platformType == UMSocialPlatformType_UserDefine_Begin+2) { // 图片保存到相册
  88. UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
  89. pasteboard.string = weakSelf.saveLinkUrl;
  90. [LOADING_MANAGER MBShowAUTOHidingInWindow:@"复制成功"];
  91. }
  92. else {
  93. //创建分享消息对象
  94. UMSocialMessageObject *messageObject = [UMSocialMessageObject messageObject];
  95. NSString *shareTitle = @"";
  96. if (![NSString isEmptyString:weakSelf.shareTitle]) {
  97. shareTitle = weakSelf.shareTitle;
  98. }
  99. NSString *descMessage = @"";
  100. if (weakSelf.shareMessage) {
  101. descMessage = self.shareMessage;
  102. }
  103. // 创建分享对象
  104. if (weakSelf.shareType == KSSHARETYPE_IMAGE) {
  105. UMShareImageObject *shareObj = [UMShareImageObject shareObjectWithTitle:shareTitle descr:descMessage thumImage:[UIImage imageNamed:@"shareImage"]];
  106. shareObj.shareImage = self.shareImage;
  107. //分享消息对象设置分享内容对象
  108. messageObject.shareObject = shareObj;
  109. }
  110. else if (weakSelf.shareType == KSSHARETYPE_VODEO) {
  111. UMShareWebpageObject *shareObj = [UMShareWebpageObject shareObjectWithTitle:shareTitle descr:descMessage thumImage:[UIImage imageNamed:@"shareImage"]];
  112. // NSString *shareUrl = [self.shareUrl stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
  113. shareObj.webpageUrl = self.shareUrl;
  114. //分享消息对象设置分享内容对象
  115. messageObject.shareObject = shareObj;
  116. }
  117. //调用分享接口
  118. [[UMSocialManager defaultManager] shareToPlatform:platformType messageObject:messageObject currentViewController:nil completion:^(id data, NSError *error) {
  119. if (error) {
  120. NSLog(@"************分享失败 %@*********",error);
  121. if (weakSelf.callback) {
  122. weakSelf.callback(NO, @"分享失败");
  123. [LOADING_MANAGER MBShowAUTOHidingInWindow:@"分享失败"];
  124. }
  125. }else{
  126. if ([data isKindOfClass:[UMSocialShareResponse class]]) {
  127. UMSocialShareResponse *resp = data;
  128. //分享结果消息
  129. NSLog(@"************分享成功 %@*********",resp.message);
  130. if (weakSelf.callback) {
  131. weakSelf.callback(YES,@"分享成功");
  132. [LOADING_MANAGER MBShowAUTOHidingInWindow:@"分享成功"];
  133. }
  134. }else{
  135. NSLog(@"response data is %@",data);
  136. }
  137. }
  138. }];
  139. }
  140. }];
  141. }
  142. - (UIView*)UMSocialParentView:(UIView*)defaultSuperView {
  143. return [NSObject getKeyWindow];
  144. }
  145. + (instancetype)shareInstanceToWechatWithImage:(UIImage *)image url:(NSString *)url shareTitle:(NSString *)shareTitle descMessage:(NSString *)descMessage shareType:(KSSHARETYPE)type thumImage:(_Nullable id)thumImage callback:(KSShareActionCallback)callback {
  146. KSUMShareManager *manager = [[self alloc] init];
  147. manager.shareType = type;
  148. manager.shareImage = image;
  149. manager.shareUrl = url;
  150. manager.shareTitle = shareTitle;
  151. manager.shareMessage = descMessage;
  152. manager.thumImage = thumImage;
  153. if (callback) {
  154. manager.callback = callback;
  155. }
  156. [manager shareWechat];
  157. return manager;
  158. }
  159. + (instancetype)shareInstanceToWechatCircleWithImage:(UIImage *)image url:(NSString *)url shareTitle:(NSString *)shareTitle descMessage:(NSString *)descMessage shareType:(KSSHARETYPE)type thumImage:(_Nullable id)thumImage callback:(KSShareActionCallback)callback {
  160. KSUMShareManager *manager = [[self alloc] init];
  161. manager.shareType = type;
  162. manager.shareImage = image;
  163. manager.shareUrl = url;
  164. manager.shareTitle = shareTitle;
  165. manager.shareMessage = descMessage;
  166. manager.thumImage = thumImage;
  167. if (callback) {
  168. manager.callback = callback;
  169. }
  170. [manager shareWechatCircle];
  171. return manager;
  172. }
  173. - (void)shareWechat {
  174. if (![[UMSocialManager defaultManager] isInstall:UMSocialPlatformType_WechatSession]) {
  175. if (self.callback) {
  176. self.callback(NO, @"请安装微信");
  177. [LOADING_MANAGER MBShowAUTOHidingInWindow:@"请安装微信"];
  178. }
  179. return;
  180. }
  181. //创建分享消息对象
  182. UMSocialMessageObject *messageObject = [UMSocialMessageObject messageObject];
  183. NSString *shareTitle = @"";
  184. if (![NSString isEmptyString:self.shareTitle]) {
  185. shareTitle = self.shareTitle;
  186. }
  187. NSString *descMessage = @"";
  188. if (self.shareMessage) {
  189. descMessage = self.shareMessage;
  190. }
  191. // 创建分享对象
  192. if (self.shareType == KSSHARETYPE_IMAGE) {
  193. UMShareImageObject *shareObj = [UMShareImageObject shareObjectWithTitle:shareTitle descr:descMessage thumImage:[UIImage imageNamed:@"shareImage"]];
  194. shareObj.shareImage = self.shareImage;
  195. //分享消息对象设置分享内容对象
  196. messageObject.shareObject = shareObj;
  197. }
  198. else if (self.shareType == KSSHARETYPE_VODEO || self.shareType == KSSHARETYPE_URL) {
  199. id thumImage = self.thumImage == nil ? [UIImage imageNamed:@"shareImage"] : self.thumImage;
  200. UMShareWebpageObject *shareObj = [UMShareWebpageObject shareObjectWithTitle:shareTitle descr:descMessage thumImage:thumImage];
  201. shareObj.webpageUrl = self.shareUrl;
  202. //分享消息对象设置分享内容对象
  203. messageObject.shareObject = shareObj;
  204. }
  205. MJWeakSelf;
  206. //调用分享接口
  207. [[UMSocialManager defaultManager] shareToPlatform:UMSocialPlatformType_WechatSession messageObject:messageObject currentViewController:nil completion:^(id data, NSError *error) {
  208. if (error) {
  209. NSLog(@"************分享失败 %@*********",error);
  210. if (weakSelf.callback) {
  211. weakSelf.callback(NO, @"分享失败");
  212. [LOADING_MANAGER MBShowAUTOHidingInWindow:@"分享失败"];
  213. }
  214. }else{
  215. if ([data isKindOfClass:[UMSocialShareResponse class]]) {
  216. UMSocialShareResponse *resp = data;
  217. //分享结果消息
  218. NSLog(@"************分享成功 %@*********",resp.message);
  219. if (weakSelf.callback) {
  220. weakSelf.callback(YES,@"分享成功");
  221. [LOADING_MANAGER MBShowAUTOHidingInWindow:@"分享成功"];
  222. }
  223. }else{
  224. NSLog(@"response data is %@",data);
  225. }
  226. }
  227. }];
  228. }
  229. - (void)shareWechatCircle {
  230. if (![[UMSocialManager defaultManager] isInstall:UMSocialPlatformType_WechatSession]) {
  231. if (self.callback) {
  232. self.callback(NO, @"请安装微信");
  233. [LOADING_MANAGER MBShowAUTOHidingInWindow:@"请安装微信"];
  234. }
  235. return;
  236. }
  237. //创建分享消息对象
  238. UMSocialMessageObject *messageObject = [UMSocialMessageObject messageObject];
  239. NSString *shareTitle = @"";
  240. if (![NSString isEmptyString:self.shareTitle]) {
  241. shareTitle = self.shareTitle;
  242. }
  243. NSString *descMessage = @"";
  244. if (self.shareMessage) {
  245. descMessage = self.shareMessage;
  246. }
  247. // 创建分享对象
  248. if (self.shareType == KSSHARETYPE_IMAGE) {
  249. UMShareImageObject *shareObj = [UMShareImageObject shareObjectWithTitle:shareTitle descr:descMessage thumImage:[UIImage imageNamed:@"shareImage"]];
  250. shareObj.shareImage = self.shareImage;
  251. //分享消息对象设置分享内容对象
  252. messageObject.shareObject = shareObj;
  253. }
  254. else if (self.shareType == KSSHARETYPE_VODEO || self.shareType == KSSHARETYPE_URL) {
  255. id thumImage = self.thumImage == nil ? [UIImage imageNamed:@"shareImage"] : self.thumImage;
  256. UMShareWebpageObject *shareObj = [UMShareWebpageObject shareObjectWithTitle:shareTitle descr:descMessage thumImage:thumImage];
  257. shareObj.webpageUrl = self.shareUrl;
  258. //分享消息对象设置分享内容对象
  259. messageObject.shareObject = shareObj;
  260. }
  261. //调用分享接口
  262. MJWeakSelf;
  263. [[UMSocialManager defaultManager] shareToPlatform:UMSocialPlatformType_WechatTimeLine messageObject:messageObject currentViewController:nil completion:^(id data, NSError *error) {
  264. if (error) {
  265. NSLog(@"************分享失败 %@*********",error);
  266. if (weakSelf.callback) {
  267. weakSelf.callback(NO, @"分享失败");
  268. [LOADING_MANAGER MBShowAUTOHidingInWindow:@"分享失败"];
  269. }
  270. }else{
  271. if ([data isKindOfClass:[UMSocialShareResponse class]]) {
  272. UMSocialShareResponse *resp = data;
  273. //分享结果消息
  274. NSLog(@"************分享成功 %@*********",resp.message);
  275. if (weakSelf.callback) {
  276. weakSelf.callback(YES,@"分享成功");
  277. [LOADING_MANAGER MBShowAUTOHidingInWindow:@"分享成功"];
  278. }
  279. }else{
  280. NSLog(@"response data is %@",data);
  281. }
  282. }
  283. }];
  284. }
  285. - (void)dealloc {
  286. NSLog(@"-------!");
  287. }
  288. @end