社會化分享插件集成分享

一.前提摘要

社會化分享每一個app必備的推廣需求,不管是拉新,邀請,遊戲獎勵,等等都離不開分享的影子,下面咱們介紹下社會化分享的插件;php

首先要說下,如今的社交App,社區App等,國內外的狀況都是從之前的百花齊放到如今的幾個巨頭,如今可以真正存活下來的或者說用戶羣體大的,也就微信、QQ、微博、Facebook,因此,咱們就簡單的從這幾個平臺的社會化分享集成到app來對比下;android

市面上社會化分享的插件仍是比較多的,好比ShareSDK(Mob),U-Share(友盟+),極光等等,不過用的比較多的如今是ShareSDK的了,畢竟友盟主打的是統計,極光主打的是推送,Mob主打的ShareSDK,不過咱們仍是選取ShareSDK和友盟+對比下;web

集成準備:須要作這幾個平臺的分享,或者第三方登陸,必需要先去對應的第三方開發者或者開放平臺申請對應的應用獲得id或者key等;api

QQ:http://open.qq.com微信

微信:http://open.qq.weixin.com網絡

新浪:http://open.weibo.comapp

Facebook:https://developers.facebook.comide

這個論壇中有申請流程能夠參考一下:測試

http://bbs.mob.com/forum.php?mod=viewthread&tid=275&page=1&extra=#pid860gradle

須要說明的QQ,若是隻須要作分享的話能夠不經過審覈,則登陸須要;

Fb作分享和登陸目前均可以不須要審覈;

微信和新浪必需要經過審覈才能夠,新浪沒經過審覈前能夠測試,可是微信不能夠;

好了上面若是準備好了咱們繼續往下說;

 

  • U-Share集成

下載地址:https://developer.umeng.com/sdk/android

集成文檔:

https://developer.umeng.com/docs/66632/detail/66639#h1-u96C6u6210u51C6u59073

須要吐槽下,那個自動集成千萬別浪費時間,我找了很久,最後問了客服,那個是統計的,分享的話目前只支持手動集成哦

首先看下面的圖片,友盟這裏作的仍是不錯的;

如上圖能夠看到,在微博和QQ、微信都作了精簡版,咱們這裏只須要分享顧只下載精簡版便可,具體差別能夠將鼠標放到問號處本身查看;

如今下載完以下圖所示:

  1. 將Common庫是公共庫,share文件夾中的是社會化分享須要的,都要集成到項目中;
  2. 添加回調activity,這幾個平臺只須要添加微信的便可

這個類是微信規定的,因此必修要放到包名.wxapi目錄下;

QQ和微博不須要添加activity,可是須要在分享和登陸的Activity中添加以下代碼;

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

注意onActivityResult不可在fragment中實現,若是在fragment中調用登陸或分享,須要在fragment依賴的Activity中實現

 

  1. 集成完資源和jar包以後,配置AndroidManifest.xml權限及Act

新浪:

<activity
        android:name="com.umeng.socialize.media.WBShareCallBackActivity"
        android:configChanges="keyboardHidden|orientation"
        android:theme="@android:style/Theme.Translucent.NoTitleBar"
        android:exported="false"
        >
    </activity>
    <activity android:name="com.sina.weibo.sdk.web.WeiboSdkWebActivity"
              android:configChanges="keyboardHidden|orientation"
              android:exported="false"
              android:windowSoftInputMode="adjustResize"
    >
    </activity>
    <activity
        android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"
        android:launchMode="singleTask"
        android:name="com.sina.weibo.sdk.share.WbShareTransActivity">
        <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=".wxapi.WXEntryActivity"
            android:configChanges="keyboardHidden|orientation|screenSize"
            android:exported="true"
            android:theme="@android:style/Theme.Translucent.NoTitleBar" />

QQ:

<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:theme="@android:style/Theme.Translucent.NoTitleBar"
        android:configChanges="orientation|keyboardHidden|screenSize"/>

權限:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />

若是須要使用QQ純圖分享或避免其它平臺純圖分享的時候圖片不被壓縮,能夠增長如下權限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>   
   <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

Android6.0權限適配

請查看你的build.gradle文件,若是 targetSdkVersion小於或等於22,能夠忽略這一步,若是大於或等於23,須要作權限的動態申請:

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);
              }

其中123是requestcode,能夠根據這個code判斷,用戶是否贊成了受權。若是沒有贊成,能夠根據回調進行相應處理:

@Override
public void onRequestPermissionsResult(int requestCode,
        String permissions[], int[] grantResults) {

}

好了到這裏就集成完了,雖然是複製複製的,可是仍是有點小麻煩,集成時間大概十分鐘左右

  1. 代碼調用

初始化代碼,Facebook有些特殊,不是在代碼中配置,以下圖所示,文檔還亂了,不吐槽了,理解萬歲;

new ShareAction(MainActivity.this)
                        .setPlatform(SHARE_MEDIA.QQ)//傳入平臺
                        .withText("hello")//分享內容
                        .setCallback(shareListener)//回調監聽器
                        .share();

如上代碼所示,其餘的平臺大同小異,只要換了傳入的平臺對象便可;

  1. 至此,分享代碼已經完成了,U-Share,只能手動集成,沒有當下最熱的gradle自動加載的方式,不過相信將來確定會加入的;其次就是配置有些繁瑣了,想調通仍是須要耗費必定的時間的;

下面咱們來看下jar包的大小

umeng-common-1.5.4.jar(公共jar)

352k(比ShaerSDK小)

umeng-share-core-6.9.3.jar(Ushare所需)

umeng-sharetool-6.9.3.jar(Ushare所需)

282k(比ShareSDK大)

umeng-share-facebook-6.9.3.jar

510k(比ShareSDK大)

