提要: QQ ,微信分享 ,新浪分享(須要受權後分享)html
最後導包效果(原生的包比較小,方法數少,更乾淨):java

其中:open_sdk_r5756_lite.jar 是QQ 的,weiboSDKCore_3.14.jar是微博的(包括其他的*.os 文件) ,libammsdk.jar 是微信的android
說一下,android studio 導入 *.os文件須要配置 app --》build.gradle 的git
android {
compileSdkVersion 24
buildToolsVersion '24.0.1'
defaultConfig {
applicationId "com.lskj.rrhr.shortkeytest"
minSdkVersion 15
targetSdkVersion 24
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
}
紅色部分至指定 jni 加載目錄,固然還有更高級的作法,本身去找吧。
添加權限部分:github
QQ分享:api
QQ開發者平臺登陸網址:(免登陸分享)瀏覽器
http://open.qq.com/login微信
QQ文檔:app

詳細文檔參考:ide
http://wiki.open.qq.com/wiki/mobile/API%E8%B0%83%E7%94%A8%E8%AF%B4%E6%98%8E#1.1_.E7.99.BB.E5.BD.95.2F.E6.A0.A1.E9.AA.8C.E7.99.BB.E5.BD.95.E6.80.81
1.13 分享消息到QQ(無需QQ登陸)
分享消息到QQ的接口,可將新聞、圖片、文字、應用等分享給QQ好友、羣和討論組。Tencent類的shareToQQ函數可直接調用,不用用戶受權(使用手機QQ當前的登陸態)。調用將打開分享的界面,用戶選擇好友、羣或討論組以後,點擊肯定便可完成分享,並進入與該好友進行對話的窗口。
本接口支持3種模式,每種模式的參數設置不一樣,下面分別進行介紹:
(1) 分享圖文消息
調用分享接口的示例代碼以下:
private void onClickShare() {
final Bundle params = new Bundle();
params.putInt(QQShare.SHARE_TO_QQ_KEY_TYPE, QQShare.SHARE_TO_QQ_TYPE_DEFAULT);
params.putString(QQShare.SHARE_TO_QQ_TITLE, "要分享的標題");
params.putString(QQShare.SHARE_TO_QQ_SUMMARY, "要分享的摘要");
params.putString(QQShare.SHARE_TO_QQ_TARGET_URL, "http://www.qq.com/news/1.html");
params.putString(QQShare.SHARE_TO_QQ_IMAGE_URL,"http://imgcache.qq.com/qzone/space_item/pre/0/66768.gif");
params.putString(QQShare.SHARE_TO_QQ_APP_NAME, "測試應用222222");
params.putInt(QQShare.SHARE_TO_QQ_EXT_INT, "其餘附加功能");
mTencent.shareToQQ(MainActivity.this, params, new BaseUiListener());
}
調用分享接口的params參數說明以下:
參數 |
是否必傳 |
類型 |
參數說明 |
QQShare.SHARE_TO_QQ_KEY_TYPE |
必填 |
Int |
分享的類型。圖文分享(普通分享)填Tencent.SHARE_TO_QQ_TYPE_DEFAULT |
QQShare.PARAM_TARGET_URL |
必填 |
String |
這條分享消息被好友點擊後的跳轉URL。 |
QQShare.PARAM_TITLE |
必填 |
String |
分享的標題, 最長30個字符。 |
QQShare.PARAM_SUMMARY |
可選 |
String |
分享的消息摘要,最長40個字。 |
QQShare.SHARE_TO_QQ_IMAGE_URL |
可選 |
String |
分享圖片的URL或者本地路徑 |
QQShare.SHARE_TO_QQ_APP_NAME |
可選 |
String |
手Q客戶端頂部,替換「返回」按鈕文字,若是爲空,用返回代替 |
QQShare.SHARE_TO_QQ_EXT_INT |
可選 |
Int |
分享額外選項,兩種類型可選(默認是不隱藏分享到QZone按鈕且不自動打開分享到QZone的對話框): QQShare.SHARE_TO_QQ_FLAG_QZONE_AUTO_OPEN,分享時自動打開分享到QZone的對話框。 QQShare.SHARE_TO_QQ_FLAG_QZONE_ITEM_HIDE,分享時隱藏分享到QZone按鈕 |
(2) 分享純圖片
調用分享接口的示例代碼以下:
private void onClickShare() {
Bundle params = new Bundle();
params.putString(QQShare.SHARE_TO_QQ_IMAGE_LOCAL_URL,imageUrl.getText().toString());
params.putString(QQShare.SHARE_TO_QQ_APP_NAME, appName.getText().toString());
params.putInt(QQShare.SHARE_TO_QQ_KEY_TYPE, QQShare.SHARE_TO_QQ_TYPE_IMAGE);
params.putInt(QQShare.SHARE_TO_QQ_EXT_INT, QQShare.SHARE_TO_QQ_FLAG_QZONE_AUTO_OPEN);
mTencent.shareToQQ(MainActivity.this, params, new BaseUiListener());
}
參數 |
是否必傳 |
類型 |
參數說明 |
QQShare.SHARE_TO_QQ_KEY_TYPE |
必選 |
Int |
分享類型,分享純圖片時填寫QQShare.SHARE_TO_QQ_TYPE_IMAGE。 |
QQShare.SHARE_TO_QQ_IMAGE_LOCAL_URL |
必選 |
String |
須要分享的本地圖片路徑。 |
QQShare.SHARE_TO_QQ_APP_NAME |
可選 |
String |
手Q客戶端頂部,替換「返回」按鈕文字,若是爲空,用返回代替。 |
QQShare.SHARE_TO_QQ_EXT_INT |
可選 |
Int |
分享額外選項,兩種類型可選(默認是不隱藏分享到QZone按鈕且不自動打開分享到QZone的對話框): QQShare.SHARE_TO_QQ_FLAG_QZONE_AUTO_OPEN,分享時自動打開分享到QZone的對話框。 QQShare.SHARE_TO_QQ_FLAG_QZONE_ITEM_HIDE,分享時隱藏分享到QZone按鈕。 |
(3) 分享音樂
音樂分享後,發送方和接收方在聊天窗口中點擊消息氣泡便可開始播放音樂。
調用分享接口的示例代碼以下:
private void onClickAudioShare() {
final Bundle params = new Bundle();
params.putInt(QQShare.SHARE_TO_QQ_KEY_TYPE, QQShare.SHARE_TO_QQ_TYPE_AUDIO);
params.putString(QQShare.SHARE_TO_QQ_TITLE, "要分享的標題");
params.putString(QQShare.SHARE_TO_QQ_SUMMARY, "要分享的摘要");
params.putString(QQShare.SHARE_TO_QQ_TARGET_URL, "http://www.qq.com/news/1.html");
params.putString(QQShare.SHARE_TO_QQ_IMAGE_URL, "http://imgcache.qq.com/qzone/space_item/pre/0/66768.gif");
params.putString(QQShare.SHARE_TO_QQ_AUDIO_URL, "音樂連接");
params.putString(QQShare.SHARE_TO_QQ_APP_NAME, "測試應用222222");
params.putInt(QQShare.SHARE_TO_QQ_EXT_INT,QQShare.SHARE_TO_QQ_FLAG_QZONE_AUTO_OPEN);
mTencent.shareToQQ(MainActivity.this, params, new BaseUiListener());
}
調用分享接口的params參數說明以下:
參數 |
是否必傳 |
類型 |
參數說明 |
QQShare.SHARE_TO_QQ_KEY_TYPE |
必填 |
Int |
分享的類型。分享音樂填Tencent.SHARE_TO_QQ_TYPE_AUDIO。 |
QQShare.PARAM_TARGET_URL |
必選 |
String |
這條分享消息被好友點擊後的跳轉URL。 |
QQShare.SHARE_TO_QQ_AUDIO_URL |
必填 |
String |
音樂文件的遠程連接, 以URL的形式傳入, 不支持本地音樂。 |
QQShare.PARAM_TITLE |
必選 |
String |
分享的標題, 最長30個字符。 |
QQShare.PARAM_SUMMARY |
可選 |
String |
分享的消息摘要,最長40個字符。 |
QQShare.SHARE_TO_QQ_IMAGE_URL |
可選 |
String |
分享圖片的URL或者本地路徑。 |
QQShare.SHARE_TO_QQ_APP_NAME |
可選 |
String |
手Q客戶端頂部,替換「返回」按鈕文字,若是爲空,用返回代替。 |
QQShare.SHARE_TO_QQ_EXT_INT |
可選 |
Int |
分享額外選項,兩種類型可選(默認是不隱藏分享到QZone按鈕且不自動打開分享到QZone的對話框): QQShare.SHARE_TO_QQ_FLAG_QZONE_AUTO_OPEN,分享時自動打開分享到QZone的對話框。 QQShare.SHARE_TO_QQ_FLAG_QZONE_ITEM_HIDE,分享時隱藏分享到QZone按鈕。 |
(4) 分享應用
應用分享後,發送方和接收方在聊天窗口中點擊消息氣泡便可進入應用的詳情頁。
調用分享接口的示例代碼以下:
private void onClickAppShare() {
final Bundle params = new Bundle();
params.putInt(QQShare.SHARE_TO_QQ_KEY_TYPE, QQShare.SHARE_TO_QQ_TYPE_APP);
params.putString(QQShare.SHARE_TO_QQ_TITLE, "要分享的標題");
params.putString(QQShare.SHARE_TO_QQ_SUMMARY, "要分享的摘要");
params.putString(QQShare.SHARE_TO_QQ_IMAGE_URL, "http://imgcache.qq.com/qzone/space_item/pre/0/66768.gif");
params.putString(QQShare.SHARE_TO_QQ_APP_NAME, "測試應用222222");
mTencent.shareToQQ(MainActivity.this, params, new BaseUiListener());
}
調用分享接口的params參數說明以下:
參數 |
是否必傳 |
類型 |
參數說明 |
QQShare.SHARE_TO_QQ_KEY_TYPE |
必填 |
Int |
分享的類型。分享音樂填Tencent.SHARE_TO_QQ_TYPE_PP。 |
QQShare.PARAM_TITLE |
必選 |
String |
分享的標題, 最長30個字符。 |
QQShare.PARAM_SUMMARY |
可選 |
String |
分享的消息摘要,最長40個字符。 |
QQShare.SHARE_TO_QQ_IMAGE_URL |
可選 |
String |
分享圖片的URL或者本地路徑。 |
QQShare.SHARE_TO_QQ_APP_NAME |
可選 |
String |
手Q客戶端頂部,替換「返回」按鈕文字,若是爲空,用返回代替。 |
QQShare.SHARE_TO_QQ_EXT_INT |
可選 |
Int |
分享額外選項,兩種類型可選(默認是不隱藏分享到QZone按鈕且不自動打開分享到QZone的對話框): QQShare.SHARE_TO_QQ_FLAG_QZONE_AUTO_OPEN,分享時自動打開分享到QZone的對話框。 QQShare.SHARE_TO_QQ_FLAG_QZONE_ITEM_HIDE,分享時隱藏分享到QZone按鈕。 |
1.14 分享到QQ空間(無需QQ登陸)
完善了分享到QZone功能,分享類型參數Tencent.SHARE_TO_QQ_KEY_TYPE,目前只支持圖文分享。Tencent. shareToQzone()函數可直接調用,不用用戶受權(使用手機QQ當前的登陸態)。調用後將打開手機QQ內QQ空間的界面,或者用瀏覽器打開QQ空間頁面進行分享操做。
示例代碼以下:
private void shareToQzone () {
//分享類型
params.putString(QzoneShare.SHARE_TO_QQ_KEY_TYPE,SHARE_TO_QZONE_TYPE_IMAGE_TEXT );
params.putString(QzoneShare.SHARE_TO_QQ_TITLE, "標題");//必填
params.putString(QzoneShare.SHARE_TO_QQ_SUMMARY, "摘要");//選填
params.putString(QzoneShare.SHARE_TO_QQ_TARGET_URL, "跳轉URL");//必填
params.putStringArrayList(QzoneShare.SHARE_TO_QQ_IMAGE_URL, "圖片連接ArrayList");
mTencent.shareToQzone(activity, params, new BaseUiListener());
}
params參數說明以下:
參數 |
是否必傳 |
類型 |
參數說明 |
QzoneShare.SHARE_TO_QQ_KEY_TYPE |
選填 |
Int |
SHARE_TO_QZONE_TYPE_IMAGE_TEXT(圖文) |
QzoneShare.SHARE_TO_QQ_TITLE |
必填 |
Int |
分享的標題,最多200個字符。 |
QzoneShare.SHARE_TO_QQ_SUMMARY |
選填 |
String |
分享的摘要,最多600字符。 |
QzoneShare.SHARE_TO_QQ_TARGET_URL |
必填 |
String |
須要跳轉的連接,URL字符串。 |
QzoneShare.SHARE_TO_QQ_IMAGE_URL |
選填 |
String |
分享的圖片, 以ArrayList<String>的類型傳入,以便支持多張圖片(注:圖片最多支持9張圖片,多餘的圖片會被丟棄)。 |
注意:QZone接口暫不支持發送多張圖片的能力,若傳入多張圖片,則會自動選入第一張圖片做爲預覽圖。多圖的能力將會在之後支持。:
AndroidManifest.xml:中添加一下代碼
<!--QQ QQZone-->
<activity
android:name="com.tencent.tauth.AuthActivity"
android:launchMode="singleTask"
android:noHistory="true">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="tencent1105559447" /> 紅色部分填入你的 QQ appid
</intent-filter>
</activity>
<activity
android:name="com.tencent.connect.common.AssistActivity"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
AndroidManifest.xml
代碼部分:
//騰訊分享調用的
private Tencent mTencent = null;
//註冊應用
mTencent = Tencent.createInstance(ShareConfig.QQ_APPID, mContext);
//自行構件要分享的內容
params = new Bundle();
params.putInt(QzoneShare.SHARE_TO_QZONE_KEY_TYPE, QzoneShare.SHARE_TO_QZONE_TYPE_IMAGE_TEXT);
params.putString(QzoneShare.SHARE_TO_QQ_TITLE, "標題");//必填
params.putString(QzoneShare.SHARE_TO_QQ_SUMMARY, "摘要");//選填
params.putString(QzoneShare.SHARE_TO_QQ_TARGET_URL, "https://www.baidu.com");//必填
// 注意:QZone接口暫不支持發送多張圖片的能力,若傳入多張圖片,則會自動選入第一張圖片做爲預覽圖。多圖的能力將會在之後支持。:
params.putStringArrayList(QzoneShare.SHARE_TO_QQ_IMAGE_URL, imges);
mTencent.shareToQQ((Activity) mContext, mParansBundle, new IUiListener() { @Override
public void onComplete(Object o) {
Timber.d(o.toString());
Toast.makeText(mContext, "onComplete", Toast.LENGTH_SHORT).show();
}
@Override
public void onError(UiError uiError) {
Timber.d(uiError.errorCode + uiError.errorDetail + uiError.errorMessage);
Toast.makeText(mContext, "onError", Toast.LENGTH_SHORT).show();
}
@Override
public void onCancel() {
Toast.makeText(mContext, "onCancel", Toast.LENGTH_SHORT).show();
}
});
QQ分享文檔仍是比較清晰的 就是不太好找。
微信分享:
資源下載:https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419319167&token=abc9f1cf46bab8ac24d0de78399250bf41dddbd1&lang=zh_CN
分享與收藏功能開發文檔(Android應用)
微信分享及收藏是指第三方App經過接入該功能,讓用戶能夠從App分享文字、圖片、音樂、視頻、網頁至微信好友會話、朋友圈或添加到微信收藏。
微信分享及收藏功能已向全體開發者開放,開發者在微信開放平臺賬號下申請App並經過審覈後,便可得到微信分享及收藏權限。
微信分享及收藏目前支持文字、圖片、音樂、視頻、網頁共五種類型。開發者在App中在集成微信SDK後,可調用接口實現,如下依次是文字分享、圖片分享、音樂分享、視頻分享、網站分享的示例。
分享或收藏的目標場景,經過修改scene場景值實現。
發送到聊天界面——WXSceneSession
發送到朋友圈——WXSceneTimeline
添加到微信收藏——WXSceneFavorite
1、文字類型分享示例

2、圖片類型分享示例

3、音樂類型分享示例

注意:分享至微信的音樂,直接點擊好友會話或朋友圈下的分享內容會跳轉至第三方 APP,點擊會話列表頂部的音樂分享內容將跳轉至微信原生音樂播放器播放。
4、視頻類型分享示例

5、網頁類型分享示例

文檔很清晰:
代碼部分:
文件中添加 微信回調:
package="com.lskj.rrhr.shortkeytest" 在你的應用根包下 添加新包 包名:wxapi 不要改。--》新建類
WXEntryActivity:
package com.lskj.rrhr.shortkeytest.wxapi;
import android.app.Activity;
import android.os.Bundle;
import android.widget.Toast;
import com.lskj.rrhr.shortkeytest.modules.share.ShareConfig;
import com.tencent.mm.sdk.modelbase.BaseReq;
import com.tencent.mm.sdk.modelbase.BaseResp;
import com.tencent.mm.sdk.openapi.IWXAPI;
import com.tencent.mm.sdk.openapi.IWXAPIEventHandler;
import com.tencent.mm.sdk.openapi.WXAPIFactory;
/**
* Created by Home on 16/8/22.
*/
public class WXEntryActivity extends Activity implements IWXAPIEventHandler {
private IWXAPI api;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
api = WXAPIFactory.createWXAPI(this, ShareConfig.WX_APPID, false);
api.registerApp(ShareConfig.WX_APPID);
api.handleIntent(getIntent(), this);
}
@Override
public void onReq(BaseReq baseReq) {
finish();
}
@Override
public void onResp(BaseResp baseResp) {
String result = "";
switch (baseResp.errCode) {
case BaseResp.ErrCode.ERR_OK:
result = "分享成功";
break;
case BaseResp.ErrCode.ERR_USER_CANCEL:
result = "取消分享";
break;
case BaseResp.ErrCode.ERR_AUTH_DENIED:
result = "認證失敗";
break;
default:
result = "未知錯誤";
break;
}
Toast.makeText(this, result, Toast.LENGTH_LONG).show();
finish();
}
}
AndroidManifest.xml 添加:
<!--微信回調-->
<activity
android:name=".wxapi.WXEntryActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:exported="true"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
配置完成。
//與微信的通訊接口
private IWXAPI mIWXAPI = null;
//註冊應用
mIWXAPI = WXAPIFactory.createWXAPI(context, ShareConfig.WX_APPID, false);
mIWXAPI.registerApp(ShareConfig.WX_APPID);
//此處你本身構建Message
我本身的示例代碼是:
WXTextObject textObject = new WXTextObject();
textObject.text = "我要分享";
WXMediaMessage msg = new WXMediaMessage();
msg.mediaObject = textObject;
msg.description = "我是分享表述";
SendMessageToWX.Req request = new SendMessageToWX.Req();
request.message = msg;
request.transaction = buildTransaction("文本分享");
request.scene = SendMessageToWX.Req.WXSceneSession;
request.toBundle(params);
SendMessageToWX.Req request = new SendMessageToWX.Req();
request.fromBundle(mParansBundle);
mIWXAPI.sendReq(request);
爲何要用紅色部分--》由於我不是在一個頁面完成的,涉及到頁面的傳值。 它提供了這個方法(微信,新浪有)
微博分享:(若是隻須要分享功能不須要審覈)
1.註冊開發者帳號
進入新浪微博提供的開放平臺 註冊新浪帳號:http://open.weibo.com/
在管理中心須要建立一個應用,獲得Appkey,若是隻是實現分享的功能也不須要提交審覈。
2.應用信息
基本信息頁面:須要填寫Android簽名
簽名工具下載地址:https://github.com/mobileresearch/weibo_android_sdk/blob/master/app_signatures.apk
安裝到手機,打開簽名工具輸入包名,生成一個惟一的MD5校驗碼,填寫便可。
高級信息頁面:須要填寫受權回調頁面,須要與程序代碼中的REDIRECT_URL一致,以下圖所示
3.講WeiboSDK引入到本身的項目當中
WeiboSDK下載地址:http://open.weibo.com/wiki/SDK#Android_SDK
4.實現認證及分享
<pre name="code" class="java">
/**
* 該類演示了第三方應用如何經過微博客戶端分享內容。
* 執行流程: 從本應用->微博->本應用
*/
public class WBShareActivity extends Activity implements Response,
OnClickListener {
/** 微博分享按鈕 */
private Button mShareButton;
/** 微博實例 */
private AuthInfo mAuthInfo;
/** 注意:SsoHandler 僅當 SDK 支持 SSO 時有效 */
private SsoHandler mSsoHandler;
/** 封裝了 "access_token","expires_in","refresh_token",並提供了他們的管理功能 */
private Oauth2AccessToken mAccessToken;
/** 是否安裝微博*/
private boolean isInstalledWeibo;
/** 支持Api級別*/
private int supportApiLevel;
/** 微博分享的接口實例 */
private IWeiboShareAPI mWeiboShareAPI;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_wbshare);
//點擊執行分享操做
mShareButton = (Button) findViewById(R.id.register_app_to_weibo);
mShareButton.setOnClickListener(this);
}
@Override
public void onClick(View v) {
// 建立微博實例
mAuthInfo = new AuthInfo(this, Constants.WB_APP_KEY,
Constants.REDIRECT_URL, Constants.SCOPE);
mSsoHandler = new SsoHandler(this, mAuthInfo);
// SSO 受權, 僅客戶端
mSsoHandler.authorizeClientSso(new AuthListener());
// 建立微博 SDK 接口實例
mWeiboShareAPI = WeiboShareSDK.createWeiboAPI(this,
Constants.WB_APP_KEY);
// 註冊第三方應用到微博客戶端中,註冊成功後該應用將顯示在微博的應用列表中。
// 但該附件欄集成分享權限須要合做申請,詳情請查看 Demo 提示
// NOTE:請務必提早註冊,即界面初始化的時候或是應用程序初始化時,進行註冊
mWeiboShareAPI.registerApp();
// 當 Activity 被從新初始化時(該 Activity 處於後臺時,可能會因爲內存不足被殺掉了),
// 須要調用 {@link IWeiboShareAPI#handleWeiboResponse} 來接收微博客戶端返回的數據。
// 執行成功,返回 true,並調用 {@link IWeiboHandler.Response#onResponse};
// 失敗返回 false,不調用上述回調
mWeiboShareAPI.handleWeiboResponse(getIntent(), this);
// 獲取微博客戶端是否安裝
isInstalledWeibo = mWeiboShareAPI.isWeiboAppInstalled();
// 支持 SDK 的版本
supportApiLevel = mWeiboShareAPI.getWeiboAppSupportAPI();
}
/**
* 微博認證受權回調類。 1. SSO 受權時,須要在 {@link #onActivityResult} 中調用
* {@link SsoHandler#authorizeCallBack} 後, 該回調纔會被執行。 2. 非 SSO
* 受權時,當受權結束後,該回調就會被執行。 當受權成功後,請保存該 access_token、expires_in、uid 等信息到
* SharedPreferences 中。
*/
class AuthListener implements WeiboAuthListener {
@Override
public void onComplete(Bundle values) {
// 從 Bundle 中解析 Token
mAccessToken = Oauth2AccessToken.parseAccessToken(values);
// 判斷AccessToken是否有效
if (mAccessToken.isSessionValid()) {
// 保存 Token 到 SharedPreferences
AccessTokenKeeper.writeAccessToken(WBShareActivity.this,mAccessToken);
Toast.makeText(WBShareActivity.this, "獲取token成功",Toast.LENGTH_SHORT).show();
shareToWeiBo();
} else {
System.out.println("認證失敗");
}
}
@Override
public void onCancel() {
Toast.makeText(WBShareActivity.this, "取消", Toast.LENGTH_LONG)
.show();
}
@Override
public void onWeiboException(WeiboException e) {
Toast.makeText(WBShareActivity.this,
"Auth exception : " + e.getMessage(), Toast.LENGTH_LONG)
.show();
}
}
/**
* 分享到微博
*/
private void shareToWeiBo() {
if (isInstalledWeibo) {
if (mWeiboShareAPI.isWeiboAppSupportAPI()) {
if (supportApiLevel >= 10351 /* ApiUtils.BUILD_INT_VER_2_2 */) {
// 1. 初始化微博的分享消息
WeiboMultiMessage weiboMessage = new WeiboMultiMessage();
//這裏指實現了分享文本內容 還能夠分享 圖片 視頻 音樂 聲音 網頁 詳見WeiboSDKDemo
TextObject textObject = new TextObject();
textObject.text = "分享消息";
weiboMessage.textObject = textObject;
// 2. 初始化從第三方到微博的消息請求
SendMultiMessageToWeiboRequest request = new SendMultiMessageToWeiboRequest();
// 用transaction惟一標識一個請求
request.transaction = String.valueOf(System
.currentTimeMillis());
request.multiMessage = weiboMessage;
// 3. 發送請求消息到微博,喚起微博分享界面
mWeiboShareAPI.sendRequest(WBShareActivity.this, request);
}
} else {
Toast.makeText(this, "SDK不支持", Toast.LENGTH_SHORT).show();
}
} else {
Toast.makeText(this, "沒有安裝新浪微博客戶端", Toast.LENGTH_LONG).show();
}
遇到的問題:
受權時:
文件不存在 c8998
有兩種狀況:應用的簽名不一致,微博回調 不一致
解決辦法:新浪開發者-》個人應用(上方)--》應用信息--》高級信息(子目錄)--》)
OAuth2.0 受權設置
受權回調頁:
mAuthInfo = new AuthInfo(this, Constants.WB_APP_KEY,
Constants.REDIRECT_URL, Constants.SCOPE); Constants.REDIRECT_URL 要一致。
第二種就是簽名問題了。分享時,須要先打包(或者配置debug 簽名)。
還要注意下:
好坑的說。
<activity
android:name=".modules.share.ShareActivity"
android:configChanges="keyboard|keyboardHidden|orientation"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="com.sina.weibo.sdk.action.ACTION_SDK_REQ_ACTIVITY" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
最後貼一下我本身寫的:
動態權限
private String[] mPermissionList = new String[]
{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.CALL_PHONE,
Manifest.permission.READ_LOGS, Manifest.permission.READ_PHONE_STATE,
Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.SET_DEBUG_APP,
Manifest.permission.SYSTEM_ALERT_WINDOW, Manifest.permission.GET_ACCOUNTS};
/**
* 微博實例
*/
private AuthInfo mAuthInfo;
/**
* 注意:SsoHandler 僅當 SDK 支持 SSO 時有效
*/
private SsoHandler mSsoHandler;
/**
* 封裝了 "access_token","expires_in","refresh_token",並提供了他們的管理功能
*/
private Oauth2AccessToken mAccessToken;
/**
* 是否安裝微博
*/
private boolean isInstalledWeibo;
/**
* 支持Api級別
*/
private int supportApiLevel;
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
//sina 受權回調
if (mSsoHandler != null) {
mSsoHandler.authorizeCallBack(requestCode, resultCode, data);
}
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
// 從當前應用喚起微博並進行分享後,返回到當前應用時,須要在此處調用該函數
// 來接收微博客戶端返回的數據;執行成功,返回 true,並調用
// {@link IWeiboHandler.Response#onResponse};失敗返回 false,不調用上述回調
iWeiboShareAPI.handleWeiboResponse(intent, this);
}
View onClick 後執行:
iWeiboShareAPI = WeiboShareSDK.createWeiboAPI(ShareActivity.this,
ShareConfig.XL_APPID);
// 註冊第三方應用到微博客戶端中,註冊成功後該應用將顯示在微博的應用列表中。
// 但該附件欄集成分享權限須要合做申請,詳情請查看 Demo 提示
// NOTE:請務必提早註冊,即界面初始化的時候或是應用程序初始化時,進行註冊
iWeiboShareAPI.registerApp();
// 獲取微博客戶端是否安裝
isInstalledWeibo = iWeiboShareAPI.isWeiboAppInstalled();
// 支持 SDK 的版本
supportApiLevel = iWeiboShareAPI.getWeiboAppSupportAPI();
//socpe 參考地址:http://open.weibo.com/wiki/Scope#scope.E6.9D.83.E9.99.90.E6.8E.A5.E5.8F.A3
mAuthInfo = new AuthInfo(this, ShareConfig.XL_APPID,
"http://www.sina.com", "all");
mSsoHandler = new SsoHandler(this, mAuthInfo);
// SSO 受權, 僅客戶端
mSsoHandler.authorizeClientSso(new WeiboAuthListener() {
@Override
public void onComplete(Bundle bundle) {
// 從 Bundle 中解析 Token
mAccessToken = Oauth2AccessToken.parseAccessToken(bundle);
// 判斷AccessToken是否有效
if (mAccessToken.isSessionValid()) {
// 保存 Token 到 SharedPreferences
AccessTokenKeeper.writeAccessToken(ShareActivity.this, mAccessToken);
Toast.makeText(ShareActivity.this, "獲取token成功", Toast.LENGTH_SHORT).show();
shareToWeiBo();
} else {
System.out.println("獲取Token失敗!");
}
}
@Override
public void onWeiboException(WeiboException e) {
Toast.makeText(ShareActivity.this,
"Auth exception : " + e.getMessage(), Toast.LENGTH_LONG)
.show();
}
@Override
public void onCancel() {
Toast.makeText(ShareActivity.this, "sina 受權取消", Toast.LENGTH_SHORT).show();
}
});
private void shareToWeiBo() { if (isInstalledWeibo) { if (iWeiboShareAPI.isWeiboAppSupportAPI()) { //mulitMessage if (supportApiLevel >= 10351 /* ApiUtils.BUILD_INT_VER_2_2 */) { TextObject textObject4 = new TextObject(); textObject4.text = "要分享的文字"; Timber.d(">10351 mulitmessage");// sendMultiMessage(hasText, hasImage, hasWebpage, hasMusic, hasVideo, hasVoice); WeiboMultiMessage multiMessage = new WeiboMultiMessage(); multiMessage.textObject = textObject4; SendMultiMessageToWeiboRequest request5 = new SendMultiMessageToWeiboRequest(); request5.multiMessage = multiMessage; request5.transaction = String.valueOf(System.currentTimeMillis()); boolean result = iWeiboShareAPI.sendRequest(this, request5); Timber.d("start mulit share...." + result); } else {//singe messge Toast.makeText(ShareActivity.this, "start single share...", Toast.LENGTH_SHORT).show(); } } else { Toast.makeText(ShareActivity.this, "SDK 不支持!", Toast.LENGTH_SHORT).show(); } } else { Toast.makeText(ShareActivity.this, "沒有安裝客戶端!", Toast.LENGTH_SHORT).show(); } }