社會(huì)化登錄分享-新浪微博 SDK接入

本篇在基于之前封裝的SocialSDK的項(xiàng)目上增加了新浪微博 SDK的登錄授權(quán)和分享谱净。介紹了新浪微博登錄分享的接入和使用注意事項(xiàng)。

具體代碼項(xiàng)目Github地址:https://github.com/tsy12321/SocialSDKAndroid

0 系列文章

系列一 Android SDK的二次封裝和使用
系列二 源碼解析
系列三 微信SDK接入
系列四 QQ SDK接入
系列五 新浪微博 SDK接入

1 官方文檔

新浪微博官方SDK:

https://github.com/sinaweibosdk/weibo_android_sdk

API WIKI(授權(quán)成功后可以使用access_token去調(diào)用接口獲取數(shù)據(jù)):

http://open.weibo.com/wiki/%E5%BE%AE%E5%8D%9AAPI

2 新浪微博SDK說明

和 微信和QQ SDK不同亭姥,新浪微博SDK包含2個(gè)三圆,一個(gè)是weiboSDKCore_3.1.4.jar, 還有一個(gè)是所有的so庫(kù)。

需要同時(shí)引用蒜绽。引用so庫(kù)的方法如下

將所有so文件統(tǒng)一放到項(xiàng)目的目錄app/jniLibs中(和libs同級(jí)), 然后在gradle中加上

android {

    ...

    //引入微博的所有so庫(kù)
    sourceSets {
        main {
            jniLibs.srcDirs = ['jniLibs']
        }
    }
}

3 集成登錄授權(quán)

在之前的框架里創(chuàng)建一個(gè)SinaWBHandler,并且在PlatformType桶现、PlatformConfig增加新浪微博的配置類型躲雅。

然后在SinaWBHandler先初始化mAuthInfo:

this.mAuthInfo = new AuthInfo(mContext, mConfig.appKey, REDIRECT_URL, SCOPE);

授權(quán)登錄時(shí)調(diào)用:

 mSsoHandler.authorize(new WeiboAuthListener() {
            @Override
            public void onComplete(Bundle bundle) {
                // 從 Bundle 中解析 Token
                Oauth2AccessToken accessToken = Oauth2AccessToken.parseAccessToken(bundle);
                if(accessToken.isSessionValid()) {
                    Map<String, String> map = new HashMap<String, String>();
                    map.put("uid", accessToken.getUid());
                    map.put("access_token", accessToken.getToken());
                    map.put("refresh_token", accessToken.getRefreshToken());
                    map.put("expire_time", "" + accessToken.getExpiresTime());

                    mAuthListener.onComplete(mConfig.getName(), map);
                } else {
                    String errmsg = "errmsg=accessToken is not SessionValid";
                    LogUtils.e(errmsg);
                    mAuthListener.onError(mConfig.getName(), errmsg);
                }
            }

            @Override
            public void onWeiboException(WeiboException e) {
                String errmsg = "errmsg=" + e.getMessage();
                LogUtils.e(errmsg);
                mAuthListener.onError(mConfig.getName(), errmsg);
            }

            @Override
            public void onCancel() {
                mAuthListener.onCancel(mConfig.getName());
            }
        });

最后返回access_token, uid等數(shù)據(jù)給使用sdk用戶骡和,用戶可以保存或者直接使用access_token去調(diào)用新浪微博的API獲取各種新浪微博數(shù)據(jù)相赁。

回調(diào)處理,直接在SinaWBHandler中實(shí)現(xiàn)onActivityResult

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    mSsoHandler.authorizeCallBack(requestCode, resultCode, data);
}

3 分享

新浪微博的分享有幾個(gè)注意點(diǎn)慰于。在新浪微博SDK接入說明中钮科,

發(fā)起分享的Activity的AndroidManifest中要添加以下代碼

<activity android:name="com.tsy.girl.MainActivity"> <!--發(fā)起分享的Activity-->
    
    <!--增加的代碼-->
    <intent-filter>
        <action android:name="com.sina.weibo.sdk.action.ACTION_SDK_REQ_ACTIVITY" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

發(fā)起分享的Activity要實(shí)現(xiàn)IWeiboHandler.Response接口,并且重寫onNewIntent婆赠,在onNewIntent中要調(diào)用新浪微博的SDK方法绵脯,才能正確回調(diào)。

