iOS学习笔记12—新浪微博分享
2013-08-16 16:48
579 查看
一.申请开发者账号,创建应用
在http://open.t.sina.com.cn / 中申请成为开发者,再创建不同的应用,获得相应的 AppKey (在下面链接中的source即为app
key)保存好好自己的
kAppKey kAppSecret kAppRedirectURI
二.调用
1.下载官方的SDK解压 并将需要的文件拖到你的工程里面 需要导入的类库现在忘记了 大家应该可以能找到的吧创建好分享界面
在Appdelegate.h中添加
#import <UIKit/UIKit.h> #import "SinaWeibo.h" #import "SinaWeiboRequest.h" #import "FenXiangViewController.h" //加入你申请的东西 #define kAppKey @"******" #define kAppSecret @"*****" #define kAppRedirectURI @"*****" #ifndef kAppKey #error #endif #ifndef kAppSecret #error #endif #ifndef kAppRedirectURI #error #endif //#import "LogeViewController.h" @class SinaWeibo; @class RootViewController; @class LogeViewController; @interface AppDelegate : UIResponder <UIApplicationDelegate,SinaWeiboDelegate,SinaWeiboRequestDelegate> { SinaWeibo *_sinaWeibo; FenXiangViewController *_viewController; } @property (strong, nonatomic) UIWindow *window; @property (strong, nonatomic) FenXiangViewController *fenxiangviewController; @property (readonly, nonatomic) SinaWeibo *sinaWeibo; @end在AppDelegate.m中添加
#import "AppDelegate.h" #import "RootViewController.h" #import "SinaWeibo.h" @implementation AppDelegate @synthesize sinaWeibo = _sinaWeibo; @synthesize window = _window; @synthesize fenxiangviewController = _fenxiangviewController; - (void)dealloc { [_sinaWeibo release]; [_viewController release]; [_window release]; [super dealloc]; } - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease]; self.window.backgroundColor = [UIColor whiteColor]; [self.window makeKeyAndVisible]; self.window.backgroundColor = [UIColor whiteColor];
//先初始化视图然后在把微博的delegate给视图 _fenxiangviewController =[[FenXiangViewController alloc]init]; _sinaWeibo = [[SinaWeibo alloc] initWithAppKey:kAppKey appSecret:kAppSecret appRedirectURI:kAppRedirectURI andDelegate:_fenxiangviewController]; NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSDictionary *sinaweiboInfo = [defaults objectForKey:@"SinaWeiboAuthData"]; if ([sinaweiboInfo objectForKey:@"AccessTokenKey"] && [sinaweiboInfo objectForKey:@"ExpirationDateKey"] && [sinaweiboInfo objectForKey:@"UserIDKey"]) { _sinaWeibo.accessToken = [sinaweiboInfo objectForKey:@"AccessTokenKey"]; _sinaWeibo.expirationDate = [sinaweiboInfo objectForKey:@"ExpirationDateKey"]; _sinaWeibo.userID = [sinaweiboInfo objectForKey:@"UserIDKey"]; } } - (void)applicationDidBecomeActive:(UIApplication *)application { [self.sinaWeibo applicationDidBecomeActive]; } - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url { return [self.sinaWeibo handleOpenURL:url]; } - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { return [self.sinaWeibo handleOpenURL:url]; }
则在分享界面.h文件中
#import <UIKit/UIKit.h> #import "SinaWeibo.h" #import "SinaWeiboRequest.h" @class SinaWeibo; @class RootViewController; @class FenxiangViewController; @interface FenXiangViewController : UIViewController<SinaWeiboDelegate,SinaWeiboRequestDelegate> { UIButton *loginButton; UIButton *logoutButton; UIButton *userInfoButton; UIButton *timelineButton; UIButton *postStatusButton; UIButton *postImageStatusButton; NSDictionary *userInfo; NSArray *statuses; NSString *postStatusText; NSString *postImageStatusText; NSString *login; UIActivityIndicatorView *activity; } @property (readonly, nonatomic) SinaWeibo *sinaWeibo; @property (nonatomic ,copy) NSString *string; @property (nonatomic ,copy) NSString *name; @property (nonatomic ,copy) NSString *place; @property (strong, nonatomic) UIButton *shareButton; @property (strong, nonatomic) UITextView *textView; @property (strong, nonatomic) UIView *shareView; @property (strong, nonatomic) UIActivityIndicatorView *indicator; @end.m文件
#import "FenXiangViewController.h" #import "AppDelegate.h" #import "SinaWeibo.h" #define kAppKey @"*****" #define kAppSecret @"*****" #define kAppRedirectURL @"****" @interface FenXiangViewController () @end @implementation FenXiangViewController @synthesize shareButton = _shareButton; @synthesize textView = _textView; @synthesize shareView = _shareView; @synthesize indicator = _indicator; - (void)dealloc { [userInfo release], userInfo = nil; [statuses release], statuses = nil; [postStatusText release], postStatusText = nil; [postImageStatusText release], postImageStatusText = nil; [activity release]; [super dealloc]; } - (SinaWeibo *)sinaweibo { AppDelegate * delegate = (AppDelegate *)[UIApplication sharedApplication].delegate; return delegate.sinaWeibo; } - (void)removeAuthData { [[NSUserDefaults standardUserDefaults] removeObjectForKey:@"SinaWeiboAuthData"]; } - (void)storeAuthData { SinaWeibo *sinaweibo = [self sinaweibo]; NSDictionary *authData = [NSDictionary dictionaryWithObjectsAndKeys: sinaweibo.accessToken, @"AccessTokenKey", sinaweibo.expirationDate, @"ExpirationDateKey", sinaweibo.userID, @"UserIDKey", sinaweibo.refreshToken, @"refresh_token", nil]; [[NSUserDefaults standardUserDefaults] setObject:authData forKey:@"SinaWeiboAuthData"]; [[NSUserDefaults standardUserDefaults] synchronize]; } - (void)resetButtons { [activity stopAnimating]; //******************************************************************************** SinaWeibo *sinaweibo = [self sinaweibo]; BOOL authValid = sinaweibo.isAuthValid; loginButton.enabled = !authValid; logoutButton.enabled = authValid; userInfoButton.enabled = authValid; timelineButton.enabled = authValid; postStatusButton.enabled = authValid; postImageStatusButton.enabled = authValid; if (authValid) { [logoutButton setTitle:[NSString stringWithFormat:@"退出登录"] forState:UIControlStateNormal]; if (userInfo) { [userInfoButton setTitle:[userInfo objectForKey:@"screen_name"] forState:UIControlStateNormal]; } if (statuses) { if (statuses.count > 0) { [timelineButton setTitle:[[statuses objectAtIndex:0] objectForKey:@"text"] forState:UIControlStateNormal]; } else { [timelineButton setTitle:@"no status" forState:UIControlStateNormal]; } } } else { [logoutButton setTitle:@"退出登陆" forState:UIControlStateNormal]; [userInfoButton setTitle:@"get user info" forState:UIControlStateNormal]; [timelineButton setTitle:@"get timeline" forState:UIControlStateNormal]; } } - (UIButton *)buttonWithFrame:(CGRect)frame action:(SEL)action { UIImage *buttonBackgroundImage = [[UIImage imageNamed:@"button_background.png"] stretchableImageWithLeftCapWidth:5 topCapHeight:5]; UIImage *disabledButtonBackgroundImage = [[UIImage imageNamed:@"button_background_disabled.png"] stretchableImageWithLeftCapWidth:5 topCapHeight:5]; UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; button.frame = frame; [button setBackgroundImage:buttonBackgroundImage forState:UIControlStateNormal]; [button setBackgroundImage:disabledButtonBackgroundImage forState:UIControlStateDisabled]; [button setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; [button setTitleColor:[UIColor grayColor] forState:UIControlStateDisabled]; [button addTarget:self action:action forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:button]; return button; } - (void)viewDidLoad { self.view.backgroundColor = [UIColor whiteColor]; UIImageView *logoImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"logo.png"]]; logoImageView.frame = CGRectMake(50, 40, 73, 30); [self.view addSubview:logoImageView]; [logoImageView release]; UILabel *titleLabel = [[UILabel alloc] init]; titleLabel.text = @"新浪微博分享"; titleLabel.backgroundColor = [UIColor clearColor]; titleLabel.font = [UIFont systemFontOfSize:18]; titleLabel.frame = CGRectMake(140, 40, 140, 30); [self.view addSubview:titleLabel]; [titleLabel release]; login = [NSString stringWithFormat:@"登陆"]; loginButton = [self buttonWithFrame:CGRectMake(20, 100, 280, 40) action:@selector(loginButtonPressed)]; [loginButton setTitle:login forState:UIControlStateNormal]; logoutButton = [self buttonWithFrame:CGRectMake(20, self.view.bounds.size.height-44-65, 280, 40) action:@selector(logoutButtonPressed)]; [logoutButton setTitle:@"退出登录" forState:UIControlStateNormal]; [logoutButton setTitle:@"退出登录" forState:UIControlStateDisabled]; postImageStatusButton = [self buttonWithFrame:CGRectMake(20, 150, 280, 40) action:@selector(postImageStatusButtonPressed)]; [postImageStatusButton setTitle:@"分享你的收藏" forState:UIControlStateNormal]; [self resetButtons]; activity=[[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]; [activity setFrame:CGRectMake(self.view.bounds.size.width/2-25, self.view.bounds.size.height/2-25, 50, 50)]; [activity setColor:[UIColor grayColor]]; [self.view addSubview:activity]; [self.view setBackgroundColor:[UIColor colorWithRed:153.0/255 green:156.0/255 blue:238.0/255 alpha:1]]; [super viewDidLoad]; UIButton *button=[UIButton buttonWithType:UIButtonTypeCustom]; [button addTarget:self action:@selector(back) forControlEvents:UIControlEventTouchUpInside]; [button setBackgroundImage:[UIImage imageNamed:@"back1.png"] forState:UIControlStateNormal]; [button setFrame:CGRectMake(0, 0, 30, 28)]; UIBarButtonItem *backBar=[[UIBarButtonItem alloc]initWithCustomView:button]; self.navigationItem.leftBarButtonItem=backBar; [backBar release]; } -(void)back { [self.navigationController popViewControllerAnimated:YES]; } - (void)loginButtonPressed { [activity startAnimating]; UIWindow *keyWindow = [UIApplication sharedApplication].keyWindow; [userInfo release], userInfo = nil; [statuses release], statuses = nil; SinaWeibo *sinaweibo = [self sinaweibo]; [sinaweibo logIn]; } - (void)logoutButtonPressed { SinaWeibo *sinaweibo = [self sinaweibo]; [sinaweibo logOut]; } - (void)userInfoButtonPressed { //******************************************************************************** SinaWeibo *sinaweibo = [self sinaweibo]; [sinaweibo requestWithURL:@"users/show.json" params:[NSMutableDictionary dictionaryWithObject:sinaweibo.userID forKey:@"uid"] httpMethod:@"GET" delegate:self]; } - (void)postImageStatusButtonPressed { //******************************************************************************** if (!postImageStatusText) { // post_image_status_times ++; [postImageStatusText release], postImageStatusText = nil; postImageStatusText = [[NSString alloc] initWithFormat:@"%@", [NSDate date]]; } UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"提示" message:[NSString stringWithFormat:@"将要分享到新微博%@\n%@的%@很不错哦,有空一起玩?", postImageStatusText,_place,_name] delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil]; alertView.tag = 1; [alertView show]; [alertView release]; } - (void)alertView:(UIAlertView *)alertView willDismissWithButtonIndex:(NSInteger)buttonIndex { //******************************************************************************** if (buttonIndex == 1) { if (alertView.tag == 0) { // post status Hui.1 SinaWeibo *sinaweibo = [self sinaweibo]; [sinaweibo requestWithURL:@"statuses/update.json" params:[NSMutableDictionary dictionaryWithObjectsAndKeys:postStatusText, @"status", nil] httpMethod:@"POST" delegate:self]; } else if (alertView.tag == 1) { // post image status SinaWeibo *sinaweibo = [self sinaweibo]; UIImage *image=[UIImage imageWithContentsOfFile:_string]; [sinaweibo requestWithURL:@"statuses/upload.json" params:[NSMutableDictionary dictionaryWithObjectsAndKeys: postImageStatusText, @"status", image, @"pic", nil] httpMethod:@"POST" delegate:self]; } } } - (void)viewDidUnload { [super viewDidUnload]; } - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { return YES; } #pragma mark - SinaWeibo Delegate //Hui 登陆 2 - (void)sinaweiboDidLogIn:(SinaWeibo *)sinaweibo { NSLog(@"sinaweiboDidLogIn userID = %@ accesstoken = %@ expirationDate = %@ refresh_token = %@", sinaweibo.userID, sinaweibo.accessToken, sinaweibo.expirationDate,sinaweibo.refreshToken); [self resetButtons]; [self storeAuthData]; } - (void)sinaweiboDidLogOut:(SinaWeibo *)sinaweibo { NSLog(@"sinaweiboDidLogOut"); [self removeAuthData]; [self resetButtons]; } - (void)sinaweiboLogInDidCancel:(SinaWeibo *)sinaweibo { NSLog(@"sinaweiboLogInDidCancel"); } - (void)sinaweibo:(SinaWeibo *)sinaweibo logInDidFailWithError:(NSError *)error { NSLog(@"sinaweibo logInDidFailWithError %@", error); } - (void)sinaweibo:(SinaWeibo *)sinaweibo accessTokenInvalidOrExpired:(NSError *)error { NSLog(@"sinaweiboAccessTokenInvalidOrExpired %@", error); [self removeAuthData]; [self resetButtons]; } #pragma mark - SinaWeiboRequest Delegate - (void)request:(SinaWeiboRequest *)request didFailWithError:(NSError *)error { if ([request.url hasSuffix:@"users/show.json"]) { [userInfo release], userInfo = nil; } else if ([request.url hasSuffix:@"statuses/user_timeline.json"]) { [statuses release], statuses = nil; } else if ([request.url hasSuffix:@"statuses/update.json"]) { UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Alert" message:[NSString stringWithFormat:@"Post status \"%@\" failed!", postStatusText] delegate:nil cancelButtonTitle:nil otherButtonTitles:@"OK", nil]; [alertView show]; [alertView release]; NSLog(@"Post status failed with error : %@", error); } else if ([request.url hasSuffix:@"statuses/upload.json"]) { UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"提示" message:[NSString stringWithFormat:@"发送微博成功 \"%@\"", postImageStatusText] delegate:nil cancelButtonTitle:nil otherButtonTitles:@"确定", nil]; [alertView show]; [alertView release]; NSLog(@"Post image status failed with error : %@", error); } [self resetButtons]; } - (void)request:(SinaWeiboRequest *)request didFinishLoadingWithResult:(id)result { if ([request.url hasSuffix:@"users/show.json"]) { [userInfo release]; userInfo = [result retain]; } else if ([request.url hasSuffix:@"statuses/user_timeline.json"]) { [statuses release]; statuses = [[result objectForKey:@"statuses"] retain]; } //Hui.2 else if ([request.url hasSuffix:@"statuses/update.json"]) { UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Alert" message:[NSString stringWithFormat:@"Post status \"%@\" succeed!", [result objectForKey:@"text"]] delegate:nil cancelButtonTitle:nil otherButtonTitles:@"OK", nil]; [alertView show]; [alertView release]; [postStatusText release], postStatusText = nil; } else if ([request.url hasSuffix:@"statuses/upload.json"]) { UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"提醒" message:[NSString stringWithFormat:@"发送失败 \"%@\" 请检查网络", [result objectForKey:@"text"]] delegate:nil cancelButtonTitle:nil otherButtonTitles:@"确定", nil]; [alertView show]; [alertView release]; [postImageStatusText release], postImageStatusText = nil; } [self resetButtons]; } @end
最后需要在Supporting Files 里面的.plist配置文件里面加载
然后点击测试你的程序吧
相关文章推荐
- iOS学习笔记12-网络(一)NSURLConnection
- 新浪微博iOS版SDK“宝玉XP”框架学习笔记
- cocos2d-x学习笔记12:如何将win32移植到iOS
- 新浪微博iOS版SDK“宝玉XP”框架学习笔记
- IOS学习笔记(12)Storyboards使用方法
- iOS学习笔记12-m3u8文件信息总结
- 新浪微博iOS版SDK“宝玉XP”框架研究的 学习笔记
- iOS学习笔记-097.彩票12——设置1_数据模型创建
- iOS学习笔记38-新浪微博错误代码详解
- 黑马程序员——Objective-C程序设计(第4版)学习笔记之12-预处理程序——黑马 IOS 技术博客
- iOS学习笔记 社交分享
- IOS 学习笔记12 设备旋转
- 【iOS学习笔记 15-12-3】关于masonry布局中的frame和bounds
- 【iOS学习笔记 15-12-31】 UIScrollview与Autolayout的那点事
- IOS 分享学习笔记
- iOS学习笔记–12 IOS之多媒体API
- 【iOS学习笔记 15-12-19】自定义cell侧滑按钮(UIButton)
- iOS学习笔记55- iOS项目集成ShareSDK实现第三方登录、分享、关注等功能。
- iOS学习笔记35-社交分享
- iOS学习笔记12-网络(一)NSURLConnection