1. 程式人生 > >Android新浪微博SDK分享功能接入

Android新浪微博SDK分享功能接入

整合前準備

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>

文章參考:新浪微博開發文件
文章參考:新浪微博github地址中的demo