iOS5.0以上使用新浪微博開放平臺OAuth 續(及解決登陸無效問題)

 

新浪微博開放平臺爲第三方應用提供了簡便的合做模式,知足了手機用戶和平板電腦用戶隨時隨地分享信息的需求。經過調用平臺的api便可實現不少微博上的功能。web

本篇主要目的是記錄新浪微博移動SDK iOS版本的在iOS5下的嵌入和使用。json

一、申請一個新浪微博的移動應用 。

申請地址:http://open.weibo.com/development,申請後獲得App key 和 App Secretapi

二、下載iOS_sdk

下載地址:http://open.weibo.com/wiki/SDK#iOS_SDK  ,下載第一個就ok了。安全

三、新建一個項目Sina_weibo,選擇single View app。並且使用5.0後的ARC特性 。 導入解壓後的sdk

導入SDKapp

四、適配SDK在arc環境下運行

這時候運行程序,你會發現不少關於ARC的錯誤,由於sdk裏是沒有使用arc的。這時候若是想sdk的文件不參與arc方式的編譯,那就須要作下設置,在Build Phases裏添加「-fno-objc-arc」標示ide

 

雙擊須要標識的文件,輸入-fno-objc-arc。函數

這樣weibo SDK的文件就不會以arc的方式編譯了。post

五、 在本身的工程裏面增長Security.framework。SDK須要使用Security.framework將OAuth認證之後的token放到keyChain裏面從而增長整個工程的安全性。

這時候運行,程序就編譯運行正常了學習

六、其餘的和SDK裏的Demo同樣了

登陸調用ui

    [weiBoEnginelogIn]; 

註銷調用

    [weiBoEnginelogOut];

發微博:

能夠調用SDK默認的界面發送:

 

    WBSendView *sendView = [[WBSendViewalloc] initWithAppKey:appKeyappSecret:appSecrettext:@"test"image:[UIImageimageNamed:@"bg.png"]];

    [sendView setDelegate:self];

    [sendView show:YES];

對應的發送微博的api是:statuses/upload 發送微博並上傳圖片。若是在微博上顯示地圖,那就發送經緯度參數,多加上

lat false float 緯度,有效範圍:-90.0到+90.0,+表示北緯,默認爲0.0。
long false float 經度,有效範圍:-180.0到+180.0,+表示東經,默認爲0.0。

七、調用自定義api

6步驟裏調用的是sdk裏封裝好的,那微博這麼api和功能,怎麼調用呢?

咱們試着獲取我的信息

  1. NSMutableDictionary *params = [NSMutableDictionary dictionaryWithCapacity:2];  
  2.     [params setObject:[engine accessToken]forKey:@"access_token"];  
  3.     [params setObject:[engine userID]forKey:@"uid"];  
  4.     NSLog(@"params:%@", params);  
  5.       
  6.     [engine loadRequestWithMethodName:@"users/show.json"  
  7.                            httpMethod:@"GET"  
  8.                                params:params  
  9.                          postDataType:kWBRequestPostDataTypeNone  
  10.                      httpHeaderFields:nil];  

 

params的參數是必須的。

返回的數據參考接口http://open.weibo.com/wiki/2/users/show

這樣能夠獲取微博本身的暱稱等信息。

 

微博全部api文檔都在這個頁面http://open.weibo.com/wiki/API%E6%96%87%E6%A1%A3_V2,使用的方法和例子都有。

須要什麼用什麼接口,把loadRequestWithMethodName 改變成本身須要的接口,params參數改爲須要的參數,就能夠了。

 

有的接口是不須要params的,好比

statuses/friends_timeline.json獲取關注人的微博,這裏params能夠是nil.

PS:本篇記錄用的是Oauth認證,xauth認證須要審覈資格才能使用的。 

 

八、項目源碼下載地址:http://download.csdn.net/detail/totogo2010/4633077

繼上篇 iOS學習之iOS5.0以上 使用新浪微博開放平臺OAuth

事後,新浪微博受權彈出的網頁又有調整,中間還有過癱瘓狀況。若是按上篇作出來的受權頁面就成這樣了:

第一:網頁頁面變大了,

第二:沒有了取消按鈕。

 

根據這個狀況在sina weibo SDK裏作了寫調整

調整:增長一個關閉按鈕,彈出窗口大小。

在WBAuthorizeWebView.m文件的方法:bounceOutAnimationStopped裏添加按鈕:

  1. UIButton *closeButton = [UIButton buttonWithType:UIButtonTypeCustom];  
  2.     [closeButton setFrame:CGRectMake(280, 430, 60, 60)];  
  3.     [closeButton setImageEdgeInsets:UIEdgeInsetsMake(3, 0, 0, 0)];  
  4.     [closeButton setImage:[UIImage imageNamed:@"close"] forState:UIControlStateNormal];  
  5.       
  6.     [closeButton addTarget:self action:@selector(hideAndCleanUp) forControlEvents:UIControlEventTouchUpInside];  
  7.     [self addSubview:closeButton];  


close.png圖片sdk裏自帶就有。hideAndCleanUp方法就是把窗口移除。hideAndCleanUp方法原來就有。運行效果:

看右下角有個關閉按鈕,爲何放在右下角呢,由於右上角有個註冊按鈕,容易被點到。一會把網頁窗口最大化了就能看到了。

擴大窗口

在WBAuthorizeWebView.m文件的方法- (void)sizeToFitOrientation:(UIInterfaceOrientation)orientation 修改以下:

上面的尺寸是橫屏的時候的,我修改了豎屏時的窗口的大小。

  1. - (void)sizeToFitOrientation:(UIInterfaceOrientation)orientation  
  2. {  
  3.     [self setTransform:CGAffineTransformIdentity];  
  4.       
  5.     if (UIInterfaceOrientationIsLandscape(orientation))  
  6.     {  
  7.         [self setFrame:CGRectMake(0, 0, 480, 320)];  
  8.         [panelView setFrame:CGRectMake(10, 30, 460, 280)];  
  9.         [containerView setFrame:CGRectMake(10, 10, 440, 260)];  
  10.         [webView setFrame:CGRectMake(0, 0, 440, 260)];  
  11.         [indicatorView setCenter:CGPointMake(240, 160)];  
  12.     }  
  13.     else  
  14.     {  
  15.         [self setFrame:CGRectMake(0, 5, 320, 470)];  
  16.         [panelView setFrame:CGRectMake(0, 5, 320, 470)];  
  17.         [containerView setFrame:CGRectMake(0, 5, 320, 460)];  
  18.         [webView setFrame:CGRectMake(0, 0, 320, 460)];  
  19.         [indicatorView setCenter:CGPointMake(160, 240)];  
  20.     }  
  21.       
  22.     [self setCenter:CGPointMake(160, 240)];  
  23.       
  24.     [self setTransform:[self transformForOrientation:orientation]];  
  25.       
  26.     previousOrientation = orientation;  
  27. }  

運行效果:

這個狀態差很少就能夠了。

 

還有在調用WeiBoEngine 的Logout 登出無效的狀況。修改以下:

在WBAuthorize.m文件,把startAuthorize函數修改以下:

  1. NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys:appKey, @"client_id",  
  2.                                                                       @"code", @"response_type",  
  3.                                                                       redirectURI, @"redirect_uri",   
  4.                                                                       @"mobile", @"display",  
  5.                                                                       @"true",@"forcelogin", nil];  


就是在 params裏添加@」true」,@」forcelogin」。

以上是使用新浪微博sdk開發遇到的問題和解決的一些方法。

修改過的項目代碼:http://download.csdn.net/detail/totogo2010/4928029

 

來源:http://blog.csdn.net/totogo2010/article/details/8435174

相關文章
相關標籤/搜索