Android 友盟社會化分享的集成與封裝

Android 友盟社會化分享的集成與封裝

分享是APP中非常高頻的操作之一,在Android的開發(fā)環(huán)境中蝉娜,第三方分享框架也有很多掌桩。比較流行的包括 極光社會化分享(sharesdk)攻晒、友盟社會化分享(Ushare)鸣哀、Mob社會化分享以及在githut上比較流行的 ShareSDKShareUtilBiliShareShareLoginLib等等喳挑。 本篇文章基于友盟ShareSDK,介紹了其集成過程并對其進(jìn)行模塊化封裝滔悉,以便在項(xiàng)目中更快捷的集成和使用伊诵。

集成前準(zhǔn)備

  1. 獲取友盟Appkey

    在【友盟+】官網(wǎng)注冊并且添加新應(yīng)用,獲得Appkey回官。友盟后臺的應(yīng)用名與實(shí)際應(yīng)用名和包名無關(guān)曹宴,建議命名為應(yīng)用名+平臺(iOS/Android),Android和IOS兩個(gè)平臺不能進(jìn)行共用歉提,需要進(jìn)行分開浙炼。 建議使用企業(yè)郵箱注冊,避免使用個(gè)人郵箱注冊唯袄。

    獲取友盟Appkey
  1. 三方賬號申請

    因?yàn)樯婕暗胶透鱾€(gè)分享平臺的交互弯屈,所以在集成前需要在各個(gè)平臺創(chuàng)建應(yīng)用并提交審核。創(chuàng)建應(yīng)用后恋拷,分享资厉、登錄操作時(shí)顯示的應(yīng)用icon、名稱和對應(yīng)開放平臺設(shè)置有關(guān)蔬顾,必須要?jiǎng)?chuàng)建應(yīng)用的平臺為:微信宴偿、新浪、QQ诀豁、Facebook窄刘、Kakao、LinkeIn舷胜、Twitter娩践、釘釘。

    目前集成的內(nèi)容只包含微信烹骨、新浪翻伺、QQ三個(gè)平臺,申請渠道如下:

    平臺 申請地址
    微信開放平臺 http://open.weixin.qq.com/
    QQ互聯(lián)平臺 http://connect.qq.com/
    微博開放平臺 http://open.weibo.com

    注1:申請QQ登錄一定要在QQ互聯(lián)平臺沮焕,不是在QQ開放平臺(open.qq.com)

    注2:申請過程中可能需要企業(yè)相關(guān)資質(zhì)吨岭,如法人身份證、營業(yè)執(zhí)照峦树、稅務(wù)登記證等辣辫,需要提前準(zhǔn)備好旦事。

    注3:提交應(yīng)用申請時(shí),需要提交應(yīng)用相關(guān)的信息(應(yīng)用名稱急灭、介紹姐浮、圖標(biāo)、截圖化戳、授權(quán)回調(diào)域等),微信還需要提交《微信開放平臺網(wǎng)站信息登記表》单料。

    注4: 建議大家用企業(yè)賬號申請第三方開放平臺埋凯,不要使用個(gè)人的QQ点楼、微信、微博和郵箱進(jìn)行申請白对,這樣可以避免申請人在職位變動(dòng)或者離職后掠廓,導(dǎo)致賬號管理的風(fēng)險(xiǎn)和交接麻煩。

    注5:開放平臺申請多數(shù)需要審核流程甩恼,因此在項(xiàng)目開始時(shí)蟀瞧,建議首先申請開放平臺賬號和創(chuàng)建應(yīng)用,以免申請時(shí)間長影響開發(fā)進(jìn)度条摸。

    申請很復(fù)雜悦污,所以一般直接找產(chǎn)品經(jīng)歷要就好啦(#笑)。如果是練習(xí)用的話钉蒲,可以直接用官方Demo的包名com.umeng.soexample創(chuàng)建一個(gè)示例項(xiàng)目切端,沿用簽名文件、Appkey以及各個(gè)三方的Appkey就好了顷啼。

集成友盟sdk

在后期模塊化后踏枣,直接引入封裝好的模塊即可集成,這里先介紹一下通過添加sdk的方式集成钙蒙,以及其中我遇到過的問題茵瀑。

  1. 下載SDK

    最新SDK地址,可以看到友盟的分享包含很多平臺躬厌,這里我們只用到了微博微信QQ的分享和登錄功能马昨,不包含支付等,所以選擇默認(rèn)下載的三個(gè)精簡版即可扛施。如有需求可以參考官方開發(fā)文檔添加使用偏陪。

    image
  1. 添加SDK

    解壓下載的sdk壓縮包,我們需要用到其中common和share文件夾下的內(nèi)容煮嫌。res顧名思義都是資源文件笛谦,復(fù)制到項(xiàng)目的res目錄中,其他所有jar文件復(fù)制到項(xiàng)目的app/libs目錄下昌阿,并確保在app的gradle依賴中包含implementation fileTree(include: ['*.jar'], dir: 'libs') 饥脑,將這個(gè)文件夾中所有jar包導(dǎo)入到項(xiàng)目里恳邀。

    image
  2. 添加回調(diào)Activity

    用到的三個(gè)平臺中,只有微信需要手動(dòng)添加Activity灶轰。具體做法是谣沸,在包名目錄下創(chuàng)建wxapi文件夾,新建一個(gè)名為WXEntryActivity的Activity繼承WXCallbackActivity 笋颤,內(nèi)容為空即可乳附。

    image
  3. 配置Android Manifest XML

    在項(xiàng)目的Manifest中添加各個(gè)回調(diào)Activity:

    <activity
        android:name=".wxapi.WXEntryActivity"
        android:configChanges="keyboardHidden|orientation|screenSize"
        android:exported="true"
        android:theme="@android:style/Theme.Translucent.NoTitleBar" />
    <activity
        android:name="com.umeng.socialize.media.WBShareCallBackActivity"
        android:configChanges="keyboardHidden|orientation"
        android:exported="false"
        android:theme="@android:style/Theme.Translucent.NoTitleBar"></activity>
    <activity
        android:name="com.sina.weibo.sdk.web.WeiboSdkWebActivity"
        android:configChanges="keyboardHidden|orientation"
        android:exported="false"
        android:windowSoftInputMode="adjustResize"></activity>
    <activity
        android:name="com.sina.weibo.sdk.share.WbShareTransActivity"
        android:launchMode="singleTask"
        android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen">
        <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.tencent.tauth.AuthActivity"
        android:launchMode="singleTask"
        android:noHistory="true">
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <data android:scheme="tencent100424468" />
        </intent-filter>
    </activity>
    <activity
        android:name="com.tencent.connect.common.AssistActivity"
        android:configChanges="orientation|keyboardHidden|screenSize"
        android:theme="@android:style/Theme.Translucent.NoTitleBar" />
    

    其中qq的appkey需要替換成自己申請的appkey,這里用的是友盟官方demo的以作測試用伴澄。

  4. 添加權(quán)限

    在AndroidManifest中添加以下權(quán)限:

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
    

    如果項(xiàng)目的目標(biāo)sdk版本高于Android6.0赋除,即 targetSdkVersion >= 23 ,還需要在項(xiàng)目中添加權(quán)限的動(dòng)態(tài)申請:

    if (Build.VERSION.SDK_INT >= 23) {
        String[] mPermissionList = new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.CALL_PHONE, Manifest.permission.READ_LOGS, Manifest.permission.READ_PHONE_STATE, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.SET_DEBUG_APP, Manifest.permission.SYSTEM_ALERT_WINDOW, Manifest.permission.GET_ACCOUNTS, Manifest.permission.WRITE_APN_SETTINGS};
        ActivityCompat.requestPermissions(this, mPermissionList, 123);
    }
    
  5. 初始化設(shè)置

    將前面的都集成之后非凌,接下來就可以正式進(jìn)入到代碼層面的操作啦举农。在Application中調(diào)用友盟的初始化接口,以及設(shè)置各個(gè)平臺的appkey敞嗡,這里全部用的是官方demo測試用的appkey颁糟。

    public class App extends Application {
        @Override
        public void onCreate() {
            super.onCreate();
            //初始化組件化基礎(chǔ)庫, 統(tǒng)計(jì)SDK/推送SDK/分享SDK都必須調(diào)用此初始化接口
            UMConfigure.init(this, "5bed13e1f1f5564655000404", "Umeng", UMConfigure.DEVICE_TYPE_PHONE,
                    "d9352161be267fb40fb12ad5eb04edf9");
            UMShareAPI.get(this);
        }
    
        //各個(gè)平臺的配置
        {
            //微信
            PlatformConfig.setWeixin("wxdc1e388c3822c80b", "3baf1193c85774b3fd9d18447d76cab0");
            //新浪微博(第三個(gè)參數(shù)為回調(diào)地址)
            PlatformConfig.setSinaWeibo("3921700954", "04b48b094faeb16683c32669824ebdad", "http://sns.whalecloud.com");
            //QQ
            PlatformConfig.setQQZone("100424468", "c7394704798a158208a74ab60104f0ba");
            PlatformConfig.setYixin("yxc0614e80c9304c11b0391514d09f13bf");
            PlatformConfig.setTwitter("3aIN7fuF685MuZ7jtXkQxalyi", "MK6FEYG63eWcpDFgRYw4w9puJhzDl0tyuqWjZ3M7XJuuG7mMbO");
            PlatformConfig.setAlipay("2015111700822536");
            PlatformConfig.setLaiwang("laiwangd497e70d4", "d497e70d4c3e4efeab1381476bac4c5e");
            PlatformConfig.setPinterest("1439206");
            PlatformConfig.setKakao("e4f60e065048eb031e235c806b31c70f");
            PlatformConfig.setDing("dingoalmlnohc0wggfedpk");
            PlatformConfig.setVKontakte("5764965", "5My6SNliAaLxEm3Lyd9J");
            PlatformConfig.setDropbox("oz8v5apet3arcdy", "h7p2pjbzkkxt02a");
    
        }
    }
    
  6. 添加簽名文件

    部分平臺在申請appkey的時(shí)候就需要項(xiàng)目的簽名文件,如果沒有的話會影響授權(quán)喉悴。常規(guī)項(xiàng)目只要正常申請好簽名就可以了棱貌,這里講一下作為測試用例如何添加簽名。

    將官方demo中app目錄下的debug.keystore復(fù)制到自己的練習(xí)項(xiàng)目app目錄下

    在項(xiàng)目的app.gradle依賴中android條目下添加如下代碼:

    buildTypes {
        release {
            // 是否進(jìn)行混淆
            minifyEnabled false
            // 簽名文件
            signingConfig signingConfigs.debug
            // 混淆文件的位置
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        debug {
            minifyEnabled false
            signingConfig signingConfigs.debug
            proguardFiles 'proguard-rules.pro'
        }
    }
    signingConfigs {
        debug {
            storeFile file('debug.keystore')
            storePassword "android"
            keyAlias "androiddebugkey"
            keyPassword "android"
        }
    }
    

開始分享

終于到了分享的步驟箕肃,是騾子是馬要牽出來溜溜看看能不能走了婚脱,先介紹一下友盟分享的兩種形式:

  • 使用分享面板的分享,用戶可以調(diào)用我們的打開分享面板的方法突雪,點(diǎn)擊分享面板的對應(yīng)平臺進(jìn)行分享起惕。

  • 不使用分享面板的分享,用戶可以自己寫分享按鈕咏删,或者觸發(fā)事件惹想,然后調(diào)用我們的分享方法,進(jìn)行分享督函。簡而言之嘀粱,直接分享就是在用戶自己的界面組件中插入分享行為,分享面板是打開我們寫好的一個(gè)界面組件辰狡,根據(jù)點(diǎn)擊事件進(jìn)行分享锋叨。

    可分享的內(nèi)容包括:

平臺 授權(quán) 可分享內(nèi)容 用戶信息
qq 文本 圖片 鏈接 視頻 音樂
qq空間 同qq 文字(說說) 圖片(說說) 鏈接 視頻 音樂 同qq
微信 文本 圖片 鏈接 視頻 音樂
微信朋友圈 同微信 文本 圖片 鏈接 視頻 音樂 (分享鏈接不顯示描述) 同微信
微信收藏 同微信 文本 圖片 鏈接 視頻 音樂 文件 同微信
新浪微博 文本 圖片 鏈接 視頻 音樂 文件

下面以直接分享一個(gè)網(wǎng)站到微信平臺為例,看一下具體的代碼實(shí)現(xiàn):

  UMWeb web = new UMWeb("https://gank.io/");//創(chuàng)建要分享的Web對象宛篇,傳入分享的url地址
  web.setTitle("測試分享標(biāo)題");//設(shè)置標(biāo)題
  web.setThumb(new UMImage(this, R.drawable.thumb));//設(shè)置傳入顯示的縮略圖
  web.setDescription("測試分享內(nèi)容測試分享內(nèi)容測試分享內(nèi)容測試分享內(nèi)容測試分享內(nèi)容");//設(shè)置描述
  new ShareAction(ShareDetailActivity.this)//開啟分享
                  .withMedia(web) //填入創(chuàng)建好的分享內(nèi)容
                  .setPlatform(SHARE_MEDIA.WEIXIN)//選擇分享平臺
                  .setCallback(shareListener)//設(shè)置對分享返回結(jié)果的監(jiān)聽
                  .share();//啟動(dòng)分享操作

實(shí)現(xiàn)效果如下:

image

以面板的形式分享這個(gè)網(wǎng)站:

  ShareBoardlistener boardListener = new ShareBoardlistener() { //創(chuàng)建面板的監(jiān)聽器
      @Override
      public void onclick(SnsPlatform snsPlatform, SHARE_MEDIA platform) {
          new ShareAction(mActivity)//開啟分享
                  .withMedia(web) //填入創(chuàng)建好的分享內(nèi)容
                  .setPlatform(platform)//填入選擇的平臺
                  .setCallback(shareListener)//設(shè)置對分享返回結(jié)果的監(jiān)聽
                  .share();//啟動(dòng)分享操作
      }
  };
  new ShareAction(mActivity)
          .setDisplayList(SHARE_MEDIA.WEIXIN, SHARE_MEDIA.WEIXIN_CIRCLE, SHARE_MEDIA.WEIXIN_FAVORITE,
                  SHARE_MEDIA.SINA, SHARE_MEDIA.QQ, SHARE_MEDIA.QZONE)//設(shè)置分享面板顯示的平臺
          .setShareboardclickCallback(boardListener)//添加之前創(chuàng)建的面板監(jiān)聽器
          .open(config);//開啟分享面板 其中可傳入能對面板樣式進(jìn)行自定義操作的config對象    
        //比如設(shè)置面板在底部還是中部顯示娃磺、是否有取消按鈕、圖標(biāo)形狀叫倍、字體大小和背景顏色等等

默認(rèn)居中的面板效果如下:

image

最后不要忘記在調(diào)用分享的Activity中偷卧,添加如下代碼豺瘤,關(guān)閉監(jiān)聽,防止內(nèi)存泄露等問題听诸。

  @Override
  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
      super.onActivityResult(requestCode, resultCode, data);
      UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);
  }
  @Override
      protected void onDestroy() {
          super.onDestroy();
          UMShareAPI.get(this).release();
      }

