分享到新浪微博
? ? 最近要做的應(yīng)用需要有分享到新浪微博的功能,就上網(wǎng)上查了一些資料,感覺(jué)網(wǎng)上的東西很多,sdk有好幾個(gè)版本,剛開(kāi)始令自己很迷惑,最后慢慢理清了思路。把看的內(nèi)容整理一下,和大家共同學(xué)習(xí)交流。
? ??
?一 認(rèn)證的流程:
? ? ?需要需要在http://open.weibo.com/development創(chuàng)建一個(gè)應(yīng)用,從而獲取應(yīng)用的app key和app secret。
? ? 選用的sdk是“JimLiu-WeiboSDK”,使用OAuth授權(quán)認(rèn)證。
? ??JimLiu-WeiboSDK工程內(nèi)容很多,最核心的是目錄:WeiboEngine。
? ? ? ? ?1. 目錄WeiboEngine下的目錄OAuthConsumer是一個(gè)第三方庫(kù),用于實(shí)現(xiàn)OAuth授權(quán)與認(rèn)證。
? ? ? ? ?2. 文章http://code.google.com/p/oauthconsumer/wiki/UsingOAuthConsumer描述了使用OAuthConsumer進(jìn)行授權(quán)和認(rèn)證的流程。
? ? ? ? ?3. 目錄WeiboEngine下的文件OAuthEngine.h、OAuthEngine.m封裝了http://code.google.com/p/oauthconsumer/wiki/UsingOAuthConsumer描述了使用OAuthConsumer描述的使用OAuthConsumer進(jìn)行授權(quán)和認(rèn)證的接口.
? ? ? ? ?4.?OAuthController.h、OAuthController.m用于完成授權(quán)和認(rèn)證。
? ? ? ? ? ? ? ? ?4.1 利用在新浪微博注冊(cè)的App Key和App Secret向"http://api.t.sina.com.cn/oauth/request_token"獲取未經(jīng)用戶授權(quán)的request token.
? ? ? ? ? ? ? ? ?4.2 使用“未經(jīng)用戶授權(quán)的request token”向”http://api.t.sina.com.cn/oauth/authorize“申請(qǐng)授權(quán)。此時(shí)會(huì)顯示一個(gè)Web界面,需要用戶輸入新浪微博的用戶名和密碼,用戶進(jìn)行授權(quán)后,web界面會(huì)返回一個(gè)pin值。
? ? ? ? ? ? ? ? ?4.3 利用web界面返回的pin值,向"http://api.t.sina.com.cn/oauth/access_token"申請(qǐng)存取權(quán)限。
? ? ? ? ?5. 完成授權(quán)后,就可以利用WeiboClient.h、WeiboClient.m的接口發(fā)表微博及獲取好友等的信息。
? ? ? ? ?
? ? ? 二:“JimLiu-WeiboSDK”的使用
? ? ? ? ?使用“JimLiu-WeiboSDK”進(jìn)行授權(quán)認(rèn)證非常簡(jiǎn)單,只需要把“JimLiu-WeiboSDK”的目錄WeiboEngine拷貝出來(lái)。應(yīng)用進(jìn)行授權(quán)時(shí),代碼可以簡(jiǎn)單的寫(xiě)為:
? ? ? ? ? ? ? ? ? ? OAuthEngine *engine = [[OAuthEngine alloc] initOAuthWithDelegate: self];
? ? ? ? ? ? ? ? ? ? engine.consumerKey = kOAuthConsumerKey; ?///?kOAuthConsumerKey為在新浪微博注冊(cè)的App Key
? ? ? ? ? ? ? ? ? ? engine.consumerSecret = kOAuthConsumerSecret; ?///?kOAuthConsumerSecret為在新浪微博注冊(cè)的App Secret
? ? ? ? ? ? ? ? ? ? ?/// 獲取進(jìn)行認(rèn)證的視圖控制器
? ? ? ? ? ? ? ? ? ? UIViewController *controller = [OAuthController controllerToEnterCredentialsWithEngine: _engine delegate: self];
? ? ? ? ? ? ? ? ? ? /// 如果沒(méi)有認(rèn)證過(guò),則加載認(rèn)證的界面
? ? ? ? ? ? ? ? ? ? ?if (controller)?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?[self presentModalViewController: controller animated: YES];
? ? ? ? ? ? ? ? ? ? else {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?/// 如果已經(jīng)認(rèn)證過(guò),則執(zhí)行程序流程
? ? ? ? ? ? ? ? ? ? ? ? ? ? [OAuthEngine setCurrentOAuthEngine:_engine
? ? ? ? ? ? ? ? ? ? ? ];
? ? ? ? ? ?另外如果沒(méi)有認(rèn)證過(guò),當(dāng)認(rèn)證成功完成后,文件OAuthController.m中的函數(shù)- (void) gotPin: (NSString *) pin會(huì)被調(diào)用。可以在該函數(shù)中執(zhí)行
[self performSelector: @selector(dismissModalViewControllerAnimated:) withObject: (id) kCFBooleanTrue afterDelay: 0.0];關(guān)閉認(rèn)證視圖,顯示應(yīng)用界面。
最后應(yīng)用可以實(shí)現(xiàn)保存和獲取認(rèn)證信息的代理函數(shù):
1.?
- (void) storeCachedOAuthData: (NSString *) data forUsername: (NSString *) username
2.?
- (NSString *) cachedOAuthDataForUsername: (NSString *) username
3.?
- (void)removeCachedOAuthDataForUsername:(NSString *) username
總結(jié)
- 上一篇: 传奇外网架设教程
- 下一篇: 云服务器 架设传奇_阿里云虚拟主机,EC