写在前面
关于微信分享这个功能的实现是有很多办法的,比如大家都知道的友盟、shareSDK以及MonkeyKing等,MonkeyKing是用Swift写的,有兴趣的可以去github上面下载来看看,我这里只说调用微信SDK来实现分享功能,我会把微信分享、QQ分享以及新浪微博分享分开写,方便我也方便大家看,不墨迹 直接干正事。
一.去微信开放平台注册一个应用(链接:https://open.weixin.qq.com/)
在开放平台注册应用并通过审核后,会得到该应用的必要信息:
二.添加URL types
填写相应的identifier和URL Schemes,URL Schemes就是App ID
三.向微信注册
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// WXAPPID是在平台注册应用时的AppID
[WXApi registerApp:WXAPPID];
return YES;
}
四.处理open url
- (BOOL)application:(UIApplication *)application openURL:(nonnull NSURL *)url options:(nonnull NSDictionary *)options {
return [WXApi handleOpenURL:url delegate:self];
}
#pragma mark -
#pragma mark WXApiDelegate 微信分享的相关回调
//onReq是微信终端向第三方程序发起请求,要求第三方程序响应。第三方程序响应完后必须调用sendRsp返回。在调用sendRsp返回时,会切回到微信终端程序界面。
- (void)onReq:(BaseReq *)req
{
}
/** 如果第三方程序向微信发送了sendReq的请求,那么onResp会被回调。sendReq请求调用后,会切到微信终端程序界面。*/
/**
enum WXErrCode {
WXSuccess = 0, /**< 成功 */
WXErrCodeCommon = -1, /**< 普通错误类型 */
WXErrCodeUserCancel = -2, /**< 用户点击取消并返回 */
WXErrCodeSentFail = -3, /**< 发送失败 */
WXErrCodeAuthDeny = -4, /**< 授权失败 */
WXErrCodeUnsupport = -5, /**< 微信不支持 */
};*/
- (void)onResp:(BaseResp *)resp
{
if([resp isKindOfClass:[SendMessageToWXResp class]]) {
switch (resp.errCode) {
case WXSuccess:
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"成功" message:@"微信分享成功" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
[alert show];
}
break;
case WXErrCodeUserCancel:
break;
default:
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"失败" message:@"微信分享失败" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
[alert show];
}
break;
}
}
}
五.添加微信SDK依赖的库
在进行到第四步的时候,可以跑跑程序,你会发现程序编译不通过,原因缺少了一些库,根据错误提示添加就行了,如下:
六.开始使用
#pragma mark -- life circle
- (void)viewDidLoad {
[super viewDidLoad];
self.inviteButton = [[UIButton alloc] initWithFrame:CGRectMake(150, 200, 80, 30)];
self.inviteButton.backgroundColor = [UIColor greenColor];
[self.inviteButton setTitle:@"微信分享" forState:UIControlStateNormal];
self.inviteButton.titleLabel.font = [UIFont systemFontOfSize:16.0];
self.inviteButton.layer.cornerRadius = 5;
self.inviteButton.layer.borderWidth = 1;
self.inviteButton.layer.borderColor = [UIColor grayColor].CGColor;
[self.inviteButton addTarget:self action:@selector(weixinInviteButtonClick) forControlEvents:UIControlEventTouchUpInside];
self.inviteButton.clipsToBounds = YES;
[self.view addSubview:self.inviteButton];
}
- (void)weixinInviteButtonClick {
[self SendTextImageLink];
}
/** 发送纯文本*/
- (void)sendText {
if (![WXApi isWXAppInstalled]) {
NSLog(@"�请移步App Store去下载微信客户端");
}else {
SendMessageToWXReq *sendReq = [[SendMessageToWXReq alloc] init];
sendReq.bText = YES;//YES表示使用文本信息 NO表示不使用文本信息
sendReq.text = @" 这是测试微信分享";
// 0:分享到好友列表 1:分享到朋友圈 2:收藏
sendReq.scene = 0;
//发送分享信息
[WXApi sendReq:sendReq];
// 返回分享成功还是失败
NSLog(@" 成功和失败 - %d",[WXApi sendReq:sendReq]);
}
}
/** 发送图片文字链接*/
- (void)SendTextImageLink {
if (![WXApi isWXAppInstalled]) {
NSLog(@"请移步App Store去下载微信客户端");
}else {
SendMessageToWXReq *sendReq = [[SendMessageToWXReq alloc] init];
sendReq.bText = NO;
sendReq.scene = 0;
// 2.创建分享内容
WXMediaMessage *message = [WXMediaMessage message];
//分享标题
message.title = @"宝宝也是醉了";
// 描述
message.description = @"微信微信微信微信微信微信微信微信微信微信测试";
//分享图片,使用SDK的setThumbImage方法可压缩图片大小
[message setThumbImage:[UIImage imageNamed:@"1"]];
//创建多媒体对象
WXWebpageObject *webObj = [WXWebpageObject object];
// 点击后的跳转链接
webObj.webpageUrl = @"www.baidu.com";
message.mediaObject = webObj;
sendReq.message = message;
[WXApi sendReq:sendReq];
}
}
七.最后一步:如果在ios9上的话,你可能还不能正常分享,会提示如下错误信息:
-canOpenURL: failed for URL: "weixin://app/wx3de242dd39206961/" - error: "This app is not allowed to query for scheme weixin"
需要在“Info.plist”中将要使用的URL Schemes列为白名单,才可正常检查其他应用是否安装。
需要添加哪些就根据错误提示一个一个添加就ok了。
在info.plist里面添加如下信息:
PS:添加到没有如上的错误提示即可。
八.测试
纯文本:
图文链接通通都有:
总结
其实还是看微信的SDK比较全面,哈哈哈哈