對友盟分享的模塊化和代碼封裝

在前面的內(nèi)容里坐求,我們完整的體驗(yàn)了友盟社會化分享的準(zhǔn)備、集成和使用晌梨,雖然看起來比較簡單明了桥嗤,但對于初次接觸的人還是比較容易碰到問題的,在項(xiàng)目中多次集成也比較繁瑣仔蝌。所以接下來到了本文的重點(diǎn)內(nèi)容泛领,對友盟的分享進(jìn)行模塊化,在需要時(shí)直接導(dǎo)入模塊即可使用掌逛,并將主要方法進(jìn)行封裝處理师逸,在開發(fā)時(shí)提高效率司倚,減少代碼量豆混。

下面記錄一下封裝過程中的思路和過程,以及封裝后的使用方法动知。

  • 封裝過程

    在前面的使用介紹中皿伺,可以看到每一次分享,都需要提前創(chuàng)建好待分享的內(nèi)容盒粮,需要傳入的數(shù)據(jù)越多鸵鸥,代碼行數(shù)越多,所以首先對待創(chuàng)建的對象進(jìn)行封裝丹皱。

    根據(jù)分享的類型妒穴,分了8個(gè)類:

    分享類型 枚舉參數(shù)
    僅文本 SHARE_TYPE_TEXT
    僅圖片 SHARE_TYPE_IMAGE
    圖文 SHARE_TYPE_TEXTANDIMG
    網(wǎng)址 SHARE_TYPE_WEB
    網(wǎng)絡(luò)視頻 SHARE_TYPE_VIDEO
    網(wǎng)絡(luò)音樂 SHARE_TYPE_MUSIC
    GIF表情 SHARE_TYPE_EMOJI
    微信小程序 SHARE_TYPE_MINAPP

    其中圖片可以通過資源文件id、File文件摊崭、網(wǎng)絡(luò)地址讼油、Bitmap對象、還有byte[]這些方式來創(chuàng)建呢簸,其他很多類型雖然不需要圖片矮台,但很多需要縮略圖,而縮略圖的本質(zhì)也是圖片根时,所以可以將縮略圖獨(dú)立出來:

    private static UMImage mThumb;
    //創(chuàng)建待分享所用的縮略圖
    public static void createThumbImage(int thumbResId) {
        mThumb = new UMImage(mActivity, thumbResId);
    }
    
    public static void createThumbImage(File thumbFile) {
        mThumb = new UMImage(mActivity, thumbFile);
    }
    
    public static void createThumbImage(String thumbImageUrl) {
        mThumb = new UMImage(mActivity, thumbImageUrl);
    }
    
    public static void createThumbImage(Bitmap thumbBitmap) {
        mThumb = new UMImage(mActivity, thumbBitmap);
    }
    
    public static void createThumbImage(byte[] thumbBytes) {
        mThumb = new UMImage(mActivity, thumbBytes);
    }
    

    接下來以創(chuàng)建待分享的網(wǎng)址為例瘦赫,需要傳入的數(shù)據(jù)包括視頻地址、標(biāo)題蛤迎、描述确虱、縮略圖最少4個(gè)內(nèi)容,前三個(gè)都是String對象替裆,最復(fù)雜的縮略圖已經(jīng)通過上面的方法創(chuàng)建好了校辩,所以只需要添加前三個(gè)內(nèi)容就夠了:

    private static UMWeb mWeb;
    //創(chuàng)建待分享的鏈接 需要縮略圖
    public static void createUrl(String url, String title, String description) {
        mWeb = new UMWeb(url);
        mWeb.setTitle(title);
        mWeb.setDescription(description);
        mWeb.setThumb(mThumb);//傳入創(chuàng)建好的縮略圖
    }
    

    到此我們已經(jīng)創(chuàng)建好了需要分享的網(wǎng)址對象唱较,接下來自然而然就是分享了。實(shí)現(xiàn)非常簡單粗暴召川,直接傳入需要分享的平臺和類型對應(yīng)的枚舉名即可:

    public static void share(SHARE_MEDIA platform, SHARE_TYPE shareType) {
        ShareAction action = new ShareAction(mActivity)
                .setPlatform(platform).setCallback(mListener);
        switch (shareType) {
            case SHARE_TYPE_TEXT:
                action.withText(mText).share();
                break;
            case SHARE_TYPE_IMAGE:
                action.withMedia(mImage).share();
                break;
            case SHARE_TYPE_TEXTANDIMG:
                action.withText(mText).withMedia(mImage).share();
                break;
            case SHARE_TYPE_WEB:
                action.withMedia(mWeb).share();
                break;
            case SHARE_TYPE_VIDEO:
                action.withMedia(mVideo).share();
                break;
            case SHARE_TYPE_MUSIC:
                action.withMedia(mMusic).share();
                break;
            case SHARE_TYPE_EMOJI:
                action.withMedia(mEmoji).share();
                break;
            case SHARE_TYPE_MINAPP:
                action.withMedia(mMinAPP).share();
                break;
        }
    }
    

    到這里基本將直接分享的內(nèi)容進(jìn)行了封裝南缓,那么如果用戶不需要我們已經(jīng)設(shè)好的分享callback,想要自定義呢荧呐?所以需要構(gòu)建一個(gè)方法讓用戶傳入自定義的監(jiān)聽器:

    //設(shè)置分享監(jiān)聽 傳入自定義的監(jiān)聽方式
    public static void setShareListener(UMShareListener listener) {
        mListener = listener;
    }
    

    除了直接分享汉形,還有面板形式的分享,在這里提供了三種形式的封裝:

    1. 直接在中間顯示分享面板

      public static void shareBoardAtCenter(SHARE_TYPE shareType) {
          ShareBoardConfig config = new ShareBoardConfig();
          config.setShareboardPostion(ShareBoardConfig.SHAREBOARD_POSITION_CENTER);
          config.setCancelButtonVisibility(true);
          shareBoard(config, shareType);
      }
      
    2. 在底部顯示分享面板

      public static void shareBoardAtBottom(SHARE_TYPE shareType) {
          ShareBoardConfig config = new ShareBoardConfig();
          config.setShareboardPostion(ShareBoardConfig.SHAREBOARD_POSITION_BOTTOM);
          config.setCancelButtonVisibility(true);
          shareBoard(config, shareType);
      }
      
    3. 用戶自定義分享面板

      public static void setBoardWithConfig(ShareBoardConfig config, SHARE_TYPE shareType) {
          shareBoard(config, shareType);
      }
      

    三種方式倍阐,最終都是將面板定義 config 以及要分享的類型 shareType 傳入 shareBoard() 方法中概疆,config的具體自定義方法見官方文檔,下面貼出 shareBoard() 方法:

    private static void shareBoard(ShareBoardConfig config, final SHARE_TYPE shareType) {
        ShareBoardlistener boardListener = new ShareBoardlistener() {
            @Override
            public void onclick(SnsPlatform snsPlatform, SHARE_MEDIA platform) {
                share(platform, shareType);
            }
        };
        new ShareAction(mActivity)
                .setDisplayList(SHARE_MEDIA.WEIXIN, SHARE_MEDIA.WEIXIN_CIRCLE, SHARE_MEDIA.WEIXIN_FAVORITE,
                        SHARE_MEDIA.SINA, SHARE_MEDIA.QQ, SHARE_MEDIA.QZONE)
                .setShareboardclickCallback(boardListener)
                .open(config);
    }
    

    可以看出在選擇平臺后峰搪,具體分享的實(shí)現(xiàn)方法又跳轉(zhuǎn)到了share()中岔冀,實(shí)現(xiàn)了代碼的復(fù)用,對于用戶需要自定義面板分享哪些平臺概耻,同樣可以通過setPlatforms()方法實(shí)現(xiàn):

    //設(shè)置分享面板要分享的內(nèi)容
    public static void setBoardPlatforms(SHARE_MEDIA[] platforms) {
        mPlatforms = platforms;
    }
    
  • 使用方法

    整體的使用比較簡單明了使套,不過需要注意的是,除了分享文本圖片鞠柄,其他類型都要記得先創(chuàng)建縮略圖侦高。

    下面以分享一個(gè)網(wǎng)址或者視頻為例:

    //首先需要初始化
    UShareUtils.init(this);
    //創(chuàng)建縮略圖
    UShareUtils.createThumbImage(R.drawable.cat80);
    //創(chuàng)建待分享的網(wǎng)址,傳入網(wǎng)址厌杜、標(biāo)題和描述
    UShareUtils.createUrl("https://gank.io/", "分享標(biāo)題", "分享描述");
    //創(chuàng)建待分享的視頻奉呛,傳入視頻地址、標(biāo)題和描述
    UShareUtils.createVideo("http://vfx.mtime.cn/Video/2018/10/26/mp4/181026140242572417.mp4", "《馴龍高手3》中文預(yù)告", "《馴龍高手3 》由夢工場動(dòng)畫出品夯尽,馴龍高手是影史上最受歡迎的動(dòng)畫系列之一瞧壮,而這部備受期待的新片是該系列的第三部。 ");
    //點(diǎn)擊分享
    @OnClick({R.id.tv_share_web, R.id.tv_share_video, R.id.tv_share_board, R.id.tv_share_center})
          public void onViewClicked(View view) {
                switch (view.getId()) {
                    case R.id.tv_share_web:
                        //分享WEB到QQ
                        UShareUtils.share(SHARE_MEDIA.QQ, SHARE_TYPE.SHARE_TYPE_WEB);
                        break;
                    case R.id.tv_share_video:
                        //分享視頻到微信
                        UShareUtils.share(SHARE_MEDIA.WEIXIN, SHARE_TYPE.SHARE_TYPE_VIDEO);
                        break;
                 case R.id.tv_board_board:
                        //打開底部分享面板 分享WEB
                        UShareUtils.shareBoardAtBottom(SHARE_TYPE.SHARE_TYPE_WEB);
                        break;
                    case R.id.tv_board_center:
                        //打開中部分享面板 分享視頻
                        UShareUtils.shareBoardAtBottom(SHARE_TYPE.SHARE_TYPE_VIDEO);
                        break;
                }
        }
    
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末匙握,一起剝皮案震驚了整個(gè)濱河市咆槽,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌肺孤,老刑警劉巖罗晕,帶你破解...
    沈念sama閱讀 222,000評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異赠堵,居然都是意外死亡小渊,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評論 3 399
  • 文/潘曉璐 我一進(jìn)店門茫叭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來酬屉,“玉大人,你說我怎么就攤上這事∧湃” “怎么了杀饵?”我有些...
    開封第一講書人閱讀 168,561評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長谬擦。 經(jīng)常有香客問我切距,道長,這世上最難降的妖魔是什么惨远? 我笑而不...
    開封第一講書人閱讀 59,782評論 1 298
  • 正文 為了忘掉前任谜悟,我火速辦了婚禮,結(jié)果婚禮上北秽,老公的妹妹穿的比我還像新娘葡幸。我一直安慰自己,他們只是感情好贺氓,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,798評論 6 397
  • 文/花漫 我一把揭開白布蔚叨。 她就那樣靜靜地躺著,像睡著了一般辙培。 火紅的嫁衣襯著肌膚如雪蔑水。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,394評論 1 310
  • 那天虏冻,我揣著相機(jī)與錄音肤粱,去河邊找鬼弹囚。 笑死厨相,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的鸥鹉。 我是一名探鬼主播蛮穿,決...
    沈念sama閱讀 40,952評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼毁渗!你這毒婦竟也來了践磅?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,852評論 0 276
  • 序言:老撾萬榮一對情侶失蹤灸异,失蹤者是張志新(化名)和其女友劉穎府适,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體肺樟,經(jīng)...
    沈念sama閱讀 46,409評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡檐春,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,483評論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了么伯。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片疟暖。...
    茶點(diǎn)故事閱讀 40,615評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出俐巴,到底是詐尸還是另有隱情骨望,我是刑警寧澤,帶...
    沈念sama閱讀 36,303評論 5 350
  • 正文 年R本政府宣布欣舵,位于F島的核電站擎鸠,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏缘圈。R本人自食惡果不足惜糠亩,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,979評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望准验。 院中可真熱鬧赎线,春花似錦、人聲如沸糊饱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽另锋。三九已至滞项,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間夭坪,已是汗流浹背文判。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留室梅,地道東北人戏仓。 一個(gè)月前我還...
    沈念sama閱讀 49,041評論 3 377
  • 正文 我出身青樓,卻偏偏與公主長得像亡鼠,于是被迫代替她去往敵國和親赏殃。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,630評論 2 359

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