//CoCopods 倒入三方
pod ‘WechatOpenSDK’
pod “Weibo_SDK”
pod ‘TencentOpenApiSDK’
#import “AppDelegate.h”
#import “WXApi.h”
#import <Weibo_SDK/WeiboSDK.h>
#define WX_AppID @""
#define WX_AppSecret @""
#define WB_AppKey @""
#define QQ_AppID @""
#define QQ_AppKey @""
@interface AppDelegate ()<WXApiDelegate,WeiboSDKDelegate,TencentSessionDelegate>
@end
@implementation AppDelegate
#pragma mark – TencentSessionDelegate –
//登录成功:
-
(void)tencentDidLogin
{
if (_tencentOAuth.accessToken.length > 0) {
// 获取用户信息
[_tencentOAuth getUserInfo];
NSLog(@"_accessToken==%@",_tencentOAuth.accessToken);} else {
NSLog(@“登录不成功 没有获取accesstoken”);
}
}
// 获取用户信息 -
(void)getUserInfoResponse:(APIResponse *)response {
if (response && response.retCode == URLREQUEST_SUCCEED) {
NSDictionary *userInfo = [response jsonResponse]; NSString *nickName = userInfo[@"nickname"]; NSLog(@"userInfo==%@",userInfo); NSLog(@"nicName==%@",nickName); // 后续操作...
} else {
NSLog(@“QQ auth fail ,getUserInfoResponse:%d”, response.detailRetCode);
}
}
//非网络错误导致登录失败: -
(void)tencentDidNotLogin:(BOOL)cancelled {
if (cancelled) {
NSLog(@“用户取消登录”);
} else {
NSLog(@“登录失败”);
}
} -
(void)tencentDidNotNetWork {
NSLog(@“网络错误”);
}
#pragma mark – WeiboSDKDelegate –
/**
收到一个来自微博客户端程序的请求
收到微博的请求后,第三方应用应该按照请求类型进行处理,处理完后必须通过 [WeiboSDK sendResponse:] 将结果回传给微博
@param request 具体的请求对象
*/
-(void)didReceiveWeiboRequest:(WBBaseRequest *)request {
}
/**
收到一个来自微博客户端程序的响应
收到微博的响应后,第三方应用可以通过响应类型、响应的数据和 WBBaseResponse.userInfo 中的数据完成自己的功能
@param response 具体的响应对象
*/
-(void)didReceiveWeiboResponse:(WBBaseResponse *)response {
// 如果是登录授权回调
if ([response isKindOfClass:[WBAuthorizeResponse class]]) {
// 强转
WBAuthorizeResponse authResponse = (WBAuthorizeResponse)response;
// 如果为空,返回
if (authResponse == nil) {
return;
}
// 提取微博的accessToken
NSString *accessToken = authResponse.accessToken;
NSLog(@“微博accessToken=%@”,accessToken);
// 获取微博用户信息
[self getWBUserInfoWithAccessToken:accessToken];
}
// 如果是微博分享回调
else if ([response isKindOfClass:[WBSendMessageToWeiboResponse class]]) {
}
}
// 通过accessToken获取微博用户信息
-(void)getWBUserInfoWithAccessToken:(NSString *)token {
}
#pragma mark – WXApiDelegate
/*! @brief 收到一个来自微信的请求,第三方应用程序处理完后调用sendResp向微信发送结果
*
- 收到一个来自微信的请求,异步处理完成后必须调用sendResp发送处理结果给微信。
- 可能收到的请求有GetMessageFromWXReq、ShowMessageFromWXReq等。
- @param req 具体请求内容,是自动释放的
*/
-(void)onReq:(BaseReq *)req {
}
/*! @brief 发送一个sendReq后,收到微信的回应
*
-
收到一个来自微信的处理结果。调用一次sendReq后会收到onResp。
-
可能收到的处理结果有SendMessageToWXResp、SendAuthResp等。
-
@param resp具体的回应内容,是自动释放的
*/
-(void)onResp:(BaseResp *)resp {
// 如果是授权回调
if ([resp isKindOfClass:[SendAuthResp class]]) {
// 强制转换
SendAuthResp *authResp = (SendAuthResp *)resp;
// 判断ErrorCode值
if (authResp.errCode == -4) {
NSLog(@“用户拒绝授权”);
return;
}
if (authResp.errCode == -2) {
NSLog(@“用户取消授权”);
return;
}
// 如果为0,获取临时票据code值
NSString *code = authResp.code;
NSLog(@“code=%@”,code);
// 获取accessToken
[self getAccessTokenWithCode:code];
}
// 分享回调
else if ([resp isKindOfClass:[SendMessageToWXResp class]]) {}
}
// 通过code获取accessToken
-(void)getAccessTokenWithCode:(NSString *)code {
// 网址字符串拼接
NSString *urlStr = [NSString stringWithFormat:@“https://api.weixin.qq.com/sns/oauth2/access_token?appid=%@&secret=%@&code=%@&grant_type=authorization_code”,WX_AppID,WX_AppSecret,code];
// 请求网络数据
[[[NSURLSession sharedSession] dataTaskWithURL:[NSURL URLWithString:urlStr] completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
id jsonData = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
if (jsonData == nil) {
return ;
}
NSLog(@"%@",jsonData);
// 提取出accessToken和openid
NSString *accessToken = jsonData[@"access_token"];
NSString *openId = jsonData[@"openid"];
NSLog(@"accessToken=%@,openid=%@",accessToken,openId);
// 获取微信用户信息
[self getWXUserInfoWithToken:accessToken openID:openId];
}] resume];
}
//设置白名单
分享
#import “ViewController.h”
#import “WXApi.h”
#import <Weibo_SDK/WeiboSDK.h>
#import “AppDelegate.h”
#import <TencentOpenAPI/QQApiInterface.h>
#define WB_RedirectURI @“https://api.weibo.com/oauth2/default.html”
@interface ViewController (){
NSString *shareContent; // 分享文本
UIImage *shareImg; // 分享的图片
NSString *shareURLStr; // 分享的链接
}
// 选择分享内容的分段按钮
@property (weak, nonatomic) IBOutlet UISegmentedControl *shareContentSeg;
/// 微信登录
- (IBAction)weChatLogin:(id)sender;
/// 微博登录 - (IBAction)weiBoLogin:(id)sender;
/// QQ登录 - (IBAction)qqLogin:(id)sender;
/// 分享给微信好友
- (IBAction)weChatFriendShare:(id)sender;
/// 分享给微信朋友圈 - (IBAction)weChatTimelineShare:(id)sender;
/// 微博分享 - (IBAction)weiBoShare:(id)sender;
/// QQ分享 - (IBAction)qqShare:(id)sender;
@end
@implementation ViewController
-
(void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.shareContent = @“我曾怀疑我,走在沙漠中,从不结果,无论种什么梦,才张开翅膀,风就变沉默,习惯伤痛能不能算收获。庆幸的是我,一直没回头,终于发现真的是有绿洲”;
shareImg = [UIImage imageNamed:@“IMG_0090.JPG”];
shareURLStr = @“http://www.baidu.com”;
}
/// 微信登录
-
(IBAction)weChatLogin:(id)sender {
//构造SendAuthReq结构体
SendAuthReq* req = [[SendAuthReq alloc]init];
req.scope = @“snsapi_userinfo”;
req.state = @“123”;
//第三方向微信终端发送一个SendAuthReq消息结构
[WXApi sendReq:req];
} -
(IBAction)weiBoLogin:(id)sender {
WBAuthorizeRequest *request = [WBAuthorizeRequest request];
request.redirectURI = WB_RedirectURI;
request.scope = @“all”;
request.userInfo = @{@“SSO_From”: @“ViewController”,
@“Other_Info_1”: [NSNumber numberWithInt:123],
@“Other_Info_2”: @[@“obj1”, @“obj2”],
@“Other_Info_3”: @{@“key1”: @“obj1”, @“key2”: @“obj2”}};
[WeiboSDK sendRequest:request];
} -
(IBAction)qqLogin:(id)sender {
AppDelegate *appDele = (AppDelegate *)[UIApplication sharedApplication].delegate;
NSArray *permissions = [NSArray arrayWithObjects:kOPEN_PERMISSION_GET_INFO, kOPEN_PERMISSION_GET_USER_INFO, kOPEN_PERMISSION_GET_SIMPLE_USER_INFO, nil];
[appDele.tencentOAuth authorize:permissions];
}
/// 分享到微信好友
-
(IBAction)weChatFriendShare:(id)sender {
// 判断分段控件的选择项
if (self.shareContentSeg.selectedSegmentIndex == 0) {
// 分享文本
SendMessageToWXReq *req = [[SendMessageToWXReq alloc] init];
req.bText = YES;
req.text = shareContent;
req.scene = WXSceneSession;
[WXApi sendReq:req];
}
else if(self.shareContentSeg.selectedSegmentIndex == 1) {
// 分享图片
NSData *imageData = UIImageJPEGRepresentation(shareImg, 0.7);WXImageObject *imageObject = [WXImageObject object]; imageObject.imageData = imageData; WXMediaMessage *message = [WXMediaMessage message]; NSString *filePath = [[NSBundle mainBundle] pathForResource:@"logo" ofType:@"png"]; message.thumbData = [NSData dataWithContentsOfFile:filePath]; message.mediaObject = imageObject; SendMessageToWXReq *req = [[SendMessageToWXReq alloc] init]; req.bText = NO; req.message = message; req.scene = WXSceneSession; [WXApi sendReq:req];
}
else {
// 分享链接
WXWebpageObject *webpageObject = [WXWebpageObject object];
webpageObject.webpageUrl = shareURLStr;WXMediaMessage *message = [WXMediaMessage message]; message.title = @"我的标题"; message.description = @"我的描述"; [message setThumbImage:[UIImage imageNamed:@"logo.png"]]; message.mediaObject = webpageObject; SendMessageToWXReq *req = [[SendMessageToWXReq alloc] init]; req.bText = NO; req.message = message; req.scene = WXSceneSession; [WXApi sendReq:req];
}
} -
(IBAction)weChatTimelineShare:(id)sender {
// 判断分段控件的选择项
if (self.shareContentSeg.selectedSegmentIndex == 0) {
// 分享文本
SendMessageToWXReq *req = [[SendMessageToWXReq alloc] init];
req.bText = YES;
req.text = shareContent;
req.scene = WXSceneTimeline;
[WXApi sendReq:req];
}
else if(self.shareContentSeg.selectedSegmentIndex == 1) {
// 分享图片
NSData *imageData = UIImageJPEGRepresentation(shareImg, 0.7);WXImageObject *imageObject = [WXImageObject object]; imageObject.imageData = imageData; WXMediaMessage *message = [WXMediaMessage message]; NSString *filePath = [[NSBundle mainBundle] pathForResource:@"logo" ofType:@"png"]; message.thumbData = [NSData dataWithContentsOfFile:filePath]; message.mediaObject = imageObject; SendMessageToWXReq *req = [[SendMessageToWXReq alloc] init]; req.bText = NO; req.message = message; req.scene = WXSceneTimeline; [WXApi sendReq:req];
}
else {
// 分享链接
WXWebpageObject *webpageObject = [WXWebpageObject object];
webpageObject.webpageUrl = shareURLStr;WXMediaMessage *message = [WXMediaMessage message]; message.title = @"我的标题"; message.description = @"我的描述"; [message setThumbImage:[UIImage imageNamed:@"logo.png"]]; message.mediaObject = webpageObject; SendMessageToWXReq *req = [[SendMessageToWXReq alloc] init]; req.bText = NO; req.message = message; req.scene = WXSceneTimeline; [WXApi sendReq:req];
}
} -
(IBAction)weiBoShare:(id)sender {
WBMessageObject *message = [WBMessageObject message];
// 如果是文本分享
// if (self.shareContentSeg.selectedSegmentIndex == 0) {message.text = shareContent;
// }
// 如果是图片
if (self.shareContentSeg.selectedSegmentIndex == 1){
WBImageObject *imageObject = [WBImageObject object];
imageObject.imageData = UIImageJPEGRepresentation(shareImg, 0.7);
message.imageObject = imageObject;
}
// 分享链接
else {
WBWebpageObject *webpage = [WBWebpageObject object];
webpage.objectID = @"identifier1";
webpage.title = @"分享网页标题";
webpage.description = @"我的描述";
webpage.thumbnailData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"logo" ofType:@"png"]];
webpage.webpageUrl = shareURLStr;
message.mediaObject = webpage;
}
// 分享信息
WBSendMessageToWeiboRequest *req = [WBSendMessageToWeiboRequest requestWithMessage:message];
// 向微博发送分享请求
[WeiboSDK sendRequest:req];
}
/// QQ分享
-
(IBAction)qqShare:(id)sender {
// 文本分享
if (self.shareContentSeg.selectedSegmentIndex == 0) {
QQApiTextObject *txtObj = [QQApiTextObject objectWithText:shareContent];
SendMessageToQQReq *req = [SendMessageToQQReq reqWithContent:txtObj];
QQApiSendResultCode sent = [QQApiInterface sendReq:req];
if (sent != EQQAPISENDSUCESS) {
NSLog(@“分享文本失败”);
}
else {
NSLog(@“分享文本成功”);
}
}
// 图片分享
else if (self.shareContentSeg.selectedSegmentIndex == 1) {
NSString *imgPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@“IMG_0090.JPG”];
NSData *imgData = [NSData dataWithContentsOfFile:imgPath];NSString *imgPath2 = [[NSBundle mainBundle] pathForResource:@"logo" ofType:@"png"]; NSData *imgData2 = [NSData dataWithContentsOfFile:imgPath2]; QQApiImageObject *imgObj = [QQApiImageObject objectWithData:imgData previewImageData:imgData2 title:@"QQ互联测试" description:@"QQ互联测试分享"]; SendMessageToQQReq *req = [SendMessageToQQReq reqWithContent:imgObj]; QQApiSendResultCode sent = [QQApiInterface sendReq:req]; if (sent != EQQAPISENDSUCESS) { NSLog(@"分享图片失败"); } else { NSLog(@"分享图片成功"); }
}
// 链接分享
else {
NSString *utf8String = shareURLStr;
NSString *title = @“新闻标题”;
NSString *description = @“新闻描述”;
NSString *previewImageUrl = @“https://ss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=459335471,4041609318&fm=27&gp=0.jpg”;QQApiNewsObject *newsObj = [QQApiNewsObject objectWithURL:[NSURL URLWithString:utf8String] title:title description:description previewImageURL:[NSURL URLWithString:previewImageUrl]]; SendMessageToQQReq *req = [SendMessageToQQReq reqWithContent:newsObj]; QQApiSendResultCode sent = [QQApiInterface sendReq:req]; if (sent != EQQAPISENDSUCESS) { NSLog(@"分享链接失败"); } else { NSLog(@"分享链接成功"); }
}
}