一、微信分享,首先利用CocoaPods
,导入支付宝SDK
pod 'WechatOpenSDK'
二、 创建微信分享管理类 WechatShareManager
// WechatShareManager.h
#import <Foundation/Foundation.h>
#import <WXApi.h>
// 分享类型枚举
typedef NS_ENUM(NSInteger, WechatShareType) {
WechatShareTypeFriends, // 好友
WechatShareTypeTimeline, // 朋友圈
};
// 分享后返回码枚举
typedef NS_ENUM(int, WechatShareStatusCode){
WechatShareSuccess = 0, // 分享成功
WechatShareCancleShare = 1,// 取消分享
WechatShareFailed = 2 // 分享失败
};
@interface WechatShareManager : NSObject
// WechatShareManager是微信分享管理类
+ (id)shareInstance;
+ (BOOL)handleOpenUrl:(NSURL *)url;
+ (void)hangleWechatShareWith:(SendMessageToWXReq *)req;
@end
// WechatShareManager.m
#import "WechatShareManager.h"
#import <WXApi.h>
@interface WechatShareManager()<WXApiDelegate>
@end
@implementation WechatShareManager
+ (id)shareInstance {
static WechatShareManager *weChatShareInstance = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
weChatShareInstance = [[WechatShareManager alloc] init];
});
return weChatShareInstance;
}
+ (BOOL)handleOpenUrl:(NSURL *)url {
return [WXApi handleOpenURL:url delegate:[WechatShareManager shareInstance]];
}
+ (void)hangleWechatShareWith:(SendMessageToWXReq *)req {
[WXApi sendReq:req completion:^(BOOL success) {
//
}];
}
#pragma mark - 微信分享回调
- (void)onResp:(BaseResp *)resp {
if ([resp isKindOfClass:[SendMessageToWXResp class]]) {
/*
enum WXErrCode {
WXSuccess = 0, < 成功
WXErrCodeCommon = -1, < 普通错误类型
WXErrCodeUserCancel = -2, < 用户点击取消并返回
WXErrCodeSentFail = -3, < 发送失败
WXErrCodeAuthDeny = -4, < 授权失败
WXErrCodeUnsupport = -5, < 微信不支持
};
*/
SendMessageToWXResp *response = (SendMessageToWXResp *)resp;
switch (response.errCode) {
case WXSuccess: {
NSLog(@"微信分享成功");
[[NSNotificationCenter defaultCenter] postNotificationName:UserNotificationWechatShareSuccess
object:nil
userInfo:nil];
break;
}
case WXErrCodeCommon: {
NSLog(@"微信分享异常");
break;
}
case WXErrCodeUserCancel: {
NSLog(@"微信分享取消");
break;
}
case WXErrCodeSentFail: {
NSLog(@"微信分享失败");
[[NSNotificationCenter defaultCenter] postNotificationName:UserNotificationWechatShareFail
object:nil
userInfo:nil];
break;
}
case WXErrCodeAuthDeny: {
NSLog(@"微信分享授权失败");
break;
}
case WXErrCodeUnsupport: {
NSLog(@"微信分享版本暂不支持");
break;
}
default: {
break;
}
}
}
}
三、微信分享的逻辑处理
case ShareButtonTypeWechat:{
// 分享到微信
WXMediaMessage *message = [WXMediaMessage message];
message.title = self.shareTitle;
message.description = self.shareDetails == nil ? @"":self.shareDetails;
[message setThumbImage:self.shareCoverImageView];
if (self.shareImage != nil) {
WXImageObject *imageObject = [WXImageObject object];
imageObject.imageData = self.shareImage;
message.mediaObject = imageObject;
} else {
WXWebpageObject *webpageObject = [WXWebpageObject object];
webpageObject.webpageUrl = self.shareURL;
message.mediaObject = webpageObject;
}
SendMessageToWXReq *req = [[SendMessageToWXReq alloc] init];
req.bText = NO;
req.message = message;
req.scene = WXSceneSession;
[WechatShareManager hangleWechatShareWith:req];
break;
}
四、微信分享调用
- (void)addNotionAction {
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(wechatShareSuccessAction)
name:UserNotificationWechatShareSuccess
object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(wechatShareFailAction)
name:UserNotificationWechatShareFail
object:nil];
}
- (void)shareButtonClick {
ShareView *shareView = [[ShareView alloc] initWithFrame:[UIScreen mainScreen].bounds];
shareView.superViewController = self;
shareView.shareTitle = @"大家哈";
shareView.shareDetails = @"000000000000";
shareView.shareCoverImageView = KImage(@"mine_people_boy");
shareView.shareURL = @"https://www.baidu.com";
shareView.shareImage = UIImagePNGRepresentation(KImage(@"mine_people_girl"));
[self.view addSubview:shareView];
[shareView showShareViewAction];
}
- (void)wechatShareSuccessAction {
[self makeToast:@"分享成功" duration:0.3 position:CSToastPositionCenter];
[self dismissShareViewAction];
}
- (void)wechatShareFailAction {
[self makeToast:@"分享失败" duration:0.3 position:CSToastPositionCenter];
[self dismissShareViewAction];
}
五、注意的细节
// 1. APPDelegate.m里面注册
BOOL isSuccess = [WXApi registerApp:WeiXinPayKey universalLink:WeiXinLinks];
// 2. 设置分享后的回调
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
if ([url.absoluteString containsString:[NSString stringWithFormat:@"%@://platformId=wechat", WeiXinPayKey]]) {
return [WechatShareManager handleOpenUrl:url];
}
return YES;
}
// 3.适配iOS13
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler {
NSURL *continueURL = userActivity.webpageURL;
NSString *relativePath = continueURL.relativePath;
if ([relativePath containsString:WeiXinPayKey] && [relativePath containsString:@"pay"]) {
return [WXApi handleOpenUniversalLink:userActivity delegate:[WechatManager shareInstance]];
} else if ([relativePath containsString:[NSString stringWithFormat:@"%@", WeiXinPayKey]]) {
return [WXApi handleOpenUniversalLink:userActivity delegate:[WechatShareManager shareInstance]];
}
return YES;
}