Android-友盟社會(huì)化分享庫(kù)&自定義分享

友盟的分享,每次都單獨(dú)配置,有點(diǎn)麻煩,整了個(gè)庫(kù)

Android的分享功能友盟用的蠻多的,一般情況下自帶的分享面板就滿足需求了,但是也有一些情況下需要在自己的項(xiàng)目里點(diǎn)擊按鈕直接跳轉(zhuǎn)分享,所以自帶的就不太給力了。這里記錄一下項(xiàng)目里自定義分享功能,官方文檔里也說(shuō)明了需要怎么處理,但是對(duì)于剛接觸的人來(lái)說(shuō)可能就不是那么明了了。這里記錄一下下,看看文檔,然后開(kāi)搞!

 注:由于騰訊開(kāi)放平臺(tái)增加包名、簽名校驗(yàn),因此使用QQ、Qzone的分享、授權(quán)功能的開(kāi)發(fā)者
    必須使用自己在騰訊開(kāi)放平臺(tái)申請(qǐng)獲取的QQ APPID,否則將無(wú)法正常使用。

一、配置 由于我把整個(gè)分享部分弄成依賴(lài)庫(kù)了,所以除開(kāi)QQ微信必須的東西,只需要依賴(lài)就行了

  • 1.注冊(cè)下載SDK,準(zhǔn)備QQ微信的ID啊什么的。
  • 2.配置SDK。

在項(xiàng)目的build.gradle加入代碼

allprojects {
      repositories {
         ...
         maven { url "https://jitpack.io" }
      }
   }

在module的build.gradle加入

   dependencies {
           compile 'com.github.paradoxie:UmengSocialLibrary:0.2'//0.2版本V7版本為23.3.0
            //正在用22的朋友依賴(lài)0.3版本,v7為22.0.+,源碼里面是新開(kāi)了一個(gè)分支
   }
  • 3.配置manifest.xml的權(quán)限和必要的activity

這樣就能調(diào)用到友盟的方法了

二、友盟集成的分享

添加友盟分享Controller成員變量

private final UMSocialService mSocialService =
UMServiceFactory.getUMSocialService("com.umeng.share");

在喚起分享的點(diǎn)擊事件中加入:

mSocialService.setShareContent("分享內(nèi)容");
mSocialService.setShareMedia(new UMImage(SettingActivity.this, 圖標(biāo)));
mSocialService.getConfig().removePlatform(SHARE_MEDIA.SINA, SHARE_MEDIA.TENCENT);

// 添加微信平臺(tái)

UMWXHandler wxHandler = new UMWXHandler(SettingActivity.this, appId, appSecret);
wxHandler.addToSocialSDK();
wxHandler.setTitle(getString(R.string.app_name));
wxHandler.setTargetUrl(getString(R.string.sms_spread_url));

// 添加微信朋友圈

UMWXHandler wxCircleHandler = new UMWXHandler(SettingActivity.this, appId, appSecret);
wxCircleHandler.setToCircle(true);
wxCircleHandler.addToSocialSDK();
wxCircleHandler.setTitle(getString(R.string.app_name));
    wxCircleHandler.setTargetUrl(getString(R.string.sms_spread_url));

//參數(shù)1為當(dāng)前Activity,參數(shù)2為開(kāi)發(fā)者在QQ互聯(lián)申請(qǐng)的APP ID,參數(shù)3為開(kāi)發(fā)者在QQ互聯(lián)申請(qǐng)的APP kEY

UMQQSsoHandler qqSsoHandler = new UMQQSsoHandler(SettingActivity.this, "APP ID", "APP KEY");
qqSsoHandler.addToSocialSDK();
qqSsoHandler.setTitle(getString(R.string.app_name));
qqSsoHandler.setTargetUrl(getString(R.string.sms_spread_url));

//參數(shù)1為當(dāng)前Activity,參數(shù)2為開(kāi)發(fā)者在QQ互聯(lián)申請(qǐng)的APP ID,參數(shù)3為開(kāi)發(fā)者在QQ互聯(lián)申請(qǐng)的APP kEY.

QZoneSsoHandler qZoneSsoHandler = new QZoneSsoHandler(SettingActivity.this, "APP ID","APP KEY");
qZoneSsoHandler.addToSocialSDK();
qZoneSsoHandler.setTargetUrl(getString(R.string.sms_spread_url)); 

最后

 mSocialService.openShare(SettingActivity.this, false);

三、自定義分享面板

首先看官方文檔的做法

new ShareAction(this)
.setPlatform(SHARE_MEDIA.SINA)
.setCallback(umShareListener)
.withText("hello umeng video")
.withTargetUrl("http://www.baidu.com")
.withMedia(image).share();

傳入了umShareListener,需要重寫(xiě)回調(diào)接口:

new UMShareListener() { 
    @Override 
    public void onResult(SHARE_MEDIA platform) {  
           Toast.makeText(ShareActivity.this,platform + " 分享成功啦", Toast.LENGTH_SHORT).show();
     } 

    @Override
    public void onError(SHARE_MEDIA platform, Throwable t) { 
           Toast.makeText(ShareActivity.this,platform + " 分享失敗啦", Toast.LENGTH_SHOR T).show(); 
    } 
    @Override 
    public void onCancel(SHARE_MEDIA platform) { 
            Toast.makeText(ShareActivity.this,platform + " 分享取消了", Toast.LENGTH_SHORT).show(); 
    } 
  };

