終於成功實現了新浪平臺的分享功能。中間遇到了各種各樣的問題,樓主也是醉了。
現在好多應用都實現新浪,QQ,騰訊等三方平臺功能,這時一般來說會有兩種解決辦法。
1:利用ShareSdk;這種方式比較簡單。去下載他們官方SDK,裏邊介紹的很詳細,這裏不多說。
2:利用各自官方SDK。這種方式你就需要去看下官方SDK中Demo的實現。這裏那Sina分享爲例詳細說下
第一步:去新浪官方開發者平臺註冊你的應用:http://open.weibo.com/development/mobile。這個地方相信都知道怎麼做,不多闡述
但要注意的一點是:你的應用程序的包名,簽名。以及高級信息裏的回調地址務必要填寫:包名是你自己應用AndroidManifest.xml中的,
簽名一定要用官方提供的MD5簽名生成工具。至於回調地址,使用官方推薦的就可以,個人是http://www.sian.com
第二步:去下載官方Android SDK.(我會在後邊給你們提供),解壓後名字叫做 weibo_android_sdk-master的文件。裏邊有WeiboSDK,WeiBoSDKDemo, 以及
api文檔。
第三步: 就是正式開發了。
1:首先準備工作
把WeiboSDK (作爲你項目的Liarbery,必須)與WeiBoSDKDemo(只是官方的Demo,裏邊有相關實現的方法,可以看下,
非必須)導入到eclipse。 然後新建你自己的項目(假設項目名爲SinaDemo),右鍵你的項目—prpperties—android—右側add—選擇WeiboSDK.
2: 然後具體實現,在我的項目中的main中有兩個Button。(我的是點擊Button1後彈出新浪登錄界面,爲的是拿到授權,即
Oauth2AccessToken mAccessToken。點擊Button2後跳轉發微博界面。你可以參考你自己的邏輯來實現。但原理相同。即拿到這
個 Oauth2AccessToken mAccessToken後纔可以完成分享)
3:在你的MainActivity的Oncreate中聲明這個:
AuthInfo mAuthInfo=new AuthInfo(this, Constants.APP_KEY, Constants.REDIRECT_URL,null);
其中的
/**
* 該類定義了微博授權時所需要的參數。
*
* @author SINA
* @since 2013-09-29
*/
public interface Constants {
/** 當前 DEMO 應用的 APP_KEY,第三方應用應該使用自己的 APP_KEY 替換該 APP_KEY */
public static final String APP_KEY= "1639150612";//換成你自己的
/**
* 當前 DEMO 應用的回調頁,第三方應用可以使用自己的回調頁。
*
* <p>
* 注:關於授權回調頁對移動客戶端應用來說對用戶是不可見的,所以定義爲何種形式都將不影響,
* 但是沒有定義將無法使用 SDK 認證登錄。
* 建議使用默認回調頁:https://api.weibo.com/oauth2/default.html
* </p>
*/
public static final String REDIRECT_URL = "http://www.sina.com";//你註冊應用填寫的回調地址。
/**
* Scope 是 OAuth2.0 授權機制中 authorize 接口的一個參數。通過 Scope,平臺將開放更多的微博
* 核心功能給開發者,同時也加強用戶隱私保護,提升了用戶體驗,用戶在新 OAuth2.0 授權頁中有權利
* 選擇賦予應用的功能。
*
* 我們通過新浪微博開放平臺-->管理中心-->我的應用-->接口管理處,能看到我們目前已有哪些接口的
* 使用權限,高級權限需要進行申請。
*
* 目前 Scope 支持傳入多個 Scope 權限,用逗號分隔。
*
* 有關哪些 OpenAPI 需要權限申請,請查看:http://open.weibo.com/wiki/%E5%BE%AE%E5%8D%9AAPI
* 關於 Scope 概念及注意事項,請查看:http://open.weibo.com/wiki/Scope
*/
public static final String SCOPE = //這個是爲了實現更多的功能所需要的權限。
"email,direct_messages_read,direct_messages_write,"
+ "friendships_groups_read,friendships_groups_write,statuses_to_me_read,"
+ "follow_app_official_microblog," + "invitation_write";
}
然後:
mSsoHandler = new SsoHandler(this, mAuthInfo);
btn1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
mSsoHandler.authorize(new AuthListener());
}
});
class AuthListener implements WeiboAuthListener {
@Override
public void onComplete(Bundle values) {
// 從 Bundle 中解析 Token
mAccessToken = Oauth2AccessToken.parseAccessToken(values);
if (mAccessToken.isSessionValid()) {
// 顯示 Token
// 保存 Token 到 SharedPreferences
} else {
// 以下幾種情況,您會收到 Code:
// 1. 當您未在平臺上註冊的應用程序的包名與簽名時;
// 2. 當您註冊的應用程序包名與簽名不正確時;
// 3. 當您在平臺上註冊的包名和簽名與您當前測試的應用的包名和簽名不匹配時。
String code = values.getString("code");
String message = "失敗";
if (!TextUtils.isEmpty(code)) {
message = message + "\nObtained the code: " + code;
}
Toast.makeText(MainActivity.this, message, Toast.LENGTH_LONG)
.show();
}
}
@Override
public void onCancel() {
Toast.makeText(MainActivity.this, "onCancel", Toast.LENGTH_LONG)
.show();
}
@Override
public void onWeiboException(WeiboException e) {
Toast.makeText(MainActivity.this,
"Auth exception : " + e.getMessage(), Toast.LENGTH_LONG)
.show();
}
}
至此: 你就在onComplete中拿到 Oauth2AccessToken mAccessToken; 開始實現分享
至此,你在實現分享之前需要註冊你的應用(也就兩句代碼)即在oncreat中
mWeiboShareAPI = WeiboShareSDK.createWeiboAPI(this, Constants.APP_KEY);
mWeiboShareAPI.registerApp();
我是Button2事件分享:
btn2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// 我btn2 事件調用的sendMultiMessage()函數。裏邊的String參數是我默認分享的內容。
sendMultiMessage("你好世界");
}
});
private void sendMultiMessage(String message) {
WeiboMultiMessage weiboMessage = new WeiboMultiMessage();// 初始化微博的分享消息
weiboMessage.textObject = getTextObj();
SendMultiMessageToWeiboRequest request = new SendMultiMessageToWeiboRequest();
request.transaction = String.valueOf(System.currentTimeMillis());
request.multiMessage = weiboMessage;
AuthInfo authInfo = new AuthInfo(this, Constants.APP_KEY,
Constants.REDIRECT_URL, Constants.SCOPE);
Oauth2AccessToken accessToken = mAccessToken;
String token = "";
if (accessToken != null) {
token = accessToken.getToken();
}
mWeiboShareAPI.sendRequest(this, request, authInfo, token,
new WeiboAuthListener() {//這個接口是你分享成功或失敗的回調
@Override
public void onCancel() {
}
@Override
public void onComplete(Bundle arg0) {
}
@Override
public void onWeiboException(WeiboException bundle) {
});
}
你還需要在你的MainACtivity中實現OnActivityResult @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
if (mSsoHandler != null) {
mSsoHandler.authorizeCallBack(requestCode, resultCode, data);
}
}
最後就是權限,以及配置activity。(官方要求這樣配置)
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<activity
android:name="com.sina.weibo.sdk.demo.WBShareActivity"
android:configChanges="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>
<activity
android:name="com.sina.weibo.sdk.component.WeiboSdkBrowser"
android:configChanges="keyboardHidden|orientation"
android:exported="false"
android:windowSoftInputMode="adjustResize" >
</activity>
本文力求簡潔明瞭。 不過多闡述那些定義。
感謝。