您的位置:首页 > 移动开发 > 微信开发

ios 微信分享,QQ分享,微博分享集成

2016-05-04 19:38 519 查看
好久不跟新博客。虽然也没有几个人看。

话不多说,直插主题。现在每个应用里头都会有第三方分享,有的项目中用ShareSDK 或者 友盟社会化组件。但本宝宝做分享的时候,组长看见我用友盟分享,很不开心,说怕奔溃。宝宝想了想。分享这块如果用第三方,可能会多一次请求第三方服务器的过程。有点多余。所以宝宝决定自己搞一搞。

首先是在AppDelegate中注册 微博和微信这两个应用,QQ 的注册 是在TencentOAuth 在初始化的时候注册的

[[TencentOAuth alloc] initWithAppId:kQqAppId andDelegate:(id<TencentSessionDelegate>)self];


而 微信和微博的注册应用代码为

//微信SDK
[WXApi registerApp:kWeichatAppId withDescription:@"嗨播"];

//微博SDK
[WeiboSDK enableDebugMode:YES];
[WeiboSDK registerApp:kSINA_KEY];


然后 重写appDelegate中的两个方法 如下

-(BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url{
return [WXApi handleOpenURL:url delegate:self] || [TencentOAuth HandleOpenURL:url] || [WeiboSDK handleOpenURL:url delegate:self];

}

-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{

return [WXApi handleOpenURL:url delegate:self] || [TencentOAuth HandleOpenURL:url] || [WeiboSDK handleOpenURL:url delegate:self];
}


准备工作还有,配置白名单

之后直接看博主分装的分享吧

share manager.h

//
//  HLShareManager.h
//
//
//  Created by 王飞 on 16/5/4.
//  Copyright © 2016年 . All rights reserved.
//

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>

typedef enum {
HLShareTypeWechatSession = 1,   //发送给朋友
HLShareTypeWechatTimeline = 2,  //发送到朋友圈
HLShareTypeMobileQQ = 3,
HLShareTypeQzone = 4,
HLShareTypeTypeSina = 5,
} HLShareType;

@interface HLShareManager : NSObject
/**
*  通过第三方分享内容
*
*  @param url         分享的链接
*  @param text        分享的标题
*  @param description 分享的详情(微信中没有这个,可以为空)
*  @param imageUrl    分享中图片的url (微博分享中,这个url的图片大小不能超过32k)
*  @param type        分享的途径或方式
*/
+ (void)shareUrl:(NSString *)url text:(NSString *)text description:(NSString *)description image:(NSString *)imageUrl shareTyep:(HLShareType)type;
@end


sharemanager.m

//
//  HLShareManager.m

//
//  Created by 王飞 on 16/5/4.
//  Copyright © 2016年 . All rights reserved.
//

#import "HLShareManager.h"
#import "WechatAuthSDK.h"
#import "WXApi.h"
#import <TencentOpenAPI/TencentApiInterface.h>
#import <TencentOpenAPI/TencentMessageObject.h>
#import <TencentOpenAPI/TencentOAuth.h>
#import <TencentOpenAPI/QQApiInterface.h>
#import "WeiboSDK.h"

@interface HLShareManager ()
@property (nonatomic, strong) UIView *blackView;
@end

@implementation HLShareManager

+ (void)shareUrl:(NSString *)url text:(NSString *)text description:(NSString *)description image:(NSString *)imageUrl shareTyep:(HLShareType)type {
switch (type) {
case 1:
[[[self alloc] init] shareToWeiChat:url text:text image:imageUrl shareTyep:WXSceneSession];
break;
case 2:
[[[self alloc] init] shareToWeiChat:url text:text image:imageUrl shareTyep:WXSceneTimeline];
break;
case 3:
[[[self alloc] init] shareToQzone:url text:text description:description image:imageUrl];
break;
case 4:
[[[self alloc] init] shareToQQ:url text:text description:description image:imageUrl];
break;
case 5:
[[[self alloc] init] shareToSine:url text:text description:description image:imageUrl];
break;

default:
break;
}
}

- (void)shareToWeiChat:(NSString *)url text:(NSString *)text image:(NSString *)imageUrl shareTyep:(int)type {

if ([WXApi isWXAppInstalled] && [WXApi isWXAppSupportApi]) {

WXMediaMessage *message = [WXMediaMessage message];
message.title = text;
message.description = text;

[message setThumbImage:[UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:imageUrl]]]];

WXWebpageObject *webpage = [WXWebpageObject object];
webpage.webpageUrl = url;
message.mediaObject = webpage;

SendMessageToWXReq* req = [[SendMessageToWXReq alloc] init];
req.bText = NO;
req.message = message;

req.scene = WXSceneTimeline;

[WXApi sendReq:req];

} else {
[Tools showMessageCenter:@"未安装微信,请安装后重试"];
}
}

