微博登录与分享
微博开放平台-根据用户ID获取用户信息
注意:在Building Setting 中,other Linker Flags 添加-all_load
1、首先导入微博的SDK
2、导入需要的framework
QuartzCore.framework
ImageIO.framework
SystemConfiguration.framework
Security.framework
CoreTelephony.framework
CoreText.framework
UIKit.framework
Foundation.framework
CoreGraphics.framework
libz.dylib
libsqlite3.dylib
3、添加URL Type
4、在plist文件里添加iOS9 URL Schemes 白名单
LSApplicationQueriesSchemes
wechat
weixin
sinaweibohd
sinaweibo
sinaweibosso
weibosdk
weibosdk2.5
mqqapi
mqq
mqqOpensdkSSoLogin
mqqconnect
mqqopensdkdataline
mqqopensdkgrouptribeshare
mqqopensdkfriend
mqqopensdkapi
mqqopensdkapiV2
mqqopensdkapiV3
mqzoneopensdk
wtloginmqq
wtloginmqq2
mqqwpa
mqzone
mqzonev2
mqzoneshare
wtloginqzone
mqzonewx
mqzoneopensdkapiV2
mqzoneopensdkapi19
mqzoneopensdkapi
mqzoneopensdk
alipay
alipayshare
注:在工程中引入静态库以后,需要在编译时添加-ObjC编译选项
5、注册第三方应用,并在第三方应用实现从微博返回
在AppDelegate.m中引入#import "WeiboSDK.h"头文件,
遵循WeiboSDKDelegate代理
然后写入如下:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[WeiboSDK enableDebugMode:YES];
[WeiboSDK registerApp:WBAppKey];
return YES;
}
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary *)options
{
[WeiboSDK handleOpenURL:url delegate:self];
return YES;
}
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
{
[WeiboSDK handleOpenURL:url delegate:self];
return YES;
}
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
[WeiboSDK handleOpenURL:url delegate:self];
return YES;
}
#pragma mark - WeiboSDKDelegate
- (void)didReceiveWeiboRequest:(WBBaseRequest *)request
{
NSLog(@"============didReceiveWeiboRequest================");
}
- (void)didReceiveWeiboResponse:(WBBaseResponse *)response
{
if ([response isKindOfClass:WBSendMessageToWeiboResponse.class])
{
NSString *title = NSLocalizedString(@"发送结果", nil);
NSString *message = [NSString stringWithFormat:@"%@: %d\n%@: %@\n%@: %@", NSLocalizedString(@"响应状态", nil), (int)response.statusCode, NSLocalizedString(@"响应UserInfo数据", nil), response.userInfo, NSLocalizedString(@"原请求UserInfo数据", nil),response.requestUserInfo];
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:title
message:message
delegate:nil
cancelButtonTitle:NSLocalizedString(@"确定", nil)
otherButtonTitles:nil];
[alert show];
}
else if ([response isKindOfClass:WBAuthorizeResponse.class])
{
NSLog(@"\n=====================\n%@\n==================\n", message);
/*{
"access_token" = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
app = {
logo = "http://timg.sjs.sinajs.cn/xxxxxxxxx/xxxxxxxxx/developer/xxxxxxxx.gif";
name = "\U672a\U901a\Uxxxxxxxxxxx8";
};
"expires_in" = 157679999;
"refresh_token" = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
"remind_in" = xxxxxxxxxxxxxxxxxx;
scope = "follow_app_official_microblog";
uid = xxxxxxxxxxxxxxxx;
}
[[NSUserDefaults standardUserDefaults] setObject:response.userInfo forKey:WBResponse_UserInfo];
//https://api.weibo.com/2/users/show.json?access_token=2.00wc8p2DNByEXB869738f574Vc7tSE&uid=3070962482
if (response.userInfo != nil) {
//登录成功发送通知
[[NSNotificationCenter defaultCenter] postNotificationName:@"notificationLogin" object:nil];
}
else if([response isKindOfClass:WBSDKAppRecommendResponse.class])
{
NSString *title = NSLocalizedString(@"邀请结果", nil);
NSString *message = [NSString stringWithFormat:@"accesstoken:\n%@\nresponse.StatusCode: %d\n响应UserInfo数据:%@\n原请求UserInfo数据:%@",[(WBSDKAppRecommendResponse *)response accessToken],(int)response.statusCode,response.userInfo,response.requestUserInfo];
}else if([response isKindOfClass:WBShareMessageToContactResponse.class])
{
NSString *title = NSLocalizedString(@"发送结果", nil);
NSString *message = [NSString stringWithFormat:@"%@: %d\n%@: %@\n%@: %@", NSLocalizedString(@"响应状态", nil), (int)response.statusCode, NSLocalizedString(@"响应UserInfo数据", nil), response.userInfo, NSLocalizedString(@"原请求UserInfo数据", nil),response.requestUserInfo];
}
}
6、微博分享—>在控制器里面添加分享代码
#import “WeiboSDK.h"
- (void)sendMessageToWeiBo
{
WBAuthorizeRequest *authRequest = [WBAuthorizeRequest request];
authRequest.redirectURI = WBRedirectURL;
authRequest.scope = @"all";
WBSendMessageToWeiboRequest *request = [WBSendMessageToWeiboRequest requestWithMessage:[self messageToShare] authInfo:authRequest access_token:nil];
request.userInfo = @{@"ShareMessageFrom": @"ViewController",
@"Other_Info_1": [NSNumber numberWithInt:123],
@"Other_Info_2": @[@"obj1", @"obj2"],
@"Other_Info_3": @{@"key1": @"obj1", @"key2": @"obj2"}};
// request.shouldOpenWeiboAppInstallPageIfNotInstalled = NO;
[WeiboSDK sendRequest:request];
}
- (WBMessageObject *)messageToShare
{
//分享文字和图片 多媒体文件和图片不能同时分享
WBMessageObject *message = [WBMessageObject message];
//
// message.text = NSLocalizedString(@"www.baidu.com", nil);
// WBImageObject *image = [WBImageObject object];
// image.imageData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"123456" ofType:@"jpg"]];
// message.imageObject = image;
//分享多媒体文件
WBWebpageObject *webpage = [WBWebpageObject object];
webpage.objectID = @"identifier1";
webpage.title = NSLocalizedString(@"分享网页标题", nil);
webpage.description = [NSString stringWithFormat:NSLocalizedString(@"分享网页内容简介-%.0f", nil), [[NSDate date] timeIntervalSince1970]];
webpage.thumbnailData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon" ofType:@"png"]];
webpage.webpageUrl = @"http://www.baidu.com";
message.mediaObject = webpage;
return message;
}
7、微博登录—>控制器里面添加代码
#import “WeiboSDK.h"
//微博登录
- (void)onClickWBLoginBtn
{
WBAuthorizeRequest *request = [WBAuthorizeRequest request];
request.redirectURI = @"https://api.weibo.com/oauth2/default.html";
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];
}
//登录成功之后的回调
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(WBLogin:) name:WBLoginSuccess object:nil];
- (void)WBLogin:(NSNotification *)notifi
{
NSDictionary *dict = [[NSUserDefaults standardUserDefaults] objectForKey:WBResponse_UserInfo];
NSLog(@"----->>>\n%@\n<-------",dict);
AFHTTPRequestOperationManager *manage = [AFHTTPRequestOperationManager manager];
manage.responseSerializer = [AFHTTPResponseSerializer serializer];
[manage GET:WeiBoAuthoUrl parameters:@{@"access_token":dict[@"access_token"], @"uid":dict[@"uid"]} success:^(AFHTTPRequestOperation *operation, id responseObject) {
//获取用户信息
NSDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingAllowFragments error:nil];
NSLog(@"usershow-->/n%@", dictionary);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"error-->%@",error.localizedDescription);
}];
}