umeng-share-QQ-simplify-6.9.3.jar

78k(比ShareSDK大)

umeng-share-sina-simplify-6.9.3.jar

81k(比ShareSDK大)

umeng-share-wechat-simplify-6.9.3.jar

31k(比ShaerSDK小)

總大小:

1634k(比ShareSDK大)

 

  • ShareSDK集成

集成文檔:http://wiki.mob.com/sdk-share-android-3-0-0/

ShareSDK採用的是gradle集成的方式,終於不用手動集成了,也不須要下載資源和jar包了,哈哈哈,讓我先笑一會,好了咱們繼續;

  1. 按照文檔在根目錄下的build.gradle中配置mobsdk的加載,從jekins上加載,配置是很是簡單的;

classpath "com.mob.sdk:MobSDK:2018.0319.1724"

以後在想要調用分享的模塊中配置以下內容:

apply plugin: 'com.mob.sdk'
MobSDK {
    appKey "d580ad56b4b5"
    appSecret "7fcae59a62342e7e2759e9e397c82bdd"
    ShareSDK {
        //平臺配置信息
        devInfo {
            SinaWeibo {
                appKey "568898243"
                appSecret "38a4f8204cc784f81f9f0daaf31e02e3"
                callbackUri "http://www.sharesdk.cn"
                shareByAppClient false
            }
            Wechat {
                appId "wx4868b35061f87885"
                appSecret "64020361b8ec4c99936c0e3999a9f249"
            }
            WechatMoments{
                appId "wx4868b35061f87885"
                appSecret "64020361b8ec4c99936c0e3999a9f249"
                bypassApproval true
            }
            QQ {
                appId "100371282"
                appKey "aed9b0303e3ed1e27bae87c33761161d"
                shareByAppClient true
            }
            QZone {
                appId "100371282"
                appKey "aed9b0303e3ed1e27bae87c33761161d"
                bypassApproval true
            }
            Facebook {
                appKey "1412473428822331"
                appSecret "a42f4f3f867dc947b9ed6020c2e93558"
                callbackUri "https://mob.com"
            }
        }
    }
}

如上所示,ShareSDK將微信的幾個平臺,還有QQ和QZone都分開處理了,這樣須要更多的配置了,可是也就更靈活了,不須要的資源徹底能夠不須要加進來了,各有各的好處;

其次,上面的字段的說明,能夠看ShareSDK的集成文檔便可,裏面都有說明;將本身的key申請好後,替換上面默認的便可,而後從新編譯一下,就集成完成了,是的你沒有聽錯,集成完了,不須要加任何jar包,不須要加任何act的配置,gradle的好處大大的體現出來了;

時間成本大大的減小了,而且在回調的配置方面減小了本身的配置上的操做失誤,下降了錯誤的可能性,並且還不須要初始化哦,親測可靠,下面咱們開始調用代碼分享吧;

  1. 調用代碼
Platform.ShareParams sp = new Platform.ShareParams();
                sp.setTitle("測試分享的標題");
                sp.setTitleUrl("http://sharesdk.cn"); // 標題的超連接
                sp.setText("測試分享的文本");
                sp.setImageUrl("http://www.someserver.com/測試圖片網絡地址.jpg");
                sp.setSite("發佈分享的網站名稱");
                sp.setSiteUrl("發佈分享網站的地址");

                Platform qzone = ShareSDK.getPlatform (QZone.NAME);
// 設置分享事件回調(注:回調放在不能保證在主線程調用,不能夠在裏面直接處理UI操做)
                qzone.setPlatformActionListener (new PlatformActionListener() {
                    public void onError(Platform arg0, int arg1, Throwable arg2) {
                        //失敗的回調,arg:平臺對象,arg1:表示當前的動做,arg2:異常信息
                    }
                    public void onComplete(Platform arg0, int arg1, HashMap arg2) {
                        //分享成功的回調
                    }
                    public void onCancel(Platform arg0, int arg1) {
                        //取消分享的回調
                    }
                });
// 執行圖文分享
                qzone.share(sp);

如上所示,代碼調用完成,不一樣的平臺更換不一樣的第三方對象便可,能夠在快速集成文檔中查看,而後就是分享類型,也能夠在文檔中查看《各平臺分享內容說明》

  1. 至此,咱們集成和調用代碼就已經完成了,是否是Gradle的方式很簡單呢,下面咱們來對比下ShareSDK的先後包體增長大小:

785K

MobTools-2018.0911.1425.jar

MobCommons-2018.0918.1444.jar(公共jar)

464k(比Ushare大)

ShareSDK-Core-3.3.0.jar

120k(比Ushare小)

ShareSDK-QQ-3.3.0.jar

ShareSDK-QZone-3.3.0.jar

74k(比Ushare小)

ShareSDK-SinaWeibo-3.3.0.jar

70k(比Ushare小)

ShareSDK-Wechat-3.3.0.jar

ShareSDK-Wechat-Core-3.3.0.jar

ShareSDK-Wechat-Moments-3.3.0.jar

57k(比Ushare大)

ShareSDK-Facebook-3.3.0.jar

36k(比Ushare小)

總大小:

821k

 

  • 最終對比

對比項

Ushare

ShareSDK

集成時間

10min

2min

集成jar包的大小

1634k(fb的jar太大)

821k

集成方式

手動jar包集成

Gradle集成

配置項

配置的比較多(畢竟不是gradle集成)

配置項比較少,節省時間

客服(滿分10分)

6分(無技術客服,而且回覆比較慢)

9分(有技術客服,回覆較快)

更新週期

平均三個月更新一次

平均一個多月更新一次

 

須要說明的是大小問題,雖然jar包對比差了一倍,可是U-share的fb的jar比較大,若是不集成fb的狀況下,二者相差很少;

相關文章
相關標籤/搜索