- (void)shareToQQ:(NSString *)url text:(NSString *)text description:(NSString *)description image:(NSString *)imageUrl {
[[TencentOAuth alloc] initWithAppId:kQqAppId andDelegate:(id<TencentSessionDelegate>)self];

QQApiNewsObject *newsObj = [QQApiNewsObject
objectWithURL :[NSURL URLWithString:url]
title: text
description :description
previewImageURL:[NSURL URLWithString:imageUrl]];
SendMessageToQQReq *req = [SendMessageToQQReq reqWithContent:newsObj];
//将内容分享到qq
//QQApiSendResultCode sent = [QQApiInterface sendReq:req];
//将内容分享到qzone
QQApiSendResultCode sent = [QQApiInterface SendReqToQZone:req];

[self handleSendResult:sent];

}

- (void)shareToQzone:(NSString *)url text:(NSString *)text description:(NSString *)description image:(NSString *)imageUrl {

[[TencentOAuth alloc] initWithAppId:kQqAppId andDelegate:(id<TencentSessionDelegate>)self];
QQApiNewsObject *newsObj = [QQApiNewsObject
objectWithURL :[NSURL URLWithString:url]
title: text
description :description
previewImageData:[NSData dataWithContentsOfURL:[NSURL URLWithString:imageUrl]]];
SendMessageToQQReq *req = [SendMessageToQQReq reqWithContent:newsObj];
//将内容分享到qq
QQApiSendResultCode sent = [QQApiInterface sendReq:req];
//将内容分享到qzone
//    QQApiSendResultCode sent = [QQApiInterface SendReqToQZone:req];

[self handleSendResult:sent];
}

- (void)handleSendResult:(QQApiSendResultCode)sendResult
{
switch (sendResult)
{
case EQQAPIAPPNOTREGISTED:
{
UIAlertView *msgbox = [[UIAlertView alloc] initWithTitle:@"Error" message:@"App未注册" delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:nil];
[msgbox show];
//            [msgbox release];

break;
}
case EQQAPIMESSAGECONTENTINVALID:
case EQQAPIMESSAGECONTENTNULL:
case EQQAPIMESSAGETYPEINVALID:
{
UIAlertView *msgbox = [[UIAlertView alloc] initWithTitle:@"Error" message:@"发送参数错误" delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:nil];
[msgbox show];
//            [msgbox release];

break;
}
case EQQAPIQQNOTINSTALLED:
{
UIAlertView *msgbox = [[UIAlertView alloc] initWithTitle:@"Error" message:@"未安装手Q" delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:nil];
[msgbox show];
//            [msgbox release];

break;
}
case EQQAPIQQNOTSUPPORTAPI:
{
UIAlertView *msgbox = [[UIAlertView alloc] initWithTitle:@"Error" message:@"API接口不支持" delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:nil];
[msgbox show];
//            [msgbox release];

break;
}
case EQQAPISENDFAILD:
{
UIAlertView *msgbox = [[UIAlertView alloc] initWithTitle:@"Error" message:@"发送失败" delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:nil];
[msgbox show];
//            [msgbox release];

break;
}
default:
{
break;
}
}
}

- (void)shareToSine:(NSString *)url text:(NSString *)text description:(NSString *)description image:(NSString *)imageUrl {
[WeiboSDK enableDebugMode:YES];
[WeiboSDK registerApp:kSINA_KEY];
WBAuthorizeRequest *request = [WBAuthorizeRequest request];
request.redirectURI = kRedirectURI;
request.scope = @"all";

WBMessageObject *message = [WBMessageObject message];
WBWebpageObject *webpage = [WBWebpageObject object];
webpage.objectID = @"identifier1";
webpage.title = NSLocalizedString(text, nil);
webpage.description = description;
webpage.thumbnailData = [NSData dataWithContentsOfURL:[NSURL URLWithString:imageUrl]];
webpage.webpageUrl = url;
message.mediaObject = webpage;

WBSendMessageToWeiboRequest *sendMessagerequest = [WBSendMessageToWeiboRequest requestWithMessage:message authInfo:request access_token:nil];
sendMessagerequest.userInfo = @{@"ShareMessageFrom": @"SendMessageToWeiboViewController",
@"Other_Info_1": [NSNumber numberWithInt:123],
@"Other_Info_2": @[@"obj1", @"obj2"],
@"Other_Info_3": @{@"key1": @"obj1", @"key2": @"obj2"}};
//    request.shouldOpenWeiboAppInstallPageIfNotInstalled = NO;
[WeiboSDK sendRequest:sendMessagerequest];
}

@end


注意有两个警告是必须要加的,那个是注册QQ的第三方应用的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: