新浪微博認證——應用程式支援新浪微博登陸

來源:互聯網
上載者:User

    首先我想告訴大家新浪微博API項目已經轉移到GitHub上了,原Google Code (http://code.google.com/p/android-weibo-sdk/downloads/list)的工程已經不更新了。如果使用舊的代碼運行登陸,會彈出網頁錯誤的Bug。最新的地址在:https://github.com/mobileresearch/weibo_android_sdk/downloads

    介面也從之前的V1轉換到V2了,具體資訊可參照:http://open.weibo.com/wiki/V1_To_V2。但是如果你跟我一樣是從零開始,就不用管這些了,直接去github上下載最新的SDK就行了。

    源碼下載完後解壓:

     

    哎,本來不想管這裡面各個檔案夾都是幹嘛的……但是想起部落格那句座右銘……我還是遇到問題別偷懶,好好想問題吧……

    weibo.sdk.android    ----  這個是sina微博登陸認證的源碼是個Android Lib project,何為ALP這裡就不解釋了,同學們可以參考(http://www.mielf.net/featherelf/simple-android-library-project)這個連結。

    weibo.sdk.android.api  ----  這個是sina微博互動介面的源碼是個ALP。

    weibo.sdk.androi.sso  ----  這個是sina微薄SSO源碼,不懂SSO的請看百度百科:http://baike.baidu.com/view/190743.htm

    weibo.sdk.android.sso.demo  ----  最後一個才是我們需要的Demo,我們在Eclipse中引入這一個工程即可。

    亂七八糟的Doc  ----  估計是linux下寫的吧還是怎麼的?反正是技術說明文檔,新浪開發真懶,這文檔裡面有些內容已經無效了,比如Android許可權聲明那塊,反正大家隨便看看吧。

    weibo.sdk.android.sso.jar  ----  這個是大家需要引入到自己工程中的jar包。

    這篇文章我們不多說別的,僅僅只說調用sina介面登陸認證,其餘功能大家自己看官方Demo。

    首先我們建立一個Android工程,取名LoginTest

    建立一個布局檔案:

    

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent" >    <TextView        android:id="@+id/textView1"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_centerHorizontal="true"        android:layout_centerVertical="true"        android:text="@string/hello_world"        tools:context=".MainActivity" />    <Button        android:id="@+id/button1"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentTop="true"        android:layout_alignRight="@+id/textView1"        android:layout_marginRight="46dp"        android:layout_marginTop="60dp"        android:text="Button" /></RelativeLayout>

    建立Acivity,裡面放入一個Button,點擊Button的時候彈出新浪認證視窗,認證成功後顯示認證文字在介面上。

    

package com.example.logintest;import java.text.SimpleDateFormat;import android.app.Activity;import android.os.Bundle;import android.util.Log;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;import android.widget.Toast;import com.weibo.sdk.android.Oauth2AccessToken;import com.weibo.sdk.android.Weibo;import com.weibo.sdk.android.WeiboAuthListener;import com.weibo.sdk.android.WeiboDialogError;import com.weibo.sdk.android.WeiboException;public class MainActivity extends Activity {private Weibo mWeibo;private static final String CONSUMER_KEY = "966056985";// 替換為開發人員的appkey,例如"1646212860";private static final String REDIRECT_URL = "http://www.sina.com";public static Oauth2AccessToken accessToken;private TextView mText;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mWeibo = Weibo.getInstance(CONSUMER_KEY, REDIRECT_URL);Button btn = (Button) findViewById(R.id.button1);mText = (TextView) findViewById(R.id.textView1);btn.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {mWeibo.authorize(MainActivity.this, new AuthDialogListener());}});}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.activity_main, menu);return true;}class AuthDialogListener implements WeiboAuthListener {@Overridepublic void onComplete(Bundle values) {String token = values.getString("access_token");String expires_in = values.getString("expires_in");MainActivity.accessToken = new Oauth2AccessToken(token, expires_in);if (MainActivity.accessToken.isSessionValid()) {String date = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(new java.util.Date(MainActivity.accessToken.getExpiresTime()));mText.setText("認證成功: \r\n access_token: " + token + "\r\n"+ "expires_in: " + expires_in + "\r\n有效期間:" + date);try {Class sso = Class.forName("com.weibo.sdk.android.api.WeiboAPI");// 如果支援weiboapi的話,顯示api功能示範入口按鈕} catch (ClassNotFoundException e) {// e.printStackTrace();Log.i("H3c", "com.weibo.sdk.android.api.WeiboAPI not found");}AccessTokenKeeper.keepAccessToken(MainActivity.this,accessToken);Toast.makeText(MainActivity.this, "認證成功", Toast.LENGTH_SHORT).show();}}@Overridepublic void onError(WeiboDialogError e) {Toast.makeText(getApplicationContext(),"Auth error : " + e.getMessage(), Toast.LENGTH_LONG).show();}@Overridepublic void onCancel() {Toast.makeText(getApplicationContext(), "Auth cancel",Toast.LENGTH_LONG).show();}@Overridepublic void onWeiboException(WeiboException e) {Toast.makeText(getApplicationContext(),"Auth exception : " + e.getMessage(), Toast.LENGTH_LONG).show();}}}

其中會用到AccessTokenKeeper對象,這個對象用來儲存已認證的資訊的,可以從Demo中擷取,直接複製粘貼。

最後是添加許可權(那個亂七八糟.doc裡描述稍微有點錯誤):

    <uses-permission android:name="android.permission.INTERNET" >    </uses-permission>    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" >    </uses-permission>    <uses-permission android:name="android.permission.WRITE_APN_SETTINGS" >    </uses-permission>    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" >    </uses-permission>    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

啊,就是這樣。

然後剛開始我一直在糾結那個新浪APP_KEY也就是應用程式中的CONSUMER_KEY,我看獲得APPKEY必須要有作品上傳,但是現在我作品還沒有做出來怎麼上傳啊,這就是個雞生蛋蛋生雞的Bug啊。後來想想應該是我想太多了!APPKEY的作用應該就是在認證登陸的時候彈出的登陸框中顯示你的應用程式名稱,比如Demo中顯示是“掌中新浪Android版”,我們在做應用開發的時候完全可以參照Demo先做功能,等全部功能完成之後再上傳APP擷取APPKEY,然後替換即可。

本文純屬我今天初略研究所寫,如有不對的地方,請各位指出!
最後附上新浪微薄API:http://open.weibo.com/wiki/%E5%B9%B3%E5%8F%B0%E6%A6%82%E8%BF%B0

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.