1. 程式人生 > >社會化分享外掛整合分享

社會化分享外掛整合分享

一.前提摘要

社會化分享每個app必備的推廣需求,無論是拉新,邀請,遊戲獎勵,等等都離不開分享的影子,下面我們介紹下社會化分享的外掛;

首先要說下,現在的社交App,社群App等,國內外的情況都是從以前的百花齊放到現在的幾個巨頭,現在能夠真正存活下來的或者說使用者群體大的,也就微信、QQ、微博、Facebook,所以,我們就簡單的從這幾個平臺的社會化分享整合到app來對比下;

市面上社會化分享的外掛還是比較多的,比如ShareSDK(Mob),U-Share(友盟+),極光等等,不過用的比較多的現在是ShareSDK的了,畢竟友盟主打的是統計,極光主打的是推送,Mob主打的ShareSDK,不過我們還是選取ShareSDK和友盟+對比下;

整合準備:需要做這幾個平臺的分享,或者第三方登入,必須要先去對應的第三方開發者或者開放平臺申請對應的應用得到id或者key等;

QQ:http://open.qq.com

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

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

Facebook:https://developers.facebook.com

這個論壇中有申請流程可以參考一下:

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

需要說明的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的情況下,兩者相差不多;