講真,第一次看有點(diǎn)蒙逼。。。

*假裝有條分割線。。。。。。。。

開(kāi)始搞自己的:

首先,自己的面板也就是沒(méi)有面板。。。也就是隨便來(lái)個(gè)按鈕都能喚起分享,所以需要來(lái)個(gè)方法響應(yīng)點(diǎn)擊事件。在此之前,需要將支持的平臺(tái)初始化加入到SocialSDK,初始化控件之前:

private void prepareShare(){
    // 添加微信平臺(tái)
    UMWXHandler wxHandler = new UMWXHandler(this, Common.APP_ID, Common.APP_SECRET);
    wxHandler.addToSocialSDK();
    // 支持微信朋友圈
    UMWXHandler wxCircleHandler = new UMWXHandler(this, Common.APP_ID, Common.APP_SECRET);
    wxCircleHandler.setToCircle(true);
    wxCircleHandler.addToSocialSDK();
    //支持QQ
    UMQQSsoHandler qqSsoHandler = new UMQQSsoHandler(this, "APP ID","APP KEY");
    qqSsoHandler.addToSocialSDK();
    //QQ空間分享
    QZoneSsoHandler qZoneSsoHandler = new QZoneSsoHandler(this, "APP ID","APP KEY");
    qZoneSsoHandler.addToSocialSDK();
    //新浪微博不用這么干
    //SinaSsoHandler sinaSsoHandler = new SinaSsoHandler(this);
    //sinaSsoHandler.addToSocialSDK();
}

類(lèi)成員變量mController:

    private final UMSocialService mController =             
    UMServiceFactory.getUMSocialService("com.umeng.share", RequestType.SOCIAL);

然后仿造官方的開(kāi)始封裝自定義分享方法,回調(diào)監(jiān)聽(tīng),抽象出了很多參數(shù),這樣在點(diǎn)擊事件中可以直接傳值。

    /** 
    * 友盟社會(huì)化分享自定義 *
    * @param context     上下文
    * @param mController 分享服務(wù) 
    * @param var         平臺(tái)類(lèi)型 
    * @param content     平臺(tái) 
    */
    public static void shareToFriend(Context context, final UMSocialService mController, SHARE_MEDIA var, BaseShareContent content) {    
    //        WeiXinShareContent weixinContent = new WeiXinShareContent();    
            //設(shè)置分享文字    
            content.setShareContent("內(nèi)容");    
            //設(shè)置title    
            content.setTitle("標(biāo)題");    
            //設(shè)置分享內(nèi)容跳轉(zhuǎn)URL
            content.setTargetUrl("WWW.BAIDU.COM" );    
            //設(shè)置分享圖片    
            UMImage img = new UMImage(context, R.drawable.ic_launcher);    
            content.setShareImage(img);
            mController.setShareMedia(content);    
            setShareBtn(context, mController, var);
    }

    /** 
    * 設(shè)置自定義監(jiān)聽(tīng) * 
    * @param context     上下文 
    * @param mController 分享服務(wù) 
    * @param var         平開(kāi)類(lèi)型 
    */
    private static void setShareBtn(final Context context, final UMSocialService mController, SHARE_MEDIA var) {  
    mController.postShare(context, var, new SocializeListeners.SnsPostListener() {
            @Override                
            public void onStart() {                
              }               
         @Override                
            public void onComplete(SHARE_MEDIA arg0, int eCode,SocializeEntity arg2) {
                if (eCode == 200) {
                } else {
                    String eMsg = "";
                    if (eCode == -101) {
                        eMsg = "沒(méi)有授權(quán)";
                    }
                } 
           }
        });

}

比如上面的SHARE_MEDIA參數(shù),即可傳入SHARE_MEDIA.WEIXIN,微博QQ類(lèi)推。
而最后的參數(shù)為BaseShareContent類(lèi)型,實(shí)際傳參是new出平臺(tái)對(duì)象就可以了,如:new QZoneShareContent()作為參數(shù)傳入方法。

封裝后的點(diǎn)擊事件

    //新浪微博
    shareToFriend(this, mController, SHARE_MEDIA.SINA, new SinaShareContent());
    //QQ空間
    shareToFriend(this, mController, SHARE_MEDIA.QZONE, new QZoneShareContent());
    //QQ
    shareToFriend(this, mController, SHARE_MEDIA.QQ, new QQShareContent());
    //微信
    shareToFriend(this, mController, SHARE_MEDIA.WEIXIN, new WeiXinShareContent());
    //微信朋友圈
    shareToFriend(this, mController, SHARE_MEDIA.WEIXIN_CIRCLE, new CircleShareContent());

到這里就OK啦(__)

更加直觀系統(tǒng)的使用參看項(xiàng)目?jī)?nèi)Demo


本文作者:paradoxie
個(gè)人主頁(yè):謝盒盒的小黑屋,不止說(shuō)技術(shù)
簡(jiǎn)書(shū)地址:簡(jiǎn)書(shū)主頁(yè),專(zhuān)注說(shuō)技術(shù)
github地址:paradoxie
轉(zhuǎn)載請(qǐng)注明出處,蟹蟹!
-------我的夢(mèng)想真的是做一條咸魚(yú)!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容