于是我們提供封裝的SDK要求用戶在這幾個(gè)地方主動(dòng)調(diào)用SinaWBHandler的方法休里,具體的處理在SinaWBHandler中進(jìn)行處理桨嫁,詳細(xì)可以見系列一文章的新浪微博接入說明。

!!在這里注意一點(diǎn)份帐,實(shí)現(xiàn)IWeiboHandler.Response的必須是Activity方法,新浪微博SDK中會(huì)判斷如果instantof Activity楣导, 在這新浪微博的SDK沒有進(jìn)行說明废境, 如果不是Activity會(huì)收不到分享回調(diào)

具體的分享代碼可以直接參見新浪微博SDK的說明,5種媒介都可以實(shí)現(xiàn)筒繁,集成的代碼如下:

@Override
public void share(Activity activity, IShareMedia shareMedia, ShareListener shareListener) {
    this.mActivity = activity;
    this.mShareListener = shareListener;

    this.mSsoHandler = new SsoHandler(mActivity, mAuthInfo);

    WeiboMultiMessage weiboMessage = new WeiboMultiMessage();

    if(shareMedia instanceof ShareWebMedia) {       //網(wǎng)頁(yè)分享
        ShareWebMedia shareWebMedia = (ShareWebMedia) shareMedia;

        WebpageObject mediaObject = new WebpageObject();
        mediaObject.identify = Utility.generateGUID();
        mediaObject.title = shareWebMedia.getTitle();
        mediaObject.description = shareWebMedia.getDescription();
        mediaObject.setThumbImage(shareWebMedia.getThumb());
        mediaObject.actionUrl = shareWebMedia.getWebPageUrl();

        weiboMessage.mediaObject = mediaObject;
    } else if(shareMedia instanceof ShareTextMedia) {   //文字分享
        ShareTextMedia shareTextMedia = (ShareTextMedia) shareMedia;

        TextObject textObject = new TextObject();
        textObject.text = shareTextMedia.getText();

        weiboMessage.textObject = textObject;
    } else if(shareMedia instanceof ShareImageMedia) {  //圖片分享
        ShareImageMedia shareImageMedia = (ShareImageMedia) shareMedia;

        ImageObject imageObject = new ImageObject();
        imageObject.setImageObject(shareImageMedia.getImage());

        weiboMessage.imageObject = imageObject;
    } else if (shareMedia instanceof ShareMusicMedia) {  //音樂分享
        ShareMusicMedia shareMusicMedia = (ShareMusicMedia) shareMedia;

        MusicObject musicObject = new MusicObject();
        musicObject.identify = Utility.generateGUID();
        musicObject.title = shareMusicMedia.getTitle();
        musicObject.description = shareMusicMedia.getDescription();

        musicObject.setThumbImage(shareMusicMedia.getThumb());
        musicObject.actionUrl = shareMusicMedia.getMusicUrl();
        musicObject.dataUrl = shareMusicMedia.getMusicUrl();
        musicObject.dataHdUrl = shareMusicMedia.getMusicUrl();
        musicObject.duration = 10;
        musicObject.defaultText = "music 默認(rèn)文案";

        weiboMessage.mediaObject = musicObject;
    } else if(shareMedia instanceof ShareVideoMedia) {      //視頻分享
        ShareVideoMedia shareVideoMedia = (ShareVideoMedia) shareMedia;

        VideoObject videoObject = new VideoObject();
        videoObject.identify = Utility.generateGUID();
        videoObject.title = shareVideoMedia.getTitle();
        videoObject.description = shareVideoMedia.getDescription();

        videoObject.setThumbImage(shareVideoMedia.getThumb());
        videoObject.actionUrl = shareVideoMedia.getVideoUrl();
        videoObject.dataUrl = shareVideoMedia.getVideoUrl();
        videoObject.dataHdUrl = shareVideoMedia.getVideoUrl();
        videoObject.duration = 10;
        videoObject.defaultText = "Vedio 默認(rèn)文案";

        weiboMessage.mediaObject = videoObject;
    } else {
        if(this.mShareListener != null) {
            this.mShareListener.onError(this.mConfig.getName(), "shareMedia error");
        }
        return ;
    }

    SendMultiMessageToWeiboRequest request = new SendMultiMessageToWeiboRequest();
    request.transaction = String.valueOf(System.currentTimeMillis()); request.multiMessage = weiboMessage;
    mWeiboShareAPI.sendRequest(mActivity, request);
}

