一.申请开发者账号,创建应用
在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配置文件里面加载
然后点击测试你的程序吧