Android新浪微博SDK分享功能接入
阿新 • • 發佈:2018-12-22
整合前準備
1. 申請APP_KEY
第三方需要接入微博SDK必須在微博開放平臺上對應用進行註冊,並獲取APP_KEY,新增
應用的授權回撥頁面(Redirect URI)
2. 註冊應用程式的包名和簽名
您需要在微博開放平臺上註冊應用程式的包名和簽名後,才能正確進行授權。
請注意:包名和簽名未註冊,或者簽名註冊不正確,都會導致無法授權。
應用程式包名:指AndroidManifest.xml檔案中,package標籤所代表的內容。
應用程式簽名:該簽名是通過官方提供的簽名工具生成的MD5值。
詳情請檢視:微博Android平臺SDK文件V4.0pdf 中:如何使用簽名工具獲取您應用的簽名?
注:這個pdf連結不知道是我瀏覽器的原因還是怎麼回事,一直是打不開的,但是這個文件在文章末尾提到的官方demo中,是有這個文件的,大家可以將demo下載下來,然後就可以看裡面的 Android平臺SDK文件V4.0pdf。
3. 整合sdk
1:Android Studio接入 在你工程的主模組下面修改build.gradle檔案,新增微博sdk的依賴
allprojects {
repositories {
jcenter()
mavenCentral()
maven { url "https://dl.bintray.com/thelasterstar/maven/" }
}
}
compile 'com.sina.weibo.sdk:core:4.1.3:[email protected]'
注:新增完依賴後需要點選 Sync Project with Gradle Files 按鈕進行下載依賴包
2:Manifest檔案中新增以下permission應用許可權
<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>
應用接入
1. 替換成自己應用的 APP_KEY 等引數
定義Constants介面,並將Constants類中的各種引數替換成自己應用的引數,請仔細閱讀程式碼註釋。
public interface Constants {
/** 當前 DEMO 應用的 APP_KEY,第三方應用應該使用自己的 APP_KEY 替換該 APP_KEY */
public static final String APP_KEY = "2045436852";
/**
* 當前 DEMO 應用的回撥頁,第三方應用可以使用自己的回撥頁。
* 建議使用預設回撥頁:https://api.weibo.com/oauth2/default.html
*/
public static final String REDIRECT_URL = "http://www.sina.com";
/**
* WeiboSDKDemo 應用對應的許可權,第三方開發者一般不需要這麼多,可直接設定成空即可。
* 詳情請檢視 Demo 中對應的註釋。
*/
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";
}
2. Activity中接入分享
public class ShareActivity extends AppCompatActivity implements View.OnLongClickListener,WbShareCallback {//實現WbAuthListener介面
public static final String TAG = "Chunna=ShareActivity";
private ImageView ivQRCode;
WbShareHandler shareHandler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_share);
initView();
initWeiBo();
}
private void initView() {
ivQRCode = (ImageView)findViewById(R.id.iv_share_QRcode);
ivQRCode.setOnLongClickListener(this);
}
private void initWeiBo() {
WbSdk.install(this,new AuthInfo(this, WebConstants.APP_KEY,WebConstants.REDIRECT_URL, WebConstants.SCOPE));//建立微博API介面類物件
shareHandler = new WbShareHandler(this);
shareHandler.registerApp();
}
/**
* 使用者點選分享按鈕,喚起微部落格戶端進行分享。
*/
@Override
public boolean onLongClick(View view) {
//第一個引數是判斷分享內容中是否有文字,第一個引數是判斷分享內容中是否有圖片
sendMessageToWb(false,true);
return true;
}
@Override
public void onWbShareSuccess() {
Log.d(TAG,"分享成功");
}
@Override
public void onWbShareCancel() {
Log.d(TAG,"分享取消");
}
@Override
public void onWbShareFail() {
Log.d(TAG,"分享失敗");
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
shareHandler.doResultIntent(intent,this);
}
/**
* 第三方應用傳送請求訊息到微博,喚起微博分享介面。
*/
private void sendMessageToWb(boolean hasText, boolean hasImage) {
sendMultiMessage(hasText, hasImage);
}
/**
* 第三方應用傳送請求訊息到微博,喚起微博分享介面。
*/
private void sendMultiMessage(boolean hasText, boolean hasImage) {
WeiboMultiMessage weiboMessage = new WeiboMultiMessage();
if (hasText) {
weiboMessage.textObject = getTextObj();
}
if (hasImage) {
weiboMessage.imageObject = getImageObj(this);
}
shareHandler.shareMessage(weiboMessage, false);
}
/**
* 建立文字訊息物件。
* @return 文字訊息物件。
*/
private TextObject getTextObj() {
TextObject textObject = new TextObject();
textObject.text = "這裡是分享的內容";
textObject.title = "xxxx";
textObject.actionUrl = "http://www.baidu.com";
return textObject;
}
/**
* 建立圖片訊息物件。
* @return 圖片訊息物件。
*/
private ImageObject getImageObj(Context context) {
ImageObject imageObject = new ImageObject();
Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), R.mipmap.ic_share_qrcode);
imageObject.setImageObject(bitmap);
return imageObject;
}
}
<?xml version="1.0" encoding="utf-8"?>
<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"
android:orientation="vertical">
<ImageView
android:id="@+id/iv_share_QRcode"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:background="@mipmap/ic_launcher"/>
</RelativeLayout>