iOS学习笔记12—新浪微博分享
来源:互联网 发布:js escape编码中文 编辑:程序博客网 时间:2024/05/01 22:02
一.申请开发者账号,创建应用
在http://open.t.sina.com.cn
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—新浪微博分享
- ios 新浪微博分享
- ios新浪微博分享
- ios 新浪微博分享
- 学习笔记之——新浪微博第三方登录分享接口
- iOS 新浪微博 分享微博
- ios 分享到新浪微博
- IOS 分享新浪微博开发通知
- ios 分享到新浪微博
- ios 分享到新浪微博
- iOS ShareSDK 分享到新浪微博
- IOS新浪微博分享链接
- iOS ShareSDK 分享到新浪微博
- 新浪微博iOS版SDK框架学习笔记
- iOS学习笔记38-新浪微博错误代码详解
- 新浪微博分享
- 新浪微博分享
- 新浪微博分享
- HDFS中namenode部分概述(一)
- QT中关闭应用程序和窗口的函数
- Javascript注释规范
- UIWebView体系结构(一)概貌
- php获取当前页面地址栏中的地址
- iOS学习笔记12—新浪微博分享
- UIWebView结构体系(二)UIWebTiledView和WAKWindow
- poj2947
- node.js导出excel表格----excel-export
- [ git ] git托管代码2
- 三种东西永远不要放到数据库里
- 大脑的弥天大谎:为什么我们误把渴望当幸福
- 字节顺序 & 网络字节顺序
- ios 中 block 实现的探究