微博Android平台SDK文档
博Android平臺SDK文檔
編號:WEIBO_ANDROID_SDK?
版本:WEIBO_ANDROID_SDK V3.1.2??
?
修訂記錄:
| 時間 | 文檔版本 | 修訂人 | 備注 |
| 2012/7/20 | 2.0.0 | ? | 初稿 |
| 2012/8/2 | 2.0.0 | ? | ? |
| 2013/4/17 | 2.1.0 | ? | 新增分享微博 |
| 2013/9/12 | 2.3.0 | ? | 新增登入登出按鈕、好友邀請接口 |
| 2013/11/11 | 2.4.0 | ? | 重大版本變更: ?? 授權(quán)、分享等代碼的重構(gòu) ?? 代碼、文檔等規(guī)范化 ?? 開源OpenAPI部分代碼 |
| 2014/3/7 | 2.5.0 | ? | ?? 重構(gòu)網(wǎng)絡(luò)模塊代碼 ?? 提供同步和異步的網(wǎng)絡(luò)請求接口 ?? 提供網(wǎng)絡(luò)模塊常用接口,如獲取用戶信息 ?? 提供網(wǎng)絡(luò)請求后的數(shù)據(jù)結(jié)構(gòu),如User、微博信息流等數(shù)據(jù)結(jié)構(gòu) ?? 修正若干BUG ?? 簡化文檔 |
| 2014/11/19 | 3.0.0 | ? | ?? 優(yōu)化網(wǎng)頁授權(quán) ?? 優(yōu)化網(wǎng)頁分享 ?? 增加社會化評論組件 ?? 增加社會化關(guān)注組件 ? |
| 2015/7/6 | 3.1.1 | ? | ?? 增加手機短信注冊入口? 修改文檔說明 ?? 增加微博支付接口調(diào)用說明 ?? 增加刷新接口說明 |
| 2015/8/12 | 3.1.2 | ? | ?? 增加游戲接口 ?? 修改64位手機so讀取錯誤 |
?
目錄
目錄
目錄...2
1.?????概述及名詞解釋... 1
1.1 認(rèn)證授權(quán)... 1
1.2 名詞解釋... 1
2.?????功能列表... 1
2.1 認(rèn)證授權(quán)... 1
2.2 微博分享... 2
2.3 登錄/注銷按鈕... 2
2.4 開放接口... 2
3.?????運行示例代碼... 3
3.1 導(dǎo)入工程... 3
3.2 修改debug.keystore. 3
3.3 編譯運行... 4
4.?????微博SDK及DEMO工程目錄結(jié)構(gòu)及分析... 5
4.1 閉源部分結(jié)構(gòu)分析... 5
4.2 開源部分結(jié)構(gòu)分析... 6
4.3 Demo部分結(jié)構(gòu)分析... 6
5.?????集成前準(zhǔn)備... 7
5.1 申請應(yīng)用程序的APP_KEY. 7
5.2 注冊應(yīng)用程序的包名和簽名... 7
5.3 選擇應(yīng)用的集成方式... 8
5.4 在應(yīng)用中添加SDK所需要的權(quán)限... 9
6.?????授權(quán)分享等示例代碼分析... 10
6.1 認(rèn)證授權(quán)... 10
6.2 分享微博... 13
6.3 一鍵登錄/注銷按鈕... 17
7.?????OpenAPI示例代碼分析... 19
7.1???????????用戶信息接口... 19
7.2 邀請好友接口... 20
7.3 刷新token? 授權(quán)日期 接口... 21
8.?????社會化組件... 23
8.1關(guān)注組件(AttentionComponentView)...23
8.2 評論組件(CommentComponentView)... 24
9. 支付組件... 25
9.1支付示例...25
9.2支付參數(shù)說明...26
9.3支付接口錯誤返回碼說明...27
9.4簽名機制...28
10????????????問題... 30
10.1?????????授權(quán)不成功問題... 30
10.2 如何實現(xiàn)LinkCard效果?... 30
10.3 如何實現(xiàn)附件欄集成分享?... 30
10.4 第三方如何申請接口權(quán)限?... 31
11?????????????第三方App 微博下載合作接口... 31
12?????????????游戲接入... 32
?
1.??概述及名詞解釋
1.1認(rèn)證授權(quán)
新浪微博Android SDK為開發(fā)者提供了Oauth2.0授權(quán)認(rèn)證,并集成SSO登錄功能,使第三方應(yīng)用無需了解復(fù)雜的驗證機制即可進行授權(quán)登錄操作,并提供微博分享功能,第三方應(yīng)用可直接通過微博客戶端進行分享。
本文檔介紹了新浪微博Android SDK的三種授權(quán)方式,各種分享、獲取用戶信息等常用接口,并給出簡單的示例分析,幫助第三方開發(fā)者快速集成應(yīng)用。
1.2名詞解釋
| 名詞 | 注解 |
| AppKey | 分配給每個第三方應(yīng)用的App Key,用于鑒權(quán)身份,顯示來源等功能。 |
| RedirectURI | 第三方應(yīng)用授權(quán)回調(diào)頁面。 授權(quán)回調(diào)頁對移動客戶端應(yīng)用來說對用戶是不可見的,所以定義為何種形式都將不影響,但是沒有定義將無法使用SDK認(rèn)證登錄。建議使用默認(rèn)回調(diào)頁https://api.weibo.com/oauth2/default.html 可以在“新浪微博開放平臺->我的應(yīng)用->應(yīng)用信息->高級應(yīng)用->授權(quán)設(shè)置->應(yīng)用回調(diào)頁”中找到。 |
| Scope | Scope是OAuth2.0新版授權(quán)頁的一個功能,通過scope平臺將開放更多的微博核心功能給開發(fā)者,同時也加強用戶隱私保護,提升用戶體驗,用戶在新OAuth2.0授權(quán)頁中有權(quán)利選擇賦予應(yīng)用的功能。 |
| AccessToken | 表示用戶身份的Token,用于微博OpenAPI的調(diào)用。 |
| Oauth2.0 Web 授權(quán) | 通過WebView進行授權(quán),并返回Token信息。 |
| SSO授權(quán) | 通過喚起微博客戶端進行授權(quán),并返回Token信息。 |
| Code授權(quán) | 通過應(yīng)用的APP_ID和APP_KEY來獲取Token,不需要應(yīng)用的包名和簽名 |
2.??功能列表
2.1認(rèn)證授權(quán)
目前微博SDK為開發(fā)者提供三種授權(quán)方式:
?? SSO授權(quán):僅當(dāng)手機安裝新浪微博。客戶端時使用 SSO授權(quán)登陸,實現(xiàn)見6.1.1
?? Web 授權(quán):在沒有客戶端的情況下,可直接使用該授權(quán),實現(xiàn)見6.1.2
?? SSO+Web? 授權(quán):如果手機端安裝了新浪微博客戶端的話會默認(rèn)發(fā)起SSO授權(quán),反之則進行Web授權(quán)(推薦使用) ,實現(xiàn)見6.1.3
2.2微博分享
通過微博SDK,第三方應(yīng)用能夠分享文字、圖片、視頻、音樂等內(nèi)容,目前分享有三種方式:
?? 有微博客戶端情況
1.?????通過第三方應(yīng)用喚起微博客戶端進行分享(該分享方式為第三方客戶端通常的使用方式),實現(xiàn)見6.2.1
2.?????通過微博客戶端喚起第三方應(yīng)用進行分享(該分享方式需要合作接入,參考http://t.cn/aex4JF),實現(xiàn)見6.2.2
?? 無微博客戶端情況,實現(xiàn)見6.2.3
3.?????通過OpenAPI進行分享,直接使用StatusesAPI中的upload、update或uploadUrlText函數(shù)進行分享,或直接使用AsyncWeiboRunner#requestAsync方法,自己進行拼接參數(shù)進行HTTP請求實現(xiàn)分享。
2.3登錄/注銷按鈕
微博SDK目前提供了兩類登錄按鈕:一種是一鍵登陸按鈕,一種是登陸/注銷按鈕,兩者都是調(diào)用SSO登錄接口。
2.4開放接口
微博SDK目前提供了一個OpenAPI接口調(diào)用框架,并封裝了一些簡單的開放接口,以供大家參考:
| LogoutAPI | 注銷接口 | 授權(quán)回收接口,取消用戶的授權(quán) |
| InviteAPI | 邀請接口 | 好友邀請接口,向自己的微博互粉好友發(fā)送私信邀請、禮物 |
| StatusesAPI | 微博接口 | 獲取微博信息、刪除微博、發(fā)送微博、獲取微博官方表情等接口 |
| FavoritesAPI | 收藏接口 | 獲取收藏列表、收藏信息、收藏標(biāo)簽,增刪改收藏列表等接口 |
| CommentsAPI | 評論接口 | 獲取評論列表、評論信息,刪除、回復(fù)評論等接口 |
| FriendshipsAPI | 關(guān)系接口 | 獲取關(guān)注列表、關(guān)注用戶Id、粉絲列表,關(guān)注或取消關(guān)注等接口 |
| GroupAPI | 分組接口 | 獲取好友分組列表、好友分組的微博列表,增刪改好友分組等接口 |
| LocationAPI | 地理信息 | 獲取坐標(biāo)、返回實際位置信息等接口 |
| PlaceAPI | 位置服務(wù) | 獲取用戶、用戶與好友、某個位置點、周邊的位置動態(tài)等接口 |
| ShortUrlAPI | 微博短鏈接 | 轉(zhuǎn)換長短鏈接,獲取鏈接點擊數(shù)、來源、微博內(nèi)容、評論數(shù)等接口 |
| AccountAPI | 賬號接口 | 獲取登錄用戶的信息、API訪問頻率限制、學(xué)校列表、退出等接口 |
| ActivityInvokeAPI | 微博相關(guān)頁 | 調(diào)起微博客戶端發(fā)送微博、查看周邊人、打開個人資料等頁面接口 |
| CommonAPI | 公共服務(wù) | 獲取城市列表、國家列表、時區(qū)配置表等接口 |
| RegisterAPI | 注冊接口 | 根據(jù)用戶填寫的信息驗證用戶填寫的昵稱是否可用接口 |
| SearchAPI | 搜索接口 | 搜索用戶、微博、學(xué)校、公司、應(yīng)用時的聯(lián)想搜索建議等接口 |
| SuggestionsAPI | 推薦接口 | 獲取熱門用戶列表、感興趣的人、推薦相關(guān)微博、精品推薦等接口 |
| TagsAPI | 標(biāo)簽接口 | 獲取用戶的標(biāo)簽列表、創(chuàng)建或刪除標(biāo)簽等接口 |
| TrendsAPI | 話題接口 | 獲取話題列表、熱門話題、關(guān)注或取消關(guān)注某話題等接口 |
| UsersAPI | 用戶接口 | 獲取用戶信息、用戶最新的一條微博信息等接口 |
3.??運行示例代碼
為了方便第三方應(yīng)用更快的集成微博SDK,更清晰的了解目前微博SDK所提供的功能,可在GitHub(https://github.com/mobileresearch/weibo_android_sdk)下載整個示例工程以及對應(yīng)的APK安裝包。運行工程可以通過以下兩種方式進行運行:
?? 直接安裝WeiboSDKDemo.apk至手機進行運行
?? 在Eclipse中導(dǎo)入并運行WeiboSDKDemo工程
我們簡要描述一下運行Demo工程的步驟:
3.1導(dǎo)入工程
在Eclipse中,點擊FileàImportàExisting Projects intoWorkspace,輸入正確的路徑,導(dǎo)入工程,如下圖:
?
注意:目前整個工程全采用中文注釋,為了防止亂碼滋生,請修改文本編碼方式為UTF-8。
更改方式:EclipseàWindowàGeneralàWorkspaceàTextfile encoding。
3.2修改debug.keystore
MD5工具是根據(jù)keystore來生成簽名的,不同的keystore生成的簽名是不一樣的。此Demo的簽名是用官網(wǎng)提供的keystore生成的,若要順利運行Demo程序,需要進行設(shè)置或是替換keystore,兩種方法選擇一種操作即可:
方式一:替換keystore:把Android默認(rèn)的debug.keystore(在C:\Users\XXXXX\.android目錄下)替換成官方在GitHub上提供的debug.keystore。
方式二:在Eclipse中設(shè)置工程keystore:在Eclipse中點擊“WindowsàPreferencesàAndroidàBuild”,在Custom debug keystore中選擇Demo中的debug.keystore,如下圖,點擊ApplyàOK,Demo即可正常運行。
注意:這一步是必須的,如果沒有替換,demo程序在運行時將無法正確的授權(quán)成功。用戶在替換前,最好先備份一下原始的debug.keystore。GitHub中debug.keysotre是新浪官方的,除了編譯運行官方DEMO外,不要直接使用它,出于安全的考慮,用戶應(yīng)該為自己的應(yīng)用提供一份keysotre。
3.3編譯運行
在編譯前,先Clean一下工程,然后右鍵點擊工程àRun AsàAndroid Application,即可運行。
默認(rèn)的編譯target是Android 2.3.3,第三方可以自行修改成合適的版本。
?
4.??微博SDK及DEMO工程目錄結(jié)構(gòu)及分析
微博SDK目前以是部分開源的形式提供給第三方開發(fā)者的,簡單來說,可以分為以下三部分:
?? 閉源部分:weibosdkcore.jar,該JAR包集成了微博授權(quán)、SSO登錄以及分享等核心功能。另外,在V2.5.0中,我們將網(wǎng)絡(luò)模塊框架也加入其中,方便開發(fā)者進行OpenAPI的網(wǎng)絡(luò)請求。
?? 開源部分:WeiboSDK工程(Library),該工程引用了weibosdkcore.jar,這里面主要是對OpenAPI進行了簡單的封裝,第三方可以參考使用流程,模仿并添加自己需要的接口,利用OpenAPI接口獲取用戶信息,分享微博等。
?? Demo部分:WeiboSDKDemo工程,該工程引用了WeiboSDK工程,提供了目前微博所支持的部分功能的示例代碼。
注意:第三方在使用時,如果只需要實現(xiàn)授權(quán)和分享功能,可直接使用weibosdkcore.jar;如果想使用其它功能,可直接導(dǎo)入WeiboSDK工程。如何導(dǎo)入WeiboSDK工程請詳見:集成步驟及示例分析
4.1閉源部分結(jié)構(gòu)分析
4.2開源部分結(jié)構(gòu)分析
4.3Demo部分結(jié)構(gòu)分析
?
5.??集成前準(zhǔn)備
5.1申請應(yīng)用程序的APP_KEY
?
用戶首先需要在微博開放平臺上對應(yīng)用進行注冊,并獲取APP_KEY,添加應(yīng)用的授權(quán)回調(diào)頁(Redirect URI)。詳情請仔細閱讀:移動客戶端接入(http://t.cn/aex4JF)
5.2注冊應(yīng)用程序的包名和簽名
對應(yīng)用授權(quán)前,需要在微博開放平臺上注冊應(yīng)用程序的包名和簽名后。
?
注意:包名和簽名未注冊,或者簽名注冊不正確,都會導(dǎo)致無法授權(quán)。
????? 手機時間不對也會造成授權(quán)不成功。
?
??應(yīng)用程序包名:指AndroidManifest.xml文件中,package標(biāo)簽所代表的內(nèi)容。
??應(yīng)用程序簽名:該簽名是通過官方提供的簽名工具生成的MD5值 (獲取簽名按下圖所示)
下圖即為注冊應(yīng)用程序的包名和簽名的頁面,可以在新浪微博“開放平臺à我的應(yīng)用à應(yīng)用信息à應(yīng)用基本信息”處找到,點擊編輯按鈕即可注冊。
?
?
簽名軟件下載地址:
?
https://github.com/sinaweibosdk/weibo_android_sdk
?
?
?
F?使用方式:首先要安裝您需要簽名的應(yīng)用,然后再安裝該工具,安裝完后,輸入您的應(yīng)用程序的包名,點擊生成按鈕,即可獲得MD5簽名,如下圖所示。
F??
請注意:要簽名的第三方應(yīng)用程序必須安裝在該設(shè)備上才能夠生成對應(yīng)的MD5簽名
?
?
?
、
5.3選擇應(yīng)用的集成方式
在集成微博SDK前,有兩種方式來集成微博SDK:
??直接導(dǎo)入weibosdkcore.jar:適用于只需要授權(quán)、分享、網(wǎng)絡(luò)請求框架功能的項目
??引用WeiboSDK工程(Library):適用于微博授權(quán)、分享,以及需要登陸按鈕、調(diào)用OpenAPI的項目
???
下面簡述下兩種導(dǎo)入方式的實現(xiàn):
方式一:直接導(dǎo)入weibosdkcore.jar?
F? 將官方的提供SDK JAR包(weibosdkcore.jar)放到工程的libs目錄下
F? 添加JAR包:工程à右鍵àpropertiesàjavabuild pathàlibrariesàaddexternal jar
方式二:引用WeiboSDK工程(Library)
F? 將WeiboSDK工程整個目錄拷貝到和你自己的工程相同的目錄下
F?
在你自己的工程中,添加WeiboSDK工程的引用:工程à右鍵àpropertiesàAndroidàAddà選擇工程,具體如下圖所示:
注意: 無論使用哪一種方式,都需要先將demo 中l(wèi)ib目錄下的對應(yīng)的全部 libweibosdkcore.so文件目錄拷貝到你的目標(biāo)工程中Demo工程中的weibosdkcore.jar與github上的weibosdkcore_v3.x.x.jar包是同一個。
5.4在應(yīng)用中添加SDK所需要的權(quán)限 ????
| <uses-permissionandroid:name="android.permission.INTERNET"/> <uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE"/> <uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/> |
打開AndroidManifest.xml文件,將SDK需要的權(quán)限添加到該文件中:
6.??授權(quán)分享等示例代碼分析
6.1認(rèn)證授權(quán)
目前微博SDK提供四種授權(quán)方式,這四種授權(quán)方式都需要先實現(xiàn)以下三步:
1)????替換成自己應(yīng)用的APP_KEY等參數(shù)
| public interface Constants { ??? public static final String APP_KEY????? ="2045436852";?????? ?? // 應(yīng)用的APP_KEY ??? public static final String REDIRECT_URL ="http://www.sina.com";//應(yīng)用的回調(diào)頁 ??? public static final String SCOPE = ??????????????????????????? ???//應(yīng)用申請的高級權(quán)限 ??????????? "email,direct_messages_read,direct_messages_write," ??????????? + "friendships_groups_read,friendships_groups_write,statuses_to_me_read," ??????????? + "follow_app_official_microblog," +"invitation_write"; } |
若您使用的是Demo工程,需要將工程中Constants類的APP_KEY、Redirect_URL、SCOPE域替換成自己應(yīng)用對應(yīng)的參數(shù),如需要實現(xiàn)好友邀請接口,需要在SCOPE參數(shù)中添加"invitation_write"值。
2)????創(chuàng)建微博授權(quán)類對象
| mAuthInfo = new AuthInfo(this, Constants.APP_KEY, Constants.REDIRECT_URL, Constants.SCOPE); |
在WBAuthActivity類中,創(chuàng)建微博授權(quán)類對象,將應(yīng)用的信息保存:
3)????實現(xiàn)WeiboAuthListener接口
授權(quán)成功后,SDK會將access_token、expires_in、uid等通過Bundle的形式返回,在onComplete函數(shù)中,可以獲取該信息。具體如何保存和Token信息由開發(fā)者自行處理。
| class AuthListenerimplements WeiboAuthListener { ??? @Override public void onComplete(Bundle values) { ??? mAccessToken = Oauth2AccessToken.parseAccessToken(values);// 從 Bundle中解析 Token ??????? if (mAccessToken.isSessionValid()) { ???????????? AccessTokenKeeper.writeAccessToken(WBAuthActivity.this,mAccessToken); //保存Token ??????????????? ......... ??????? } else { ??????? ??? // 當(dāng)您注冊的應(yīng)用程序簽名不正確時,就會收到錯誤Code,請確保簽名正確 ??????????? String code = values.getString("code",""); ??????????? ......... ??????? } } ......... } |
注意:當(dāng)您注冊的應(yīng)用程序簽名不正確時,SDK會將Code返還給用戶,請確保應(yīng)用的簽名是正確的。
6.1.1僅通過微博客戶端SSO登錄方式授權(quán)
1)???? 創(chuàng)建SsoHandler對象
2)????
| mSsoHandler = new SsoHandler(WBAuthActivity.this,mAuthInfo); |
調(diào)用SsoHandler# authorizeClientSso方法
3)????
| mSsoHandler. authorizeClientSso(new AuthListener()); |
| @Override protected void onActivityResult(int requestCode,int resultCode, Intent data) { ??? super.onActivityResult(requestCode, resultCode, data); ??? if (mSsoHandler !=null) { ??????? mSsoHandler.authorizeCallBack(requestCode, resultCode, data); ??? } } |
重寫Activity#onActivityResult方法,調(diào)用SsoHandler# authorizeCallBack
6.1.2 僅通過Web頁面方式授權(quán)
1)???
| mSsoHandler = new SsoHandler(WBAuthActivity.this,mAuthInfo); |
創(chuàng)建SsoHandler對象
2)???
| mSsoHandler.authorizeWeb(new AuthListener()); ? ? |
調(diào)用SsoHandler#authorizeWeb方法
3)???Manifest中注冊web頁面(activity)
| Web授權(quán)需要在AndroidManifest.xml中,注冊授權(quán)頁面 <activity ???? android:name="com.sina.weibo.sdk.component.WeiboSdkBrowser" ???? android:configChanges="keyboardHidden|orientation" ???? android:windowSoftInputMode="adjustResize" ???? android:exported="false" > </activity> |
6.1.3 all In one方式授權(quán)
注:此種授權(quán)方式會根據(jù)手機是否安裝微博客戶端來決定使用sso授權(quán)還是網(wǎng)頁授權(quán),如果安裝有微博客戶端則調(diào)用微博客戶端授權(quán),否則調(diào)用Web頁面方式授權(quán)
1)???? 創(chuàng)建SsoHandler對象
2)????
| mSsoHandler = new SsoHandler(WBAuthActivity.this,mAuthInfo); |
調(diào)用SsoHandler# authorize方法
3)????
| mSsoHandler. authorize(new AuthListener()); |
| @Override protected void onActivityResult(int requestCode,int resultCode, Intent data) { ??? super.onActivityResult(requestCode, resultCode, data); ??? if (mSsoHandler !=null) { ??????? mSsoHandler.authorizeCallBack(requestCode, resultCode, data); ??? } } |
重寫Activity#onActivityResult方法,調(diào)用SsoHandler# authorizeCallBack
6.1.4 通過手機短信授權(quán)登錄
注:該方式由新浪提供短信下發(fā)通道 供開發(fā)者使用。調(diào)用流程與sso以及all in one方式類似,具體調(diào)用過程參見調(diào)用demo示例 。
1)???? 創(chuàng)建SsoHandler對象
2)????
| mSsoHandler = new SsoHandler(WBAuthActivity.this,mWeiboAuth); |
調(diào)用SsoHandler#registerOrLoginByMobile方法
3)????
| 注:第一個參數(shù)是String類型,用來控制“短信授權(quán)登錄”頁面的標(biāo)題,傳空時默認(rèn)為“驗證碼登錄” mSsoHandler.registerOrLoginByMobile("",new AuthListener()); |
重寫Activity#onActivityResult方法,調(diào)用SsoHandler# authorizeCallBack
| @Override protected void onActivityResult(int requestCode,int resultCode, Intent data) { ??? super.onActivityResult(requestCode, resultCode, data); ??? if (mSsoHandler !=null) { ??????? mSsoHandler.authorizeCallBack(requestCode, resultCode, data); ??? } } |
4)???從listener 對象中獲取用戶輸入的 手機號碼 和驗證授權(quán)信息
| class AuthListenerimplements WeiboAuthListener { ??? @Override public void onComplete(Bundle values) { ??? mAccessToken = Oauth2AccessToken.parseAccessToken(values);// 從 Bundle中解析 Token ??? String? phoneNum =? mAccessToken.getPhoneNum();//用戶輸入的電話號碼 ??????? if (mAccessToken.isSessionValid()) { ???????????? AccessTokenKeeper.writeAccessToken(WBAuthActivity.this,mAccessToken); //保存Token ??????????????? ......... ??????? } else { ??????? ??? // 當(dāng)您注冊的應(yīng)用程序簽名不正確時,就會收到錯誤Code,請確保簽名正確 ??????????? String code = values.getString("code",""); ??????????? ......... ??????? } } ......... } ? |
6.2分享微博
6.2.1 從第三方應(yīng)用喚起微博客戶端進行分享
注意這里分享的圖片不能大于32K
?
1)????分享前準(zhǔn)備工作
在進行微博分享前,需要在AndroidManifest.xml中,在需要接收消息的Activity(喚起微博主程序的類)里聲明對應(yīng)的Action:ACTION_SDK_REQ_ACTIVITY,如下所示:
?
?
| <activity ??? android:name="com.sina.weibo.sdk.demo.WBShareActivity" ??? android:configChanges="keyboardHidden|orientation" ??? android:screenOrientation="portrait"> ??? <intent-filter> ??? ??? <actionandroid:name="com.sina.weibo.sdk.action.ACTION_SDK_REQ_ACTIVITY"/> ??? ??? <categoryandroid:name="android.intent.category.DEFAULT"/> </intent-filter> </activity> <activity ???? android:name="com.sina.weibo.sdk.component.WeiboSdkBrowser" ???? android:configChanges="keyboardHidden|orientation" ???? android:windowSoftInputMode="adjustResize" ???? android:exported="false" > </activity> |
2)????分享實現(xiàn)
| mWeiboShareAPI = WeiboShareSDK.createWeiboAPI(this, Constants.APP_KEY); mWeiboShareAPI.registerApp();? // 將應(yīng)用注冊到微博客戶端 |
① 在onCreate函數(shù)創(chuàng)建微博分享接口實例,并進行注冊,請確保先注冊,后分享
| private TextObject getTextObj() { ??? TextObject textObject = new TextObject(); ??? textObject.text = getSharedText(); ??? return textObject; } |
② 創(chuàng)建要分享的內(nèi)容
③ 通過IWeiboShareAPI#sendRequest喚起微博客戶端發(fā)博器進行分享
| private void sendMultiMessage(boolean hasText,boolean hasImage, boolean hasWebpage, ??????? boolean hasMusic,boolean hasVideo, boolean hasVoice) { ??? WeiboMultiMessage weiboMessage = new WeiboMultiMessage();//初始化微博的分享消息 ??? if (hasText) { ??????? weiboMessage. textObject = getTextObj(); ??? } ??? SendMultiMessageToWeiboRequest request = new SendMultiMessageToWeiboRequest(); ??? request.transaction = String.valueOf(System.currentTimeMillis()); ??? request.multiMessage = weiboMessage; ??? mWeiboShareAPI.sendRequest(request);//發(fā)送請求消息到微博,喚起微博分享界面 } |
④ 實現(xiàn)IWeiboHandler#Response接口,接收分享后微博返回的數(shù)據(jù)
3)????
| protected void onNewIntent(Intent intent) { ??? super.onNewIntent(intent); ??? mWeiboShareAPI.handleWeiboResponse(intent,this); //當(dāng)前應(yīng)用喚起微博分享后,返回當(dāng)前應(yīng)用 } @Override public void onResponse(BaseResponse baseResp) {//接收微客戶端博請求的數(shù)據(jù)。 ??? switch (baseResp.errCode) { ??? case WBConstants.ErrorCode.ERR_OK: ???......... ??????? break; ??? case WBConstants.ErrorCode.ERR_CANCEL:......... ??????? break; ??? case WBConstants.ErrorCode.ERR_FAIL:??......... ??????? break; ??? } } |
分享成功后效果
微博分享成功后,可以打開微博客戶端查看效果,如下圖所示:LinkCard效果實現(xiàn)請參考附錄8.2。
F?
分享新聞鏈接:???????????????????????????????? 分享視頻鏈接:
6.2.2 從微博客戶端喚起第三方應(yīng)用進行分享
通過微博客戶端進行分享,即附件欄集成分享(見附錄8.3),如果沒有進行過商務(wù)合作,是無法進行該分享的。
1)????分享前準(zhǔn)備工作
| <activity ??? android:name="com.sina.weibo.sdk.demo.WBShareResponseActivity" ??? android:configChanges="keyboardHidden|orientation" ??? android:screenOrientation="portrait"> ??? <intent-filter> ??? ??? <actionandroid:name="com.sina.weibo.sdk.action.ACTION_SDK_RESP_ACTIVITY" /> ??? ??? <categoryandroid:name="android.intent.category.DEFAULT"/> ??? </intent-filter> </activity> |
通過微博喚起第三方應(yīng)用進行分享前,同樣需要在AndroidManifest.xml中,在需要接收消息的Activity(被微博喚起的程序的類)里聲明對應(yīng)的Action: ACTION_SDK_RESP_ACTIVITY,如下所示:
2)????分享的實現(xiàn)步驟
| mShareWeiboAPI = WeiboShareSDK.createWeiboAPI(this, Constants.APP_KEY); //創(chuàng)建分享實例 mShareWeiboAPI.handleWeiboRequest(getIntent(),this); // 處理微博客戶端發(fā)送過來的請求 |
| @Override protected void onNewIntent(Intent intent) { ??? ......... ?? mShareWeiboAPI.handleWeiboRequest(intent,this); // 處理微博客戶端發(fā)送過來的請求 } @Override public void onRequest(BaseRequest baseRequest) { ??? // 保存從微博客戶端喚起第三方應(yīng)用時,客戶端發(fā)送過來的請求數(shù)據(jù)對象 mBaseRequest = baseRequest; ??? ......... } |
① 在onCreate函數(shù)創(chuàng)建微博分享接口實例
② 實現(xiàn)IWeiboHandler#Request接口,接收并處理微博客戶端發(fā)送過來的請求
③ 創(chuàng)建要分享的內(nèi)容,實現(xiàn)代碼同6.2.1中創(chuàng)建分享內(nèi)容一樣。
| private void responseSingleMessage(boolean hasText,boolean hasImage, ??????? boolean hasWebpage,boolean hasMusic, boolean hasVideo) { ??? WeiboMessage weiboMessage = new WeiboMessage(); // 1. 初始化微博的分享消息 if (hasText) { ??? weiboMessage.mediaObject = getTextObj(); ??? } ......... // 2. 初始化從微博到第三方的消息請求 ??? ProvideMessageForWeiboResponse response = new ProvideMessageForWeiboResponse(); ??? response.transaction = mBaseRequest.transaction; ??? response.reqPackageName = mBaseRequest.packageName; response.message = weiboMessage; // 3. 發(fā)送響應(yīng)消息到微博 ??? mShareWeiboAPI.sendResponse(response); } |
④ 通過IWeiboShareAPI#sendResponse發(fā)送應(yīng)答數(shù)據(jù)給微博客戶端
6.2.3 使用OpenAPI進行分享
1)???
| statusesAPI = new StatusesAPI(accessToken); //創(chuàng)建微博分享接口實例 |
在onCreate函數(shù)創(chuàng)建微博分享接口實例
2)??? 實現(xiàn)RequestListener接口,接收并處理微博分享后結(jié)果
3)??? 調(diào)用StatusAPI#update、update或uploadUrlText函數(shù)發(fā)送微博
| statusesAPI.update("要分享的內(nèi)容","0.0","0.0",mListener); |
注意:如果應(yīng)用未通過審核,調(diào)用OpenAPI中的函數(shù)需要添加測試賬號,在“應(yīng)用信息->測試帳號”中添加,否則不能調(diào)用函數(shù),會報測試賬號已超過上限的ErrorCode。
6.3一鍵登錄/注銷按鈕
6.3.1 一鍵登錄按鈕
目前提供了以下三種樣式,如下圖:
其中,第一種為默認(rèn)樣式,對于第三種樣式,目前不提供按下的效果。對于一鍵登錄,使用步驟如下:
使用步驟如下:
1)????
| <!-- 默認(rèn)效果,帶圖片文字的登陸按鈕 --> <com.sina.weibo.sdk.widget.LoginButton android:id="@+id/login_button_default" ??? android:layout_width="wrap_content" ??? android:layout_height="wrap_content"??????android:background="@drawable/com_sina_weibo_sdk_login_button_with_account_text"/> |
在需要集成的Activity的布局文件中,添加按鈕:
| @drawable/com_sina_weibo_sdk_login_button_with_frame_logo @drawable/com_sina_weibo_sdk_login_button_with_original_logo |
用戶可根據(jù)需要,將drawable替換成其它兩種:
2)????在對應(yīng)的Activity中,為該控件設(shè)置授權(quán)認(rèn)證信息和listener。
| AuthInfo authInfo = new AuthInfo(this, Constants.APP_KEY, Constants.REDIRECT_URL, Constants.SCOPE); //創(chuàng)建授權(quán)認(rèn)證信息 mLoginBtnDefault = (LoginButton) findViewById(R.id.login_button_default); mLoginBtnDefault.setWeiboAuthInfo(authInfo,mLoginListener); //為按鈕設(shè)置授權(quán)認(rèn)證信息 |
mLoginListener為WeiboAuthListener,請參考:示例分析:授權(quán)認(rèn)證
3)????當(dāng)用戶點擊該按鈕時,會進行SSO登陸,登陸完成后返回應(yīng)用Activity,需要在Activity#onActivityResult中調(diào)用LoginButton#authorizeCallBack函數(shù),整個登陸過程結(jié)束。授權(quán)成功后,用戶可選擇保存自己的Token。
| @Override protected void onActivityResult(int requestCode,int resultCode, Intent data) { ??? super.onActivityResult(requestCode, resultCode, data); if (mLoginBtnDefault !=null) { ??? ??? mLoginBtnDefault.onActivityResult(requestCode, resultCode, data); ??? } } |
6.3.2 登錄/注銷按鈕
該按鈕目前提供了以下樣式,藍色和銀白色,如下圖左所示:
其中,第一種為默認(rèn)樣式,第三方開發(fā)者可自行修改。登錄過程的實現(xiàn)和一鍵登錄一樣。
使用步驟如下:
1)??????
| <!-- 默認(rèn)效果,其 style為:@style/com_sina_weibo_sdk_loginview_default_style --> <com.sina.weibo.sdk.widget.LoginoutButton android:id="@+id/login_out_button_default" ??? android:layout_width="wrap_content" ??? android:layout_height="wrap_content" style="@style/com_sina_weibo_sdk_loginview_default_style"/> |
?在需要集成的Activity的布局文件中,添加按鈕:
在對應(yīng)的Activity中,為該控件設(shè)置授權(quán)認(rèn)證信息和listener。與一鍵登錄按鈕完全一樣,不再贅述。
當(dāng)用戶點擊該按鈕時,會進行SSO登陸,其流程與一鍵登錄按鈕完全一樣,不再贅述。
2)???用戶可根據(jù)需要,將為其添加style樣式,目前有兩種選:
| @style/com_sina_weibo_sdk_loginview_default_style @style/com_sina_weibo_sdk_loginview_silver_style |
注意:該style文件定義在WeiboSDK/res/values/styles.xml下,第三方可根據(jù)需要修改或重寫。
當(dāng)?shù)卿浲旰?#xff0c;該按鈕會變成注銷,方便用戶注銷。如上圖右所示。
值得注意一點的是,如果該按鈕已從當(dāng)前Activity移除后(如Activity銷毀后),下次再進入該Activity時,該按鈕不會自動變成注銷(由于V2.4 SDK未保存Token信息,以后可能會考慮保存所有Session相關(guān)信息),需要用戶手動調(diào)用LoginLogoutButton#setLogoutInfo設(shè)置Token信息后,才會變成注銷。
7.??OpenAPI示例代碼分析
在V2.5.0,我們重構(gòu)了網(wǎng)絡(luò)模塊,提供了一個簡單易用的OpenAPI接口調(diào)用框架,并封裝了一些簡單的開放接口,如發(fā)布微博、獲取用戶信息等,用戶可根據(jù)自己需要進行調(diào)用。另外,我們還提供了相應(yīng)的JSON數(shù)據(jù)解析,以供第三方開發(fā)者直接調(diào)用相應(yīng)的parse()函數(shù)解析JSON數(shù)據(jù)來獲取對象。
OpenAPI接口框架的類圖如下:
?
如上圖所示,AbsOpenAPI做為一個基類,提供同步請求和異步請求兩種接口。對于我們的各個類型的接口,只需要從其繼承過來,拼接調(diào)用參數(shù),調(diào)用對應(yīng)方法即可。
為了適應(yīng)各種不同的需求,我們的每個OpenAPI同時提供了同步和異步的網(wǎng)絡(luò)請求接口。
如:StatusesAPI#upload即為異步API,StatusesAPI#uploadSync即為同步API。
注:同步接口適用于第三方開發(fā)者有自己的異步請求機制。
7.1?用戶信息接口
1)???
| mUsersAPI = new UsersAPI(mAccessToken); //獲取用戶信息接口 |
通過Token初始化UsersAPI接口
2)???
| private RequestListenermListener = new RequestListener() { ??? @Override ??? public void onComplete(String response) { ??????? if (!TextUtils.isEmpty(response)) { ??????????? // 調(diào)用 User#parse將JSON串解析成User對象 ??????????? User user = User.parse(response); ......... ??????? } ??? } } } |
實現(xiàn)異步請求接口回調(diào),并在回調(diào)中直接解析User信息
3)???
| long uid = Long.parseLong(mAccessToken.getUid()); mUsersAPI.show(uid, mListener); |
調(diào)用接口
7.2邀請好友接口
該接口支持登錄用戶向自己的微博互粉好友發(fā)送私信邀請、禮物。該接口的詳細內(nèi)容可參見:
http://open.weibo.com/wiki/2/messages/invite
邀請好友接口權(quán)限開通方法見附錄8.4,集成該接口步驟如同注銷Token一樣。
1)???實現(xiàn)RequestListener接口
2)???創(chuàng)建邀請接口參數(shù)
在初始化InviteApi類的實例時,需要設(shè)置以下內(nèi)容:
?
| 參數(shù)名稱 | 作用 |
| InviteAPI.KEY_TEXT(必填) | 要回復(fù)的私信文本內(nèi)容。文本大小必須小于300個漢字 |
| InviteAPI.KEY_URL(可選) | 邀請點擊后跳轉(zhuǎn)鏈接。默認(rèn)為當(dāng)前應(yīng)用地址 |
| InviteAPI. KEY_INVITE_LOGO(可選) | 邀請 Card 展示時的圖標(biāo)地址,大小必須為 80px X 80px,僅支持 PNG、JPG 格式 |
| JSONObject jsonObject = new JSONObject(); try { ??? jsonObject.put(InviteAPI.KEY_TEXT,"這個游戲太好玩了,加入一起玩吧"); ??? jsonObject.put(InviteAPI.KEY_URL,"http://app.sina.com.cn/appdetail.php?appID=770915"); ??? jsonObject.put(InviteAPI.KEY_INVITE_LOGO,"http://hubimage.com2us.com/hubweb/contents/123_499.jpg"); ??? } catch (JSONException e) { ??????? e.printStackTrace(); } } |
實現(xiàn)代碼如下:
3)???
| new InviteAPI(accessToken).sendInvite(uid, jsonObject,mInviteRequestListener); |
創(chuàng)建 InviteAPI類的實例,并調(diào)用其InviteAPI#sendInvite方法:
?
?
7.3 刷新token? 授權(quán)日期 接口
1? ?授權(quán)有效期內(nèi)重新授權(quán)
如果用戶在授權(quán)有效期內(nèi)重新打開授權(quán)頁授權(quán)(如果此時用戶有微博登錄狀態(tài),這個頁面將一閃而過),那么微博會為開發(fā)者自動延長access_token的生命周期,請開發(fā)者維護新授權(quán)后的access_token值。
2 ?通過Refresh?Token刷新授權(quán)有效期
除此之外,我們也提供了通過?Refresh?Token?刷新的方式來延續(xù)授權(quán)有效期。目前我們每次授權(quán)以后,授權(quán)的有效期時間都在7天以內(nèi),如果超過有效期還需要用戶重新登錄授權(quán),
現(xiàn)在提供一個刷新的接口, 可以每次刷新后? 新獲得Access?Token的也是7天。
?
但需要注意的是:只有使用微博官方移動SDK的移動應(yīng)用,才可以從SDK的方法中獲取到?Refresh?Token。
Refresh?Token?是?Access?Grants?的一種,在獲取?Access?Token?時,認(rèn)證服務(wù)器將返回相應(yīng)的?Refresh?Token,如果?Access?Token?過期,就可以用?Refresh?Token?去刷新。
Refresh?Token?也是有有效期的,Refresh?Token?的有效期目前為30天,在有效期內(nèi)隨時可以刷新。
Refresh?Token?和Access?Token? 是不同的,
Refresh?Token?是用來標(biāo)識刷新的token ;? Access?Token 是授權(quán)token. 需要注意
通過?Refresh?Token?刷新得到的新的?Access?Token?,其有效期等同于原來的有效期,即原來?Access?Token?的有效期是7天,則新獲得的也是7天。
簡單來說就是對于使用了微博移動SDK的移動應(yīng)用,授權(quán)(Access?Token)7天有效,30天可續(xù),每續(xù)一次增加7天有效。?
?
具體的調(diào)用時機可以 根據(jù)自己的業(yè)務(wù)需求安排用。
在我們提供的 demo中有一個類是? ?WBOpenAPIActivity?? 其中的refreshTokenRequest() 方法
調(diào)用此方法的前提需要登錄授權(quán)。具體的實現(xiàn)形式 可以根據(jù)自己的需求修改。
| ?????? private void refreshTokenRequest() { ??????? Oauth2AccessToken?? token? =? AccessTokenKeeper.readAccessToken(WBOpenAPIActivity.this); ??????? RefreshTokenApi.create(getApplicationContext()).refreshToken( ??????????????? Constants.APP_KEY, token.getRefreshToken(),new RequestListener() { ?????????????????? ??????????? @Override ??????????? public void onWeiboException( WeiboException arg0 ) { ??????????????? Toast.makeText(WBOpenAPIActivity.this,"RefreshToken Result : " + arg0.getMessage(), Toast.LENGTH_LONG).show(); ?????????????? ??????????? } ??????????? ??????????? @Override ??????????? public void onComplete( String arg0 ) { ??????????????? Toast.makeText(WBOpenAPIActivity.this,"RefreshToken Result : " + arg0, Toast.LENGTH_LONG).show(); ??????????? } ??????? }); ??? }; |
?
返回結(jié)果示例:
{"access_token":"2.00tl9L9DyY87OC5b4eab555bbfU2OD","remind_in":"648693","expires_in":648693,"refresh_token":"2.00tl9L9DyY87OCad1cd7e0670G8J8O","uid":"3164868113"}
access_token?? 是返回的token?
refresh_token? 是返回的refresh? token? 下次刷新需要傳入此參數(shù)
uid? 用戶id
remind_in 從現(xiàn)在起到授權(quán)token失效的 ?秒數(shù)。
?
?
8.??社會化組件
?
8.1關(guān)注組件(AttentionComponentView)
創(chuàng)建請求參數(shù)
| /** ???????? * 創(chuàng)建請求參數(shù)(如果用戶已經(jīng)授權(quán),并且有token) ???????? * @param appKey ???????? * @param token ???????? * @param attentionUid 需要 關(guān)注/取消關(guān)注 的用戶UID ???????? * @param attentionScreenName 需要 關(guān)注/取消關(guān)注 的用戶昵稱(attentionUid 和 attentionScreenName 兩?????????????????????????????????????????????????????????????????????????? 者選其一就行) ???????? * @param listener 如果想獲取授權(quán)信息,需要傳出授權(quán)回調(diào)Listener ???????? * @return ???????? */ ??????? public static RequestParam createRequestParam(String appKey, ??????????????? String token, String attentionUid, String attentionScreenName, ??????????????? WeiboAuthListener listener) ??????? ? ? ??????? /** ???????? * 創(chuàng)建請求參數(shù)(如果用戶沒有授權(quán)) ???????? * @param appKey ???????? * @param attentionUid 需要 關(guān)注/取消關(guān)注 的用戶UID ???????? * @param attentionScreenName 需要 關(guān)注/取消關(guān)注 的用戶昵稱(attentionUid 和 attentionScreenName 兩??????????????????????????????????????????????????????????????????????????????????? 者選其一就行) ???????? * @param listener 如果想獲取授權(quán)信息,需要傳出授權(quán)回調(diào)Listener ???????? * @return ???????? */ ??????? public static RequestParam createRequestParam(String appKey, String attentionUid, String attentionScreenName, ??????????????? WeiboAuthListener listener) |
| public void setAttentionParam(RequestParam param) |
設(shè)置請求參數(shù)
8.2評論組件(CommentComponentView)
創(chuàng)建請求參數(shù)
| /** ???????? * 創(chuàng)建請求參數(shù)(如果用戶已經(jīng)授權(quán),并且有token) ???????? * @param appKey ???????? * @param token ???????? * @param commentTopic 評論的話題 ???????? * @param commentContent 評論的內(nèi)容 ???????? * @param category 評論的內(nèi)容的分類 ???????? * @param listener 如果想獲取授權(quán)信息,需要傳出授權(quán)回調(diào)Listener ???????? * @return ???????? */ ??????? public static RequestParam createRequestParam(String appKey, ??????????????? String token, String commentTopic, String commentContent, Category category, ??????????????? WeiboAuthListener listener) ??????? ??????? /** ???????? * 創(chuàng)建請求參數(shù)(如果用戶沒有授權(quán)) ???????? * @param appKey ???????? * @param commentTopic 評論的話題 ???????? * @param commentContent 評論的內(nèi)容 ???????? * @param category 評論的內(nèi)容的分類 ???????? * @param listener 如果想獲取授權(quán)信息,需要傳出授權(quán)回調(diào)Listener ???????? * @return ???????? */ ??????? public static RequestParam createRequestParam(String appKey, String commentTopic, String commentContent, ??????????????? Category category, WeiboAuthListener listener) |
| public void setCommentParam(RequestParam param) |
設(shè)置請求參數(shù)
?
?
?
9.支付組件
微博支付需要單獨申請,開通請聯(lián)系:wb_pay_kf@vip.sina.com
?9.1支付示例
| // 初始化環(huán)境 IWeiboShareAPI mWeiboShareAPI = WeiboShareSDK.createWeiboAPI(this, Constants.APP_KEY,false); // 注冊第三方應(yīng)用到客戶端中注冊不成功則無法支付 mWeiboShareAPI.registerApp(); // 微博當(dāng)前版本是否支持支付 boolean isSupportPay = mWeiboShareAPI.isSupportWeiboPay(); ? |
1) 初始化支付環(huán)境????
2)生成訂單參數(shù)
| // 生成可以支付的訂單參數(shù),格式如下 ??? ?String order = "source=1941657700&seller_id=3292350247&sign_type=md5¬ify_url=http%3A%2F%2Fwww.baidu.com& out_trade_no=test001427189083&subject=%E6%8E%A5%E5%85%A5%E6%94%B6%E9%93%B6%E5%8F%B0%E5%AE%9E %E4%BE%8B&pay_type=1&total_fee=0.01&body=%E6%8E%A5%E5%85%A5%E6%94%B6%E9%93%B6%E5%8F%B0%E5%AE %9E%E4%BE%8B&show_url=http%3A%2F%2Fwww.baidu.com&it_b_pay=3d&extra=%E9%A2%9D%E5%A4%96%E9%80% 8F%E4%BC%A0%E5%8F%82%E6%95%B0&sign=f3b18ea552afa60d68338c306cac2604&is_route=1"; ? |
?
3)呼起支付
| ? if (isSupportPay) { ??????????? ? mWeiboShareAPI.launchWeiboPay(order); } ? |
?
注:無法正常呼起多為訂單參數(shù)不正確或者第三方APP沒有得到認(rèn)證
?
9.2支付參數(shù)說明
?
| 參數(shù) | ? 參數(shù)說明 | 類型 | ?? 是否必填 | ?備注 |
| source | AppKey | String | 是 | 在微博開放平臺申請應(yīng)用時分配的AppKey,調(diào)用接口時候代表應(yīng)用的唯一身份 |
| seller_id | 商戶微博UID | int | 是 | ? |
| sign_type | 簽名方式 | String | 是 | 目前簽名僅支持md5 |
| sign | 簽名 | String | 是 | 根據(jù)url參數(shù)以及密鑰生成, 詳見“3.簽名機制” |
| notify_url | 后臺回調(diào)地址 | String | 是 | 用來通知商戶支付結(jié)果,判斷支付成功請僅以此接口為準(zhǔn),最長255位 |
| out_trade_no | 商戶訂單號 | String | 是 | 商戶網(wǎng)站唯一訂單號,最長64位 |
| subject | 商品名稱 | String | 是 | 該參數(shù)最長為128個漢字 |
| pay_type | 支付業(yè)務(wù)類型 | int | 是 | 根據(jù)業(yè)務(wù)規(guī)劃給出參數(shù)列表,如1=實物商品售賣,2=虛擬商品售賣,3=捐助,4=權(quán)益等 |
| price | 商品單價 | float | 否 | 單位為 RMB-Yuan. 取值范圍[0.01,9999999999.00],精確到小數(shù)點后倆位. 規(guī)則:price和quantity能替代total_fee。即存在price和quantity就不能存在total_fee;存在total_fee就不能存在price和quantity |
| quantity | 購買數(shù)量 | int | 否 | 規(guī)則:price和quantity能替代total_fee。即存在price和quantity就不能存在total_fee;存在total_fee就不能存在price和quantity |
| total_fee | 交易金額 | float | 否 | 單位為 RMB-Yuan.取值范圍[0.01,9999999999.00],精確到小數(shù)點后倆位 |
| body | 商品描述 | String | 否 | 該參數(shù)最長為500個漢字 |
| show_url | 頁面回跳地址 | String | 否 | 用來通知商戶支付結(jié)果,用戶在網(wǎng)頁支付成功頁面,點擊“返回商戶”時的回跳地址, 最長255位 |
| it_b_pay | 超時時間 | String | 否 | 交易請求自創(chuàng)建時間起,自動關(guān)閉的時間,取值范圍:1m(分鐘)、1h(小時)、1c(當(dāng)天0點)、15d(天),不接受小數(shù)點,默認(rèn)3d |
| is_route | 必傳 值為1 | String | 是 | ? |
| req_channel | 請求渠道 | String | 是 | 1:跨端支付 |
| extra | 額外參數(shù) | String | 否 | 發(fā)起支付時透傳的參數(shù),可為不包含"="、"&"等特殊字符的字符串 |
?
?
? 9.3支付接口錯誤返回碼說明
?
| 返回錯誤碼error_code | ?含義 ?error | ?說明 |
| 100000 | Succeeded | 成功 |
| 220001 | 操作失敗 | 操作失敗 |
| 220002 | 非法請求 | 非法請求 |
| 220003 | 請登錄 | 登錄失敗 |
| 220004 | 驗證簽名失敗 | 驗證簽名失敗 |
| 220005 | xxxx | 參數(shù)驗證錯誤,以error描述為準(zhǔn) |
| 220006 | 無效的訂單號 | 無效的訂單號 |
| 220007 | 用戶信息錯誤 | 用戶信息錯誤 |
| 220008 | 無效的uid | 無效的uid |
| 220009 | 無效的價格 | 無效的價格 |
| 220010 | 無效id | 無效id |
| 220011 | 無效time | 無效time |
| 220012 | 無效平臺 | 無效平臺 |
| 220013 | 數(shù)據(jù)已生成 | 數(shù)據(jù)已生成 |
| 220014 | 數(shù)據(jù)為空 | 數(shù)據(jù)為空 |
| 220015 | 無效支付渠道 | 無效支付渠道 |
| 220016 | 無效操作 | 無效操作 |
| 220017 | 無效商家 | 無效商家 |
?
??9.4簽名機制
9.4.1 生成待簽名的字符串
??? 9.4.1.1 需要參與簽名的參數(shù)
??????? 在請求參數(shù)列表中,除去sign ,sign_type倆個參數(shù)外,其他需要使用到的參數(shù)皆是要簽名的參數(shù)。(個別接口中參數(shù)sign_type也需要參與簽名)
??????? 在通知返回參數(shù)列表中,除去sign ,sign_type倆個參數(shù)外,凡是通知返回回來的參數(shù)
皆是要簽名的參數(shù)。
??? 9.4.1.2 需生成待簽名字符串
??????? 對數(shù)組里的每一個值從a到z的順序排序,若遇到相同首字母,則看第二個字母,以此
類推。排序完成之后,再把所有數(shù)組值以“&”字符連接起來,組成的字符串便是待簽名的字符串。
?? ?9.4.1.3注意
??? 沒有值的參數(shù)無需傳遞,也無需包含到待簽名數(shù)據(jù)中。
??? 根據(jù)HTTP協(xié)議要求,傳遞參數(shù)中的值中如果存在特殊字符(如:&,@等),那么該
值需要做URL Encoding,這樣請求接收方才能接收到正確的參數(shù)值。這種情況下,待簽名
數(shù)據(jù)應(yīng)該是原生值而不是encoding之后的值。
?
?9.4.2 簽名?
??? 9.4.2.1 MD5簽名
??????? 在MD5簽名時,需要私鑰參與簽名。MD5的私鑰是以英文字母和數(shù)字組成的字符
串。商戶提交完資料審核后,會隨同開發(fā)文檔等一起發(fā)送到指定郵箱。
??? 9.4.2.2 請求時簽名
??????? 當(dāng)拿到請求時的待簽名字符串后,需要把私鑰直接拼接到待簽名字符串后面,形成新
的字符串,利用MD5的簽名函數(shù)對這個新的字符串進行簽名運算,從而得到32位簽名結(jié)果
字符串(該字符串賦值于參數(shù)sign)。
??? 9.4.2.3 通知返回時驗證簽名
?????? 當(dāng)獲得通知返回時的待簽名字符串后,同理,需要把私鑰直接拼接到待簽名字符串后
面,形成新的字符串,利用MD5的簽名函數(shù)對這個新的字符串進行簽名運算,從而得到32
位簽名結(jié)果字符串。此時,這個新的字符串需要與微博支付通知返回參數(shù)中的參數(shù)sign的值
進行驗證是否相等,來判斷簽名是否驗證通過。
?
10 問題
10.1??授權(quán)不成功問題
10.1.1??包名和簽名沒有在我們的API官網(wǎng)注冊或者注冊了不匹配。
10.1.2 用來分享的第三方app一定要是正式打包并且簽名的app ,不能使用debug版本進行授權(quán)
10.1.3 手機時間一定要是準(zhǔn)確時間,不然會網(wǎng)絡(luò)請求出錯。
其他的問題 參看:
?
https://github.com/sinaweibosdk/weibo_android_sdk/blob/master/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98%20FAQ.md
?
?
10.2 如何實現(xiàn)LinkCard效果?
6.2.1(3)中分享視頻所示效果是LinkCard效果,如下圖左所示。分享普通鏈接是沒有這種效果的。如果你想要你分享出去的內(nèi)容展示成 LinkCard 的樣子,其前提條件是你分享的鏈接支持 LinkCard。即LinkCard 的分享開關(guān),是基于分享出來的鏈接的域名。打個比方,開啟v.youku.com 的 LinkCard 開關(guān),從而發(fā)布器中帶這個鏈接的,都能呈現(xiàn)為 LinkCard,該功能并不是針對于某個特定的應(yīng)用,而是針對于特殊的網(wǎng)內(nèi)容的。 如果某個網(wǎng)站需要進行 LinkCard 商務(wù)合作,請聯(lián)系 BD。詳情請閱讀:移動客戶端接入(http://t.cn/aex4JF)
?
10.3如何實現(xiàn)附件欄集成分享?
關(guān)于第三方應(yīng)用注冊到微博客戶端效果,如下圖右所示:
如果優(yōu)質(zhì)的第三方應(yīng)用也想被顯示在此處,也需要進行商務(wù)合作,默認(rèn)情況下是不被顯示在此處的。詳情請閱讀:移動客戶端接入(http://t.cn/aex4JF)
注意:如果沒有進行過商務(wù)合作,是無法進行該分享的。
?
10.4 第三方如何申請接口權(quán)限?
請參考:http://open.weibo.com/wiki/好友邀請
具體實現(xiàn)步驟:
1)????申請好友邀請接口使用權(quán)限,通過郵件 open_api@sina.com 申請,需要詳細描述應(yīng)用的功能、服務(wù)等信息。
2)????在OAuth2的Scope域中添加好友邀請權(quán)限,主要是在demo工程的 Constants類的SCOPE變量添加“invitation_write”值。
3)????獲取互粉好友,調(diào)用friendships/friends/bilateral接口,獲取當(dāng)前用戶微博互粉好友列表Uid。
4)????發(fā)送邀請,調(diào)用messages/invite接口實現(xiàn)向指定好友發(fā)送邀請。
?
?
11 第三方App 微博下載合作接口
目前3.0.0以后的版本中提供了接口,可以將通過微博渠道下載的 第三方客戶的 app? 激活的時候告訴微博后臺的接口:
?
激活方法? Utility. getAid(Context context, StringappKey);//參數(shù):? 應(yīng)用程序上下文和 app的 key 即可。
?
此方法為異步網(wǎng)絡(luò)請求接口,不需要等待網(wǎng)絡(luò)返回,初次調(diào)用應(yīng)該返回null 。
此為正常狀態(tài)。
?
12 游戲接入
? 為了方便游戲廠商接入微博平臺,進行游戲推廣和? 微博游戲好友好友互動,
我們這里提供了微博平臺游戲接口的接入。詳細參見com.sina.weibo.demo工程下面的
WBGameActivity ?調(diào)用示例。
?
12.1? 游戲成就對象?? 入庫/更新?? (游戲的成就級別后臺錄入接口)
????????? /***
?????????? *???游戲成就對象入庫?接口? 1
?????????? * @param context
?????????? * @paramaccess_token????????第三方的登錄token
?????????? * @paramsource??????????????第三方的 appKey
?????????? * @paramachievement_id??????游戲成就id
?????????? * @paramgame_id?????????????游戲id
?????????? * @paramtitle???????????????成就標(biāo)題名
?????????? * @paramimageUrl? string????圖像url信息,圖片大小200*200像素,
支持PNG、JPEG、JPG,?需要? urlencode處理
?????????? * @paramdescription?????????游戲成就描述信息
?????????? * @paramgame_point?? string?游戲取得的點數(shù)
?????????? * @paramAchievementTypeUrl??成就類型url地址信息,需要?urlencode處理
?????????? * @paramcreate_time? string?初次入庫的時間???add添加不需要傳入,?
?????? update需要傳入(如果有)yyyy-MM-dd HH:mm:ss
?????????? * @return
??????????*/? ?
?
GameManager.AddOrUpdateGameAchievement(WBGameActivity.this,params);
?
?
12.2? 用戶獲得游戲成就關(guān)系入庫? (玩家的每次升級的錄入接口)??
??????? /***? 接口2
???????? *?用戶獲得游戲成就關(guān)系入庫
???????? * @param context
???????? * @param access_token????????第三方的登錄token
???????? * @param source??????????????第三方的 appKey
???????? * @param achievement_id??????戲成就id
???????? * @param uid??????????????????用戶id
???????? * @param create_time? string?初次入庫的時間??? add?添加不需要傳入,??
update需要傳入(如果有)yyyy-MM-dd HH:mm:ss
???????? * @return
????????*/
?
?
GameManager.addOrUpdateGameAchievementRelation(WBGameActivity.this,params);
?
?
12.3? 用戶游戲得分關(guān)系入庫/更新 ??每次玩家得分紀(jì)錄接口
??????? /**????
??????????????? 必選?類型? 說明
??????????source? true???? string?申請應(yīng)用時分配的AppKey,
??????????game_id? true??? string?游戲id
??????????user_id? true??? string?用戶id
?????????? score??? true???string? 用戶得分
??????? */
?
GameManager.addOrUpdateAchievementScore(WBGameActivity.this,token,? Constants.APP_KEY, "", "","");
?
12.4? 讀取某個玩家游戲分?jǐn)?shù)?
??????? /***
???????? * @param context
???????? * @param access_token
???????? * @param appKey?參數(shù)說明同上
???????? * @param game_id?游戲id
???????? * @param user_id?玩家的微博uid
???????? * @return
????????*/
?
?
GameManager.readPlayerScoreInfo(WBGameActivity.this,token, Constants.APP_KEY, " game_id ", " user_id ");
?
?
?
?
?
?
?
12.5 讀取玩家? 好友的游戲分?jǐn)?shù)
??????? /**? 讀取玩家互粉好友?游戲分?jǐn)?shù)
??????????? source? true???string? 申請應(yīng)用時分配的AppKey,
??????????? game_id? true???string? 游戲id
??????????? uid? true???string?用戶id
??? */
?
GameManager.readPlayerFriendsScoreInfo(WBGameActivity.this,token, Constants.APP_KEY, "23e260e9", "3164868113");
?
?
12.6 讀取玩家游戲分?jǐn)?shù)? 接口
?? ????????/***? 讀取玩家獲取成就列表
??????????? source true??? string?申請應(yīng)用時分配的AppKey,
??????????? game_id? true???string? 游戲id
??????????? user_id? true???string? 用戶id
???????? */
GameManager.readPlayerFriendsScoreInfo(WBGameActivity.this,token, Constants.APP_KEY, "23e260e9", "3164868113");
?
?
12.7 邀請好友列表 h5 ?接口
目前先展示一個手機屏幕(大約5個好友,支持按昵稱搜索)
?
manager.invatationWeiboFriendsByList(WBGameActivity.this, token, Constants.APP_KEY,"邀請好友",ls);
?
?
?
?
12.8 ?好友邀請單頁 h5 接口
?
這個接口傳入的 uid只支持好友的uid 最多為五個;傳入的多了也以前五個為準(zhǔn)。
anager.invatationWeiboFriendsInOnePage(WBGameActivity.this,token, Constants.APP_KEY,"邀請好友",ls,userIdList);
?
?
?
(全文完畢)
?
?
總結(jié)
以上是生活随笔為你收集整理的微博Android平台SDK文档的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android新浪微博开发Sso登录(转
- 下一篇: python中1到100怎么表示_pyt