QQ 微信。微博。登录分享代码

//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(@"分享链接成功");
      }
    

    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值