Android 友盟社會(huì)化分享的集成與封裝

Android 友盟社會(huì)化分享的集成與封裝

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

集成前準(zhǔn)備

  1. 獲取友盟Appkey

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

    獲取友盟Appkey
  1. 三方賬號(hào)申請(qǐng)

    因?yàn)樯婕暗胶透鱾€(gè)分享平臺(tái)的交互,所以在集成前需要在各個(gè)平臺(tái)創(chuàng)建應(yīng)用并提交審核。創(chuàng)建應(yīng)用后,分享、登錄操作時(shí)顯示的應(yīng)用icon、名稱和對(duì)應(yīng)開放平臺(tái)設(shè)置有關(guān),必須要?jiǎng)?chuàng)建應(yīng)用的平臺(tái)為:微信、新浪、QQ、Facebook、Kakao、LinkeIn、Twitter、釘釘。

    目前集成的內(nèi)容只包含微信、新浪、QQ三個(gè)平臺(tái),申請(qǐng)渠道如下:

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

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

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

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

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

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

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

集成友盟sdk

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

  1. 下載SDK

    最新SDK地址,可以看到友盟的分享包含很多平臺(tái),這里我們只用到了微博微信QQ的分享和登錄功能,不包含支付等,所以選擇默認(rèn)下載的三個(gè)精簡(jiǎn)版即可。如有需求可以參考官方開發(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è)平臺(tái)中,只有微信需要手動(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需要替換成自己申請(qǐng)的appkey,這里用的是友盟官方demo的以作測(cè)試用。

  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)申請(qǐng):

    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è)平臺(tái)的appkey,這里全部用的是官方demo測(cè)試用的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è)平臺(tái)的配置
        {
            //微信
            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. 添加簽名文件

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

    將官方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)擊分享面板的對(duì)應(yīng)平臺(tái)進(jìn)行分享。

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

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

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

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

  UMWeb web = new UMWeb("https://gank.io/");//創(chuàng)建要分享的Web對(duì)象,傳入分享的url地址
  web.setTitle("測(cè)試分享標(biāo)題");//設(shè)置標(biāo)題
  web.setThumb(new UMImage(this, R.drawable.thumb));//設(shè)置傳入顯示的縮略圖
  web.setDescription("測(cè)試分享內(nèi)容測(cè)試分享內(nèi)容測(cè)試分享內(nèi)容測(cè)試分享內(nèi)容測(cè)試分享內(nèi)容");//設(shè)置描述
  new ShareAction(ShareDetailActivity.this)//開啟分享
                  .withMedia(web) //填入創(chuàng)建好的分享內(nèi)容
                  .setPlatform(SHARE_MEDIA.WEIXIN)//選擇分享平臺(tái)
                  .setCallback(shareListener)//設(shè)置對(duì)分享返回結(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)//填入選擇的平臺(tái)
                  .setCallback(shareListener)//設(shè)置對(duì)分享返回結(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è)置分享面板顯示的平臺(tái)
          .setShareboardclickCallback(boardListener)//添加之前創(chuàng)建的面板監(jiān)聽器
          .open(config);//開啟分享面板 其中可傳入能對(duì)面板樣式進(jìn)行自定義操作的config對(duì)象    
        //比如設(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();
      }

對(duì)友盟分享的模塊化和代碼封裝

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

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

  • 封裝過程

    在前面的使用介紹中,可以看到每一次分享,都需要提前創(chuàng)建好待分享的內(nèi)容,需要傳入的數(shù)據(jù)越多,代碼行數(shù)越多,所以首先對(duì)待創(chuàng)建的對(duì)象進(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對(duì)象、還有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對(duì)象,最復(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)址對(duì)象,接下來自然而然就是分享了。實(shí)現(xiàn)非常簡(jiǎn)單粗暴,直接傳入需要分享的平臺(tái)和類型對(duì)應(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);
    }
    

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

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

    整體的使用比較簡(jiǎn)單明了,不過需要注意的是,除了分享文本圖片,其他類型都要記得先創(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 》由夢(mèng)工場(chǎng)動(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)容合作請(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)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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