回調(diào)處理:

public void onNewIntent(Intent intent, IWeiboHandler.Response response) {
    mWeiboShareAPI.handleWeiboResponse(intent, response);
}

public void onResponse(BaseResponse baseResponse) {
    if(baseResponse!= null){
        switch (baseResponse.errCode) {
            case WBConstants.ErrorCode.ERR_OK:
                if(this.mShareListener != null) {
                    this.mShareListener.onComplete(this.mConfig.getName());
                }
                break;
            case WBConstants.ErrorCode.ERR_CANCEL:
                if(this.mShareListener != null) {
                    this.mShareListener.onCancel(this.mConfig.getName());
                }
                break;
            case WBConstants.ErrorCode.ERR_FAIL:
                if(this.mShareListener != null) {
                    this.mShareListener.onError(this.mConfig.getName(), baseResponse.errMsg);
                }
                break;
        }
    }
}

結(jié)尾

以上即實(shí)現(xiàn)了新浪微博的接入噩凹。至此,該社會(huì)化分享組件完成了微信毡咏、QQ驮宴、新浪微博的授權(quán)登錄和分享的集成。相對(duì)于Umeng等第三方來說呕缭,沒有將app_secret放到客戶端堵泽,獲取到access_token后直接返回修己,讓服務(wù)端去處理。增加了安全性迎罗。也方便以后擴(kuò)展定制睬愤。(之前用UMeng的社會(huì)化組件必須傳入app_secret)

*** PS:之前還集成過FaceBook、Twitter纹安、Google尤辱,糾結(jié)要不要加進(jìn)去。感覺國(guó)內(nèi)基本上不會(huì)用到厢岂。光督。。歡迎來Github提issue和fork塔粒,star***

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末结借,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子窗怒,更是在濱河造成了極大的恐慌映跟,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,000評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件扬虚,死亡現(xiàn)場(chǎng)離奇詭異努隙,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)辜昵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門荸镊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人堪置,你說我怎么就攤上這事躬存。” “怎么了舀锨?”我有些...
    開封第一講書人閱讀 168,561評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵岭洲,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我坎匿,道長(zhǎng)盾剩,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,782評(píng)論 1 298
  • 正文 為了忘掉前任替蔬,我火速辦了婚禮告私,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘承桥。我一直安慰自己驻粟,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,798評(píng)論 6 397
  • 文/花漫 我一把揭開白布凶异。 她就那樣靜靜地躺著蜀撑,像睡著了一般挤巡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上屯掖,一...
    開封第一講書人閱讀 52,394評(píng)論 1 310
  • 那天玄柏,我揣著相機(jī)與錄音,去河邊找鬼贴铜。 笑死粪摘,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的绍坝。 我是一名探鬼主播徘意,決...
    沈念sama閱讀 40,952評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼轩褐!你這毒婦竟也來了椎咧?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,852評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤把介,失蹤者是張志新(化名)和其女友劉穎勤讽,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體拗踢,經(jīng)...
    沈念sama閱讀 46,409評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡脚牍,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,483評(píng)論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了巢墅。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片诸狭。...
    茶點(diǎn)故事閱讀 40,615評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖君纫,靈堂內(nèi)的尸體忽然破棺而出驯遇,到底是詐尸還是另有隱情,我是刑警寧澤蓄髓,帶...
    沈念sama閱讀 36,303評(píng)論 5 350
  • 正文 年R本政府宣布叉庐,位于F島的核電站,受9級(jí)特大地震影響会喝,放射性物質(zhì)發(fā)生泄漏陡叠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,979評(píng)論 3 334
  • 文/蒙蒙 一好乐、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧瓦宜,春花似錦蔚万、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)昵慌。三九已至,卻和暖如春淮蜈,著一層夾襖步出監(jiān)牢的瞬間斋攀,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工梧田, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留淳蔼,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,041評(píng)論 3 377
  • 正文 我出身青樓裁眯,卻偏偏與公主長(zhǎng)得像鹉梨,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子穿稳,